Conflicts: kernel/sysctl.c
Unified · Split
| @@ -823,8 +823,8 @@ S: D-69231 Rauenberg · 822 unmodified lines | |||
| 823 | S: Germany | 823 | S: Germany |
| 824 | 824 | ||
| 825 | N: Jean Delvare | 825 | N: Jean Delvare |
| 826 | E: khali@linux-fr.org | 826 | E: jdelvare@suse.de |
| 827 | W: http://khali.linux-fr.org/ | 827 | W: http://jdelvare.nerim.net/ |
| 828 | D: Several hardware monitoring drivers | 828 | D: Several hardware monitoring drivers |
| 829 | S: France | 829 | S: France |
| 830 | 830 | ||
| @@ -1,13 +1,13 @@ | |||
| 1 | What: /config/usb-gadget | 1 | What: /config/usb-gadget |
| 2 | Date: Jun 2013 | 2 | Date: Jun 2013 |
| 3 | KenelVersion: 3.11 | 3 | KernelVersion: 3.11 |
| 4 | Description: | 4 | Description: |
| 5 | This group contains sub-groups corresponding to created | 5 | This group contains sub-groups corresponding to created |
| 6 | USB gadgets. | 6 | USB gadgets. |
| 7 | 7 | ||
| 8 | What: /config/usb-gadget/gadget | 8 | What: /config/usb-gadget/gadget |
| 9 | Date: Jun 2013 | 9 | Date: Jun 2013 |
| 10 | KenelVersion: 3.11 | 10 | KernelVersion: 3.11 |
| 11 | Description: | 11 | Description: |
| 12 | 12 | ||
| 13 | The attributes of a gadget: | 13 | The attributes of a gadget: |
| @@ -27,7 +27,7 @@ Description: · 13 unmodified lines | |||
| 27 | 27 | ||
| 28 | What: /config/usb-gadget/gadget/configs | 28 | What: /config/usb-gadget/gadget/configs |
| 29 | Date: Jun 2013 | 29 | Date: Jun 2013 |
| 30 | KenelVersion: 3.11 | 30 | KernelVersion: 3.11 |
| 31 | Description: | 31 | Description: |
| 32 | This group contains a USB gadget's configurations | 32 | This group contains a USB gadget's configurations |
| 33 | 33 | ||
| @@ -58,20 +58,20 @@ Description: · 24 unmodified lines | |||
| 58 | 58 | ||
| 59 | What: /config/usb-gadget/gadget/functions | 59 | What: /config/usb-gadget/gadget/functions |
| 60 | Date: Jun 2013 | 60 | Date: Jun 2013 |
| 61 | KenelVersion: 3.11 | 61 | KernelVersion: 3.11 |
| 62 | Description: | 62 | Description: |
| 63 | This group contains functions available to this USB gadget. | 63 | This group contains functions available to this USB gadget. |
| 64 | 64 | ||
| 65 | What: /config/usb-gadget/gadget/strings | 65 | What: /config/usb-gadget/gadget/strings |
| 66 | Date: Jun 2013 | 66 | Date: Jun 2013 |
| 67 | KenelVersion: 3.11 | 67 | KernelVersion: 3.11 |
| 68 | Description: | 68 | Description: |
| 69 | This group contains subdirectories for language-specific | 69 | This group contains subdirectories for language-specific |
| 70 | strings for this gadget. | 70 | strings for this gadget. |
| 71 | 71 | ||
| 72 | What: /config/usb-gadget/gadget/strings/language | 72 | What: /config/usb-gadget/gadget/strings/language |
| 73 | Date: Jun 2013 | 73 | Date: Jun 2013 |
| 74 | KenelVersion: 3.11 | 74 | KernelVersion: 3.11 |
| 75 | Description: | 75 | Description: |
| 76 | The attributes: | 76 | The attributes: |
| 77 | 77 | ||
| @@ -1,6 +1,6 @@ | |||
| 1 | What: /config/usb-gadget/gadget/functions/acm.name | 1 | What: /config/usb-gadget/gadget/functions/acm.name |
| 2 | Date: Jun 2013 | 2 | Date: Jun 2013 |
| 3 | KenelVersion: 3.11 | 3 | KernelVersion: 3.11 |
| 4 | Description: | 4 | Description: |
| 5 | 5 | ||
| 6 | This item contains just one readonly attribute: port_num. | 6 | This item contains just one readonly attribute: port_num. |
| @@ -1,6 +1,6 @@ | |||
| 1 | What: /config/usb-gadget/gadget/functions/ecm.name | 1 | What: /config/usb-gadget/gadget/functions/ecm.name |
| 2 | Date: Jun 2013 | 2 | Date: Jun 2013 |
| 3 | KenelVersion: 3.11 | 3 | KernelVersion: 3.11 |
| 4 | Description: | 4 | Description: |
| 5 | The attributes: | 5 | The attributes: |
| 6 | 6 | ||
| @@ -1,6 +1,6 @@ | |||
| 1 | What: /config/usb-gadget/gadget/functions/eem.name | 1 | What: /config/usb-gadget/gadget/functions/eem.name |
| 2 | Date: Jun 2013 | 2 | Date: Jun 2013 |
| 3 | KenelVersion: 3.11 | 3 | KernelVersion: 3.11 |
| 4 | Description: | 4 | Description: |
| 5 | The attributes: | 5 | The attributes: |
| 6 | 6 | ||
| @@ -0,0 +1,9 @@ | |||
| 1 | What: /config/usb-gadget/gadget/functions/ffs.name | ||
| 2 | Date: Nov 2013 | ||
| 3 | KernelVersion: 3.13 | ||
| 4 | Description: The purpose of this directory is to create and remove it. | ||
| 5 | |||
| 6 | A corresponding USB function instance is created/removed. | ||
| 7 | There are no attributes here. | ||
| 8 | |||
| 9 | All parameters are set through FunctionFS. | ||
| @@ -0,0 +1,8 @@ | |||
| 1 | What: /config/usb-gadget/gadget/functions/Loopback.name | ||
| 2 | Date: Nov 2013 | ||
| 3 | KernelVersion: 3.13 | ||
| 4 | Description: | ||
| 5 | The attributes: | ||
| 6 | |||
| 7 | qlen - depth of loopback queue | ||
| 8 | bulk_buflen - buffer length | ||
| @@ -1,6 +1,6 @@ | |||
| 1 | What: /config/usb-gadget/gadget/functions/mass_storage.name | 1 | What: /config/usb-gadget/gadget/functions/mass_storage.name |
| 2 | Date: Oct 2013 | 2 | Date: Oct 2013 |
| 3 | KenelVersion: 3.13 | 3 | KernelVersion: 3.13 |
| 4 | Description: | 4 | Description: |
| 5 | The attributes: | 5 | The attributes: |
| 6 | 6 | ||
| @@ -13,7 +13,7 @@ Description: · 6 unmodified lines | |||
| 13 | 13 | ||
| 14 | What: /config/usb-gadget/gadget/functions/mass_storage.name/lun.name | 14 | What: /config/usb-gadget/gadget/functions/mass_storage.name/lun.name |
| 15 | Date: Oct 2013 | 15 | Date: Oct 2013 |
| 16 | KenelVersion: 3.13 | 16 | KernelVersion: 3.13 |
| 17 | Description: | 17 | Description: |
| 18 | The attributes: | 18 | The attributes: |
| 19 | 19 | ||
| @@ -1,6 +1,6 @@ | |||
| 1 | What: /config/usb-gadget/gadget/functions/ncm.name | 1 | What: /config/usb-gadget/gadget/functions/ncm.name |
| 2 | Date: Jun 2013 | 2 | Date: Jun 2013 |
| 3 | KenelVersion: 3.11 | 3 | KernelVersion: 3.11 |
| 4 | Description: | 4 | Description: |
| 5 | The attributes: | 5 | The attributes: |
| 6 | 6 | ||
| @@ -1,6 +1,6 @@ | |||
| 1 | What: /config/usb-gadget/gadget/functions/obex.name | 1 | What: /config/usb-gadget/gadget/functions/obex.name |
| 2 | Date: Jun 2013 | 2 | Date: Jun 2013 |
| 3 | KenelVersion: 3.11 | 3 | KernelVersion: 3.11 |
| 4 | Description: | 4 | Description: |
| 5 | 5 | ||
| 6 | This item contains just one readonly attribute: port_num. | 6 | This item contains just one readonly attribute: port_num. |
| @@ -1,6 +1,6 @@ | |||
| 1 | What: /config/usb-gadget/gadget/functions/phonet.name | 1 | What: /config/usb-gadget/gadget/functions/phonet.name |
| 2 | Date: Jun 2013 | 2 | Date: Jun 2013 |
| 3 | KenelVersion: 3.11 | 3 | KernelVersion: 3.11 |
| 4 | Description: | 4 | Description: |
| 5 | 5 | ||
| 6 | This item contains just one readonly attribute: ifname. | 6 | This item contains just one readonly attribute: ifname. |
| @@ -1,6 +1,6 @@ | |||
| 1 | What: /config/usb-gadget/gadget/functions/rndis.name | 1 | What: /config/usb-gadget/gadget/functions/rndis.name |
| 2 | Date: Jun 2013 | 2 | Date: Jun 2013 |
| 3 | KenelVersion: 3.11 | 3 | KernelVersion: 3.11 |
| 4 | Description: | 4 | Description: |
| 5 | The attributes: | 5 | The attributes: |
| 6 | 6 | ||
| @@ -1,6 +1,6 @@ | |||
| 1 | What: /config/usb-gadget/gadget/functions/gser.name | 1 | What: /config/usb-gadget/gadget/functions/gser.name |
| 2 | Date: Jun 2013 | 2 | Date: Jun 2013 |
| 3 | KenelVersion: 3.11 | 3 | KernelVersion: 3.11 |
| 4 | Description: | 4 | Description: |
| 5 | 5 | ||
| 6 | This item contains just one readonly attribute: port_num. | 6 | This item contains just one readonly attribute: port_num. |
| @@ -0,0 +1,12 @@ | |||
| 1 | What: /config/usb-gadget/gadget/functions/SourceSink.name | ||
| 2 | Date: Nov 2013 | ||
| 3 | KernelVersion: 3.13 | ||
| 4 | Description: | ||
| 5 | The attributes: | ||
| 6 | |||
| 7 | pattern - 0 (all zeros), 1 (mod63), 2 (none) | ||
| 8 | isoc_interval - 1..16 | ||
| 9 | isoc_maxpacket - 0 - 1023 (fs), 0 - 1024 (hs/ss) | ||
| 10 | isoc_mult - 0..2 (hs/ss only) | ||
| 11 | isoc_maxburst - 0..15 (ss only) | ||
| 12 | qlen - buffer length | ||
| @@ -1,6 +1,6 @@ | |||
| 1 | What: /config/usb-gadget/gadget/functions/geth.name | 1 | What: /config/usb-gadget/gadget/functions/geth.name |
| 2 | Date: Jun 2013 | 2 | Date: Jun 2013 |
| 3 | KenelVersion: 3.11 | 3 | KernelVersion: 3.11 |
| 4 | Description: | 4 | Description: |
| 5 | The attributes: | 5 | The attributes: |
| 6 | 6 | ||
| @@ -0,0 +1,91 @@ | |||
| 1 | What: /sys/kernel/debug/genwqe/genwqe<n>_card/ddcb_info | ||
| 2 | Date: Oct 2013 | ||
| 3 | Contact: haver@linux.vnet.ibm.com | ||
| 4 | Description: DDCB queue dump used for debugging queueing problems. | ||
| 5 | |||
| 6 | What: /sys/kernel/debug/genwqe/genwqe<n>_card/curr_regs | ||
| 7 | Date: Oct 2013 | ||
| 8 | Contact: haver@linux.vnet.ibm.com | ||
| 9 | Description: Dump of the current error registers. | ||
| 10 | Only available for PF. | ||
| 11 | |||
| 12 | What: /sys/kernel/debug/genwqe/genwqe<n>_card/curr_dbg_uid0 | ||
| 13 | Date: Oct 2013 | ||
| 14 | Contact: haver@linux.vnet.ibm.com | ||
| 15 | Description: Internal chip state of UID0 (unit id 0). | ||
| 16 | Only available for PF. | ||
| 17 | |||
| 18 | What: /sys/kernel/debug/genwqe/genwqe<n>_card/curr_dbg_uid1 | ||
| 19 | Date: Oct 2013 | ||
| 20 | Contact: haver@linux.vnet.ibm.com | ||
| 21 | Description: Internal chip state of UID1. | ||
| 22 | Only available for PF. | ||
| 23 | |||
| 24 | What: /sys/kernel/debug/genwqe/genwqe<n>_card/curr_dbg_uid2 | ||
| 25 | Date: Oct 2013 | ||
| 26 | Contact: haver@linux.vnet.ibm.com | ||
| 27 | Description: Internal chip state of UID2. | ||
| 28 | Only available for PF. | ||
| 29 | |||
| 30 | What: /sys/kernel/debug/genwqe/genwqe<n>_card/prev_regs | ||
| 31 | Date: Oct 2013 | ||
| 32 | Contact: haver@linux.vnet.ibm.com | ||
| 33 | Description: Dump of the error registers before the last reset of | ||
| 34 | the card occured. | ||
| 35 | Only available for PF. | ||
| 36 | |||
| 37 | What: /sys/kernel/debug/genwqe/genwqe<n>_card/prev_dbg_uid0 | ||
| 38 | Date: Oct 2013 | ||
| 39 | Contact: haver@linux.vnet.ibm.com | ||
| 40 | Description: Internal chip state of UID0 before card was reset. | ||
| 41 | Only available for PF. | ||
| 42 | |||
| 43 | What: /sys/kernel/debug/genwqe/genwqe<n>_card/prev_dbg_uid1 | ||
| 44 | Date: Oct 2013 | ||
| 45 | Contact: haver@linux.vnet.ibm.com | ||
| 46 | Description: Internal chip state of UID1 before card was reset. | ||
| 47 | Only available for PF. | ||
| 48 | |||
| 49 | What: /sys/kernel/debug/genwqe/genwqe<n>_card/prev_dbg_uid2 | ||
| 50 | Date: Oct 2013 | ||
| 51 | Contact: haver@linux.vnet.ibm.com | ||
| 52 | Description: Internal chip state of UID2 before card was reset. | ||
| 53 | Only available for PF. | ||
| 54 | |||
| 55 | What: /sys/kernel/debug/genwqe/genwqe<n>_card/info | ||
| 56 | Date: Oct 2013 | ||
| 57 | Contact: haver@linux.vnet.ibm.com | ||
| 58 | Description: Comprehensive summary of bitstream version and software | ||
| 59 | version. Used bitstream and bitstream clocking information. | ||
| 60 | |||
| 61 | What: /sys/kernel/debug/genwqe/genwqe<n>_card/err_inject | ||
| 62 | Date: Oct 2013 | ||
| 63 | Contact: haver@linux.vnet.ibm.com | ||
| 64 | Description: Possibility to inject error cases to ensure that the drivers | ||
| 65 | error handling code works well. | ||
| 66 | |||
| 67 | What: /sys/kernel/debug/genwqe/genwqe<n>_card/vf<0..14>_jobtimeout_msec | ||
| 68 | Date: Oct 2013 | ||
| 69 | Contact: haver@linux.vnet.ibm.com | ||
| 70 | Description: Default VF timeout 250ms. Testing might require 1000ms. | ||
| 71 | Using 0 will use the cards default value (whatever that is). | ||
| 72 | |||
| 73 | The timeout depends on the max number of available cards | ||
| 74 | in the system and the maximum allowed queue size. | ||
| 75 | |||
| 76 | The driver ensures that the settings are done just before | ||
| 77 | the VFs get enabled. Changing the timeouts in flight is not | ||
| 78 | possible. | ||
| 79 | Only available for PF. | ||
| 80 | |||
| 81 | What: /sys/kernel/debug/genwqe/genwqe<n>_card/jobtimer | ||
| 82 | Date: Oct 2013 | ||
| 83 | Contact: haver@linux.vnet.ibm.com | ||
| 84 | Description: Dump job timeout register values for PF and VFs. | ||
| 85 | Only available for PF. | ||
| 86 | |||
| 87 | What: /sys/kernel/debug/genwqe/genwqe<n>_card/queue_working_time | ||
| 88 | Date: Dec 2013 | ||
| 89 | Contact: haver@linux.vnet.ibm.com | ||
| 90 | Description: Dump queue working time register values for PF and VFs. | ||
| 91 | Only available for PF. | ||
| @@ -197,6 +197,19 @@ Description: · 196 unmodified lines | |||
| 197 | Raw pressure measurement from channel Y. Units after | 197 | Raw pressure measurement from channel Y. Units after |
| 198 | application of scale and offset are kilopascal. | 198 | application of scale and offset are kilopascal. |
| 199 | 199 | ||
| 200 | What: /sys/bus/iio/devices/iio:deviceX/in_humidityrelative_raw | ||
| 201 | KernelVersion: 3.14 | ||
| 202 | Contact: linux-iio@vger.kernel.org | ||
| 203 | Description: | ||
| 204 | Raw humidity measurement of air. Units after application of | ||
| 205 | scale and offset are milli percent. | ||
| 206 | |||
| 207 | What: /sys/bus/iio/devices/iio:deviceX/in_humidityrelative_input | ||
| 208 | KernelVersion: 3.14 | ||
| 209 | Contact: linux-iio@vger.kernel.org | ||
| 210 | Description: | ||
| 211 | Scaled humidity measurement in milli percent. | ||
| 212 | |||
| 200 | What: /sys/bus/iio/devices/iio:deviceX/in_accel_offset | 213 | What: /sys/bus/iio/devices/iio:deviceX/in_accel_offset |
| 201 | What: /sys/bus/iio/devices/iio:deviceX/in_accel_x_offset | 214 | What: /sys/bus/iio/devices/iio:deviceX/in_accel_x_offset |
| 202 | What: /sys/bus/iio/devices/iio:deviceX/in_accel_y_offset | 215 | What: /sys/bus/iio/devices/iio:deviceX/in_accel_y_offset |
| @@ -70,18 +70,15 @@ Date: September, 2011 · 69 unmodified lines | |||
| 70 | Contact: Neil Horman <nhorman@tuxdriver.com> | 70 | Contact: Neil Horman <nhorman@tuxdriver.com> |
| 71 | Description: | 71 | Description: |
| 72 | The /sys/devices/.../msi_irqs directory contains a variable set | 72 | The /sys/devices/.../msi_irqs directory contains a variable set |
| 73 | of sub-directories, with each sub-directory being named after a | 73 | of files, with each file being named after a corresponding msi |
| 74 | corresponding msi irq vector allocated to that device. Each | 74 | irq vector allocated to that device. |
| 75 | numbered sub-directory N contains attributes of that irq. | ||
| 76 | Note that this directory is not created for device drivers which | ||
| 77 | do not support msi irqs | ||
| 78 | 75 | ||
| 79 | What: /sys/bus/pci/devices/.../msi_irqs/<N>/mode | 76 | What: /sys/bus/pci/devices/.../msi_irqs/<N> |
| 80 | Date: September 2011 | 77 | Date: September 2011 |
| 81 | Contact: Neil Horman <nhorman@tuxdriver.com> | 78 | Contact: Neil Horman <nhorman@tuxdriver.com> |
| 82 | Description: | 79 | Description: |
| 83 | This attribute indicates the mode that the irq vector named by | 80 | This attribute indicates the mode that the irq vector named by |
| 84 | the parent directory is in (msi vs. msix) | 81 | the file is in (msi vs. msix) |
| 85 | 82 | ||
| 86 | What: /sys/bus/pci/devices/.../remove | 83 | What: /sys/bus/pci/devices/.../remove |
| 87 | Date: January 2009 | 84 | Date: January 2009 |
| @@ -18,6 +18,28 @@ Removal of a device: · 17 unmodified lines | |||
| 18 | 18 | ||
| 19 | $ echo <dev-id> > /sys/bus/rbd/remove | 19 | $ echo <dev-id> > /sys/bus/rbd/remove |
| 20 | 20 | ||
| 21 | What: /sys/bus/rbd/add_single_major | ||
| 22 | Date: December 2013 | ||
| 23 | KernelVersion: 3.14 | ||
| 24 | Contact: Sage Weil <sage@inktank.com> | ||
| 25 | Description: Available only if rbd module is inserted with single_major | ||
| 26 | parameter set to true. | ||
| 27 | Usage is the same as for /sys/bus/rbd/add. If present, | ||
| 28 | should be used instead of the latter: any attempts to use | ||
| 29 | /sys/bus/rbd/add if /sys/bus/rbd/add_single_major is | ||
| 30 | available will fail for backwards compatibility reasons. | ||
| 31 | |||
| 32 | What: /sys/bus/rbd/remove_single_major | ||
| 33 | Date: December 2013 | ||
| 34 | KernelVersion: 3.14 | ||
| 35 | Contact: Sage Weil <sage@inktank.com> | ||
| 36 | Description: Available only if rbd module is inserted with single_major | ||
| 37 | parameter set to true. | ||
| 38 | Usage is the same as for /sys/bus/rbd/remove. If present, | ||
| 39 | should be used instead of the latter: any attempts to use | ||
| 40 | /sys/bus/rbd/remove if /sys/bus/rbd/remove_single_major is | ||
| 41 | available will fail for backwards compatibility reasons. | ||
| 42 | |||
| 21 | Entries under /sys/bus/rbd/devices/<dev-id>/ | 43 | Entries under /sys/bus/rbd/devices/<dev-id>/ |
| 22 | -------------------------------------------- | 44 | -------------------------------------------- |
| 23 | 45 | ||
| @@ -33,6 +55,10 @@ major · 9 unmodified lines | |||
| 33 | 55 | ||
| 34 | The block device major number. | 56 | The block device major number. |
| 35 | 57 | ||
| 58 | minor | ||
| 59 | |||
| 60 | The block device minor number. (December 2013, since 3.14.) | ||
| 61 | |||
| 36 | name | 62 | name |
| 37 | 63 | ||
| 38 | The name of the rbd image. | 64 | The name of the rbd image. |
| @@ -50,13 +50,19 @@ Description: · 49 unmodified lines | |||
| 50 | This may allow the driver to support more hardware than | 50 | This may allow the driver to support more hardware than |
| 51 | was included in the driver's static device ID support | 51 | was included in the driver's static device ID support |
| 52 | table at compile time. The format for the device ID is: | 52 | table at compile time. The format for the device ID is: |
| 53 | idVendor idProduct bInterfaceClass. | 53 | idVendor idProduct bInterfaceClass RefIdVendor RefIdProduct |
| 54 | The vendor ID and device ID fields are required, the | 54 | The vendor ID and device ID fields are required, the |
| 55 | interface class is optional. | 55 | rest is optional. The Ref* tuple can be used to tell the |
| 56 | driver to use the same driver_data for the new device as | ||
| 57 | it is used for the reference device. | ||
| 56 | Upon successfully adding an ID, the driver will probe | 58 | Upon successfully adding an ID, the driver will probe |
| 57 | for the device and attempt to bind to it. For example: | 59 | for the device and attempt to bind to it. For example: |
| 58 | # echo "8086 10f5" > /sys/bus/usb/drivers/foo/new_id | 60 | # echo "8086 10f5" > /sys/bus/usb/drivers/foo/new_id |
| 59 | 61 | ||
| 62 | Here add a new device (0458:7045) using driver_data from | ||
| 63 | an already supported device (0458:704c): | ||
| 64 | # echo "0458 7045 0 0458 704c" > /sys/bus/usb/drivers/foo/new_id | ||
| 65 | |||
| 60 | Reading from this file will list all dynamically added | 66 | Reading from this file will list all dynamically added |
| 61 | device IDs in the same format, with one entry per | 67 | device IDs in the same format, with one entry per |
| 62 | line. For example: | 68 | line. For example: |
| @@ -68,6 +68,14 @@ Description: · 67 unmodified lines | |||
| 68 | Defines the penalty which will be applied to an | 68 | Defines the penalty which will be applied to an |
| 69 | originator message's tq-field on every hop. | 69 | originator message's tq-field on every hop. |
| 70 | 70 | ||
| 71 | What: /sys/class/net/<mesh_iface>/mesh/isolation_mark | ||
| 72 | Date: Nov 2013 | ||
| 73 | Contact: Antonio Quartulli <antonio@meshcoding.com> | ||
| 74 | Description: | ||
| 75 | Defines the isolation mark (and its bitmask) which | ||
| 76 | is used to classify clients as "isolated" by the | ||
| 77 | Extended Isolation feature. | ||
| 78 | |||
| 71 | What: /sys/class/net/<mesh_iface>/mesh/network_coding | 79 | What: /sys/class/net/<mesh_iface>/mesh/network_coding |
| 72 | Date: Nov 2012 | 80 | Date: Nov 2012 |
| 73 | Contact: Martin Hundeboll <martin@hundeboll.net> | 81 | Contact: Martin Hundeboll <martin@hundeboll.net> |
| @@ -200,3 +200,27 @@ Description: address and size of the percpu note. · 199 unmodified lines | |||
| 200 | note of cpu#. | 200 | note of cpu#. |
| 201 | 201 | ||
| 202 | crash_notes_size: size of the note of cpu#. | 202 | crash_notes_size: size of the note of cpu#. |
| 203 | |||
| 204 | |||
| 205 | What: /sys/devices/system/cpu/intel_pstate/max_perf_pct | ||
| 206 | /sys/devices/system/cpu/intel_pstate/min_perf_pct | ||
| 207 | /sys/devices/system/cpu/intel_pstate/no_turbo | ||
| 208 | Date: February 2013 | ||
| 209 | Contact: linux-pm@vger.kernel.org | ||
| 210 | Description: Parameters for the Intel P-state driver | ||
| 211 | |||
| 212 | Logic for selecting the current P-state in Intel | ||
| 213 | Sandybridge+ processors. The three knobs control | ||
| 214 | limits for the P-state that will be requested by the | ||
| 215 | driver. | ||
| 216 | |||
| 217 | max_perf_pct: limits the maximum P state that will be requested by | ||
| 218 | the driver stated as a percentage of the available performance. | ||
| 219 | |||
| 220 | min_perf_pct: limits the minimum P state that will be requested by | ||
| 221 | the driver stated as a percentage of the available performance. | ||
| 222 | |||
| 223 | no_turbo: limits the driver to selecting P states below the turbo | ||
| 224 | frequency range. | ||
| 225 | |||
| 226 | More details can be found in Documentation/cpu-freq/intel-pstate.txt | ||
| @@ -0,0 +1,62 @@ | |||
| 1 | What: /sys/class/genwqe/genwqe<n>_card/version | ||
| 2 | Date: Oct 2013 | ||
| 3 | Contact: haver@linux.vnet.ibm.com | ||
| 4 | Description: Unique bitstream identification e.g. | ||
| 5 | '0000000330336283.00000000475a4950'. | ||
| 6 | |||
| 7 | What: /sys/class/genwqe/genwqe<n>_card/appid | ||
| 8 | Date: Oct 2013 | ||
| 9 | Contact: haver@linux.vnet.ibm.com | ||
| 10 | Description: Identifies the currently active card application e.g. 'GZIP' | ||
| 11 | for compression/decompression. | ||
| 12 | |||
| 13 | What: /sys/class/genwqe/genwqe<n>_card/type | ||
| 14 | Date: Oct 2013 | ||
| 15 | Contact: haver@linux.vnet.ibm.com | ||
| 16 | Description: Type of the card e.g. 'GenWQE5-A7'. | ||
| 17 | |||
| 18 | What: /sys/class/genwqe/genwqe<n>_card/curr_bitstream | ||
| 19 | Date: Oct 2013 | ||
| 20 | Contact: haver@linux.vnet.ibm.com | ||
| 21 | Description: Currently active bitstream. 1 is default, 0 is backup. | ||
| 22 | |||
| 23 | What: /sys/class/genwqe/genwqe<n>_card/next_bitstream | ||
| 24 | Date: Oct 2013 | ||
| 25 | Contact: haver@linux.vnet.ibm.com | ||
| 26 | Description: Interface to set the next bitstream to be used. | ||
| 27 | |||
| 28 | What: /sys/class/genwqe/genwqe<n>_card/tempsens | ||
| 29 | Date: Oct 2013 | ||
| 30 | Contact: haver@linux.vnet.ibm.com | ||
| 31 | Description: Interface to read the cards temperature sense register. | ||
| 32 | |||
| 33 | What: /sys/class/genwqe/genwqe<n>_card/freerunning_timer | ||
| 34 | Date: Oct 2013 | ||
| 35 | Contact: haver@linux.vnet.ibm.com | ||
| 36 | Description: Interface to read the cards free running timer. | ||
| 37 | Used for performance and utilization measurements. | ||
| 38 | |||
| 39 | What: /sys/class/genwqe/genwqe<n>_card/queue_working_time | ||
| 40 | Date: Oct 2013 | ||
| 41 | Contact: haver@linux.vnet.ibm.com | ||
| 42 | Description: Interface to read queue working time. | ||
| 43 | Used for performance and utilization measurements. | ||
| 44 | |||
| 45 | What: /sys/class/genwqe/genwqe<n>_card/state | ||
| 46 | Date: Oct 2013 | ||
| 47 | Contact: haver@linux.vnet.ibm.com | ||
| 48 | Description: State of the card: "unused", "used", "error". | ||
| 49 | |||
| 50 | What: /sys/class/genwqe/genwqe<n>_card/base_clock | ||
| 51 | Date: Oct 2013 | ||
| 52 | Contact: haver@linux.vnet.ibm.com | ||
| 53 | Description: Base clock frequency of the card. | ||
| 54 | |||
| 55 | What: /sys/class/genwqe/genwqe<n>_card/device/sriov_numvfs | ||
| 56 | Date: Oct 2013 | ||
| 57 | Contact: haver@linux.vnet.ibm.com | ||
| 58 | Description: Enable VFs (1..15): | ||
| 59 | sudo sh -c 'echo 15 > \ | ||
| 60 | /sys/bus/pci/devices/0000\:1b\:00.0/sriov_numvfs' | ||
| 61 | Disable VFs: | ||
| 62 | Write a 0 into the same sysfs entry. | ||
| @@ -24,3 +24,34 @@ Date: July 2013 · 23 unmodified lines | |||
| 24 | Contact: "Namjae Jeon" <namjae.jeon@samsung.com> | 24 | Contact: "Namjae Jeon" <namjae.jeon@samsung.com> |
| 25 | Description: | 25 | Description: |
| 26 | Controls the victim selection policy for garbage collection. | 26 | Controls the victim selection policy for garbage collection. |
| 27 | |||
| 28 | What: /sys/fs/f2fs/<disk>/reclaim_segments | ||
| 29 | Date: October 2013 | ||
| 30 | Contact: "Jaegeuk Kim" <jaegeuk.kim@samsung.com> | ||
| 31 | Description: | ||
| 32 | Controls the issue rate of segment discard commands. | ||
| 33 | |||
| 34 | What: /sys/fs/f2fs/<disk>/ipu_policy | ||
| 35 | Date: November 2013 | ||
| 36 | Contact: "Jaegeuk Kim" <jaegeuk.kim@samsung.com> | ||
| 37 | Description: | ||
| 38 | Controls the in-place-update policy. | ||
| 39 | |||
| 40 | What: /sys/fs/f2fs/<disk>/min_ipu_util | ||
| 41 | Date: November 2013 | ||
| 42 | Contact: "Jaegeuk Kim" <jaegeuk.kim@samsung.com> | ||
| 43 | Description: | ||
| 44 | Controls the FS utilization condition for the in-place-update | ||
| 45 | policies. | ||
| 46 | |||
| 47 | What: /sys/fs/f2fs/<disk>/max_small_discards | ||
| 48 | Date: November 2013 | ||
| 49 | Contact: "Jaegeuk Kim" <jaegeuk.kim@samsung.com> | ||
| 50 | Description: | ||
| 51 | Controls the issue rate of small discard commands. | ||
| 52 | |||
| 53 | What: /sys/fs/f2fs/<disk>/max_victim_search | ||
| 54 | Date: January 2014 | ||
| 55 | Contact: "Jaegeuk Kim" <jaegeuk.kim@samsung.com> | ||
| 56 | Description: | ||
| 57 | Controls the number of trials to find a victim segment. | ||
| @@ -0,0 +1,14 @@ | |||
| 1 | What: /sys/kernel/vmcoreinfo | ||
| 2 | Date: October 2007 | ||
| 3 | KernelVersion: 2.6.24 | ||
| 4 | Contact: Ken'ichi Ohmichi <oomichi@mxs.nes.nec.co.jp> | ||
| 5 | Kexec Mailing List <kexec@lists.infradead.org> | ||
| 6 | Vivek Goyal <vgoyal@redhat.com> | ||
| 7 | Description | ||
| 8 | Shows physical address and size of vmcoreinfo ELF note. | ||
| 9 | First value contains physical address of note in hex and | ||
| 10 | second value contains the size of note in hex. This ELF | ||
| 11 | note info is parsed by second kernel and exported to user | ||
| 12 | space as part of ELF note in /proc/vmcore file. This note | ||
| 13 | contains various information like struct size, symbol | ||
| 14 | values, page size etc. | ||
| @@ -0,0 +1,16 @@ | |||
| 1 | What: /sys/bus/platform/devices/tahvo-usb/otg_mode | ||
| 2 | Date: December 2013 | ||
| 3 | Contact: Aaro Koskinen <aaro.koskinen@iki.fi> | ||
| 4 | Description: | ||
| 5 | Set or read the current OTG mode. Valid values are "host" and | ||
| 6 | "peripheral". | ||
| 7 | |||
| 8 | Reading: returns the current mode. | ||
| 9 | |||
| 10 | What: /sys/bus/platform/devices/tahvo-usb/vbus | ||
| 11 | Date: December 2013 | ||
| 12 | Contact: Aaro Koskinen <aaro.koskinen@iki.fi> | ||
| 13 | Description: | ||
| 14 | Read the current VBUS state. | ||
| 15 | |||
| 16 | Reading: returns "on" or "off". | ||
| @@ -10,5 +10,6 @@ · 9 unmodified lines | |||
| 10 | *.out | 10 | *.out |
| 11 | *.png | 11 | *.png |
| 12 | *.gif | 12 | *.gif |
| 13 | *.svg | ||
| 13 | media-indices.tmpl | 14 | media-indices.tmpl |
| 14 | media-entities.tmpl | 15 | media-entities.tmpl |
| @@ -54,6 +54,7 @@ htmldocs: $(HTML) · 53 unmodified lines | |||
| 54 | 54 | ||
| 55 | MAN := $(patsubst %.xml, %.9, $(BOOKS)) | 55 | MAN := $(patsubst %.xml, %.9, $(BOOKS)) |
| 56 | mandocs: $(MAN) | 56 | mandocs: $(MAN) |
| 57 | $(if $(wildcard $(obj)/man/*.9),gzip -f $(obj)/man/*.9) | ||
| 57 | 58 | ||
| 58 | installmandocs: mandocs | 59 | installmandocs: mandocs |
| 59 | mkdir -p /usr/local/man/man9/ | 60 | mkdir -p /usr/local/man/man9/ |
| @@ -145,7 +146,7 @@ build_main_index = rm -rf $(main_idx); \ · 85 unmodified lines | |||
| 145 | cat $(HTML) >> $(main_idx) | 146 | cat $(HTML) >> $(main_idx) |
| 146 | 147 | ||
| 147 | quiet_cmd_db2html = HTML $@ | 148 | quiet_cmd_db2html = HTML $@ |
| 148 | cmd_db2html = xmlto xhtml $(XMLTOFLAGS) -o $(patsubst %.html,%,$@) $< && \ | 149 | cmd_db2html = xmlto html $(XMLTOFLAGS) -o $(patsubst %.html,%,$@) $< && \ |
| 149 | echo '<a HREF="$(patsubst %.html,%,$(notdir $@))/index.html"> \ | 150 | echo '<a HREF="$(patsubst %.html,%,$(notdir $@))/index.html"> \ |
| 150 | $(patsubst %.html,%,$(notdir $@))</a><p>' > $@ | 151 | $(patsubst %.html,%,$(notdir $@))</a><p>' > $@ |
| 151 | 152 | ||
| @@ -159,7 +160,7 @@ quiet_cmd_db2html = HTML $@ · 7 unmodified lines | |||
| 159 | cp $(PNG-$(basename $(notdir $@))) $(patsubst %.html,%,$@); fi | 160 | cp $(PNG-$(basename $(notdir $@))) $(patsubst %.html,%,$@); fi |
| 160 | 161 | ||
| 161 | quiet_cmd_db2man = MAN $@ | 162 | quiet_cmd_db2man = MAN $@ |
| 162 | cmd_db2man = if grep -q refentry $<; then xmlto man $(XMLTOFLAGS) -o $(obj)/man $< ; gzip -f $(obj)/man/*.9; fi | 163 | cmd_db2man = if grep -q refentry $<; then xmlto man $(XMLTOFLAGS) -o $(obj)/man $< ; fi |
| 163 | %.9 : %.xml | 164 | %.9 : %.xml |
| 164 | @(which xmlto > /dev/null 2>&1) || \ | 165 | @(which xmlto > /dev/null 2>&1) || \ |
| 165 | (echo "*** You need to install xmlto ***"; \ | 166 | (echo "*** You need to install xmlto ***"; \ |
| @@ -109,6 +109,7 @@ X!Ilib/string.c · 108 unmodified lines | |||
| 109 | <sect1><title>The Slab Cache</title> | 109 | <sect1><title>The Slab Cache</title> |
| 110 | !Iinclude/linux/slab.h | 110 | !Iinclude/linux/slab.h |
| 111 | !Emm/slab.c | 111 | !Emm/slab.c |
| 112 | !Emm/util.c | ||
| 112 | </sect1> | 113 | </sect1> |
| 113 | <sect1><title>User Space Memory Access</title> | 114 | <sect1><title>User Space Memory Access</title> |
| 114 | !Iarch/x86/include/asm/uaccess_32.h | 115 | !Iarch/x86/include/asm/uaccess_32.h |
| @@ -2523,6 +2523,18 @@ that used it. It was originally scheduled for removal in 2.6.35. · 2522 unmodified lines | |||
| 2523 | </orderedlist> | 2523 | </orderedlist> |
| 2524 | </section> | 2524 | </section> |
| 2525 | 2525 | ||
| 2526 | <section> | ||
| 2527 | <title>V4L2 in Linux 3.14</title> | ||
| 2528 | <orderedlist> | ||
| 2529 | <listitem> | ||
| 2530 | <para> In struct <structname>v4l2_rect</structname>, the type | ||
| 2531 | of <structfield>width</structfield> and <structfield>height</structfield> | ||
| 2532 | fields changed from _s32 to _u32. | ||
| 2533 | </para> | ||
| 2534 | </listitem> | ||
| 2535 | </orderedlist> | ||
| 2536 | </section> | ||
| 2537 | |||
| 2526 | <section id="other"> | 2538 | <section id="other"> |
| 2527 | <title>Relation of V4L2 to other Linux multimedia APIs</title> | 2539 | <title>Relation of V4L2 to other Linux multimedia APIs</title> |
| 2528 | 2540 | ||
| @@ -3161,6 +3161,47 @@ V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD as a golden frame.</entry> · 3160 unmodified lines | |||
| 3161 | </entrytbl> | 3161 | </entrytbl> |
| 3162 | </row> | 3162 | </row> |
| 3163 | 3163 | ||
| 3164 | <row><entry></entry></row> | ||
| 3165 | <row> | ||
| 3166 | <entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_MIN_QP</constant></entry> | ||
| 3167 | <entry>integer</entry> | ||
| 3168 | </row> | ||
| 3169 | <row><entry spanname="descr">Minimum quantization parameter for VP8.</entry> | ||
| 3170 | </row> | ||
| 3171 | |||
| 3172 | <row><entry></entry></row> | ||
| 3173 | <row> | ||
| 3174 | <entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_MAX_QP</constant></entry> | ||
| 3175 | <entry>integer</entry> | ||
| 3176 | </row> | ||
| 3177 | <row><entry spanname="descr">Maximum quantization parameter for VP8.</entry> | ||
| 3178 | </row> | ||
| 3179 | |||
| 3180 | <row><entry></entry></row> | ||
| 3181 | <row> | ||
| 3182 | <entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP</constant> </entry> | ||
| 3183 | <entry>integer</entry> | ||
| 3184 | </row> | ||
| 3185 | <row><entry spanname="descr">Quantization parameter for an I frame for VP8.</entry> | ||
| 3186 | </row> | ||
| 3187 | |||
| 3188 | <row><entry></entry></row> | ||
| 3189 | <row> | ||
| 3190 | <entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP</constant> </entry> | ||
| 3191 | <entry>integer</entry> | ||
| 3192 | </row> | ||
| 3193 | <row><entry spanname="descr">Quantization parameter for a P frame for VP8.</entry> | ||
| 3194 | </row> | ||
| 3195 | |||
| 3196 | <row><entry></entry></row> | ||
| 3197 | <row> | ||
| 3198 | <entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_PROFILE</constant> </entry> | ||
| 3199 | <entry>integer</entry> | ||
| 3200 | </row> | ||
| 3201 | <row><entry spanname="descr">Select the desired profile for VPx encoder. | ||
| 3202 | Acceptable values are 0, 1, 2 and 3 corresponding to encoder profiles 0, 1, 2 and 3.</entry> | ||
| 3203 | </row> | ||
| 3204 | |||
| 3164 | <row><entry></entry></row> | 3205 | <row><entry></entry></row> |
| 3165 | </tbody> | 3206 | </tbody> |
| 3166 | </tgroup> | 3207 | </tgroup> |
| @@ -346,17 +346,14 @@ rectangle, in pixels.</entry> · 345 unmodified lines | |||
| 346 | rectangle, in pixels. Offsets increase to the right and down.</entry> | 346 | rectangle, in pixels. Offsets increase to the right and down.</entry> |
| 347 | </row> | 347 | </row> |
| 348 | <row> | 348 | <row> |
| 349 | <entry>__s32</entry> | 349 | <entry>__u32</entry> |
| 350 | <entry><structfield>width</structfield></entry> | 350 | <entry><structfield>width</structfield></entry> |
| 351 | <entry>Width of the rectangle, in pixels.</entry> | 351 | <entry>Width of the rectangle, in pixels.</entry> |
| 352 | </row> | 352 | </row> |
| 353 | <row> | 353 | <row> |
| 354 | <entry>__s32</entry> | 354 | <entry>__u32</entry> |
| 355 | <entry><structfield>height</structfield></entry> | 355 | <entry><structfield>height</structfield></entry> |
| 356 | <entry>Height of the rectangle, in pixels. Width and | 356 | <entry>Height of the rectangle, in pixels.</entry> |
| 357 | height cannot be negative, the fields are signed for hysterical | ||
| 358 | reasons. <!-- video4linux-list@redhat.com on 22 Oct 2002 subject | ||
| 359 | "Re:[V4L][patches!] Re:v4l2/kernel-2.5" --></entry> | ||
| 360 | </row> | 357 | </row> |
| 361 | </tbody> | 358 | </tbody> |
| 362 | </tgroup> | 359 | </tgroup> |
| @@ -134,6 +134,15 @@ · 133 unmodified lines | |||
| 134 | <entry>Output pad, relative to the entity. Output pads source data | 134 | <entry>Output pad, relative to the entity. Output pads source data |
| 135 | and are origins of links.</entry> | 135 | and are origins of links.</entry> |
| 136 | </row> | 136 | </row> |
| 137 | <row> | ||
| 138 | <entry><constant>MEDIA_PAD_FL_MUST_CONNECT</constant></entry> | ||
| 139 | <entry>If this flag is set and the pad is linked to any other | ||
| 140 | pad, then at least one of those links must be enabled for the | ||
| 141 | entity to be able to stream. There could be temporary reasons | ||
| 142 | (e.g. device configuration dependent) for the pad to need | ||
| 143 | enabled links even when this flag isn't set; the absence of the | ||
| 144 | flag doesn't imply there is none.</entry> | ||
| 145 | </row> | ||
| 137 | </tbody> | 146 | </tbody> |
| 138 | </tgroup> | 147 | </tgroup> |
| 139 | </table> | 148 | </table> |
| @@ -89,7 +89,7 @@ · 88 unmodified lines | |||
| 89 | <constant>V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE</constant>. | 89 | <constant>V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE</constant>. |
| 90 | </para> | 90 | </para> |
| 91 | 91 | ||
| 92 | <para>The following tables list existing packet RGB formats.</para> | 92 | <para>The following tables list existing packed RGB formats.</para> |
| 93 | 93 | ||
| 94 | <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-rgb"> | 94 | <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-rgb"> |
| 95 | <title>RGB formats</title> | 95 | <title>RGB formats</title> |
| @@ -615,7 +615,7 @@ · 519 unmodified lines | |||
| 615 | </mediaobject> | 615 | </mediaobject> |
| 616 | </figure> | 616 | </figure> |
| 617 | 617 | ||
| 618 | <para>The following table lists existing packet Bayer formats. The data | 618 | <para>The following table lists existing packed Bayer formats. The data |
| 619 | organization is given as an example for the first pixel only.</para> | 619 | organization is given as an example for the first pixel only.</para> |
| 620 | 620 | ||
| 621 | <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-bayer"> | 621 | <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-bayer"> |
| @@ -1178,7 +1178,7 @@ · 556 unmodified lines | |||
| 1178 | U, Y, V, Y order will be named <constant>V4L2_MBUS_FMT_UYVY8_2X8</constant>. | 1178 | U, Y, V, Y order will be named <constant>V4L2_MBUS_FMT_UYVY8_2X8</constant>. |
| 1179 | </para> | 1179 | </para> |
| 1180 | 1180 | ||
| 1181 | <para><xref linkend="v4l2-mbus-pixelcode-yuv8"/> list existing packet YUV | 1181 | <para><xref linkend="v4l2-mbus-pixelcode-yuv8"/> lists existing packed YUV |
| 1182 | formats and describes the organization of each pixel data in each sample. | 1182 | formats and describes the organization of each pixel data in each sample. |
| 1183 | When a format pattern is split across multiple samples each of the samples | 1183 | When a format pattern is split across multiple samples each of the samples |
| 1184 | in the pattern is described.</para> | 1184 | in the pattern is described.</para> |
| @@ -2491,6 +2491,163 @@ · 1306 unmodified lines | |||
| 2491 | </table> | 2491 | </table> |
| 2492 | </section> | 2492 | </section> |
| 2493 | 2493 | ||
| 2494 | <section> | ||
| 2495 | <title>HSV/HSL Formats</title> | ||
| 2496 | |||
| 2497 | <para>Those formats transfer pixel data as RGB values in a cylindrical-coordinate | ||
| 2498 | system using Hue-Saturation-Value or Hue-Saturation-Lightness components. The | ||
| 2499 | format code is made of the following information. | ||
| 2500 | <itemizedlist> | ||
| 2501 | <listitem><para>The hue, saturation, value or lightness and optional alpha | ||
| 2502 | components order code, as encoded in a pixel sample. The only currently | ||
| 2503 | supported value is AHSV. | ||
| 2504 | </para></listitem> | ||
| 2505 | <listitem><para>The number of bits per component, for each component. The values | ||
| 2506 | can be different for all components. The only currently supported value is 8888. | ||
| 2507 | </para></listitem> | ||
| 2508 | <listitem><para>The number of bus samples per pixel. Pixels that are wider than | ||
| 2509 | the bus width must be transferred in multiple samples. The only currently | ||
| 2510 | supported value is 1.</para></listitem> | ||
| 2511 | <listitem><para>The bus width.</para></listitem> | ||
| 2512 | <listitem><para>For formats where the total number of bits per pixel is smaller | ||
| 2513 | than the number of bus samples per pixel times the bus width, a padding | ||
| 2514 | value stating if the bytes are padded in their most high order bits | ||
| 2515 | (PADHI) or low order bits (PADLO).</para></listitem> | ||
| 2516 | <listitem><para>For formats where the number of bus samples per pixel is larger | ||
| 2517 | than 1, an endianness value stating if the pixel is transferred MSB first | ||
| 2518 | (BE) or LSB first (LE).</para></listitem> | ||
| 2519 | </itemizedlist> | ||
| 2520 | </para> | ||
| 2521 | |||
| 2522 | <para>The following table lists existing HSV/HSL formats.</para> | ||
| 2523 | |||
| 2524 | <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-hsv"> | ||
| 2525 | <title>HSV/HSL formats</title> | ||
| 2526 | <tgroup cols="27"> | ||
| 2527 | <colspec colname="id" align="left" /> | ||
| 2528 | <colspec colname="code" align="center"/> | ||
| 2529 | <colspec colname="bit" /> | ||
| 2530 | <colspec colnum="4" colname="b31" align="center" /> | ||
| 2531 | <colspec colnum="5" colname="b20" align="center" /> | ||
| 2532 | <colspec colnum="6" colname="b29" align="center" /> | ||
| 2533 | <colspec colnum="7" colname="b28" align="center" /> | ||
| 2534 | <colspec colnum="8" colname="b27" align="center" /> | ||
| 2535 | <colspec colnum="9" colname="b26" align="center" /> | ||
| 2536 | <colspec colnum="10" colname="b25" align="center" /> | ||
| 2537 | <colspec colnum="11" colname="b24" align="center" /> | ||
| 2538 | <colspec colnum="12" colname="b23" align="center" /> | ||
| 2539 | <colspec colnum="13" colname="b22" align="center" /> | ||
| 2540 | <colspec colnum="14" colname="b21" align="center" /> | ||
| 2541 | <colspec colnum="15" colname="b20" align="center" /> | ||
| 2542 | <colspec colnum="16" colname="b19" align="center" /> | ||
| 2543 | <colspec colnum="17" colname="b18" align="center" /> | ||
| 2544 | <colspec colnum="18" colname="b17" align="center" /> | ||
| 2545 | <colspec colnum="19" colname="b16" align="center" /> | ||
| 2546 | <colspec colnum="20" colname="b15" align="center" /> | ||
| 2547 | <colspec colnum="21" colname="b14" align="center" /> | ||
| 2548 | <colspec colnum="22" colname="b13" align="center" /> | ||
| 2549 | <colspec colnum="23" colname="b12" align="center" /> | ||
| 2550 | <colspec colnum="24" colname="b11" align="center" /> | ||
| 2551 | <colspec colnum="25" colname="b10" align="center" /> | ||
| 2552 | <colspec colnum="26" colname="b09" align="center" /> | ||
| 2553 | <colspec colnum="27" colname="b08" align="center" /> | ||
| 2554 | <colspec colnum="28" colname="b07" align="center" /> | ||
| 2555 | <colspec colnum="29" colname="b06" align="center" /> | ||
| 2556 | <colspec colnum="30" colname="b05" align="center" /> | ||
| 2557 | <colspec colnum="31" colname="b04" align="center" /> | ||
| 2558 | <colspec colnum="32" colname="b03" align="center" /> | ||
| 2559 | <colspec colnum="33" colname="b02" align="center" /> | ||
| 2560 | <colspec colnum="34" colname="b01" align="center" /> | ||
| 2561 | <colspec colnum="35" colname="b00" align="center" /> | ||
| 2562 | <spanspec namest="b31" nameend="b00" spanname="b0" /> | ||
| 2563 | <thead> | ||
| 2564 | <row> | ||
| 2565 | <entry>Identifier</entry> | ||
| 2566 | <entry>Code</entry> | ||
| 2567 | <entry></entry> | ||
| 2568 | <entry spanname="b0">Data organization</entry> | ||
| 2569 | </row> | ||
| 2570 | <row> | ||
| 2571 | <entry></entry> | ||
| 2572 | <entry></entry> | ||
| 2573 | <entry>Bit</entry> | ||
| 2574 | <entry>31</entry> | ||
| 2575 | <entry>30</entry> | ||
| 2576 | <entry>29</entry> | ||
| 2577 | <entry>28</entry> | ||
| 2578 | <entry>27</entry> | ||
| 2579 | <entry>26</entry> | ||
| 2580 | <entry>25</entry> | ||
| 2581 | <entry>24</entry> | ||
| 2582 | <entry>23</entry> | ||
| 2583 | <entry>22</entry> | ||
| 2584 | <entry>21</entry> | ||
| 2585 | <entry>20</entry> | ||
| 2586 | <entry>19</entry> | ||
| 2587 | <entry>18</entry> | ||
| 2588 | <entry>17</entry> | ||
| 2589 | <entry>16</entry> | ||
| 2590 | <entry>15</entry> | ||
| 2591 | <entry>14</entry> | ||
| 2592 | <entry>13</entry> | ||
| 2593 | <entry>12</entry> | ||
| 2594 | <entry>11</entry> | ||
| 2595 | <entry>10</entry> | ||
| 2596 | <entry>9</entry> | ||
| 2597 | <entry>8</entry> | ||
| 2598 | <entry>7</entry> | ||
| 2599 | <entry>6</entry> | ||
| 2600 | <entry>5</entry> | ||
| 2601 | <entry>4</entry> | ||
| 2602 | <entry>3</entry> | ||
| 2603 | <entry>2</entry> | ||
| 2604 | <entry>1</entry> | ||
| 2605 | <entry>0</entry> | ||
| 2606 | </row> | ||
| 2607 | </thead> | ||
| 2608 | <tbody valign="top"> | ||
| 2609 | <row id="V4L2-MBUS-FMT-AHSV8888-1X32"> | ||
| 2610 | <entry>V4L2_MBUS_FMT_AHSV8888_1X32</entry> | ||
| 2611 | <entry>0x6001</entry> | ||
| 2612 | <entry></entry> | ||
| 2613 | <entry>a<subscript>7</subscript></entry> | ||
| 2614 | <entry>a<subscript>6</subscript></entry> | ||
| 2615 | <entry>a<subscript>5</subscript></entry> | ||
| 2616 | <entry>a<subscript>4</subscript></entry> | ||
| 2617 | <entry>a<subscript>3</subscript></entry> | ||
| 2618 | <entry>a<subscript>2</subscript></entry> | ||
| 2619 | <entry>a<subscript>1</subscript></entry> | ||
| 2620 | <entry>a<subscript>0</subscript></entry> | ||
| 2621 | <entry>h<subscript>7</subscript></entry> | ||
| 2622 | <entry>h<subscript>6</subscript></entry> | ||
| 2623 | <entry>h<subscript>5</subscript></entry> | ||
| 2624 | <entry>h<subscript>4</subscript></entry> | ||
| 2625 | <entry>h<subscript>3</subscript></entry> | ||
| 2626 | <entry>h<subscript>2</subscript></entry> | ||
| 2627 | <entry>h<subscript>1</subscript></entry> | ||
| 2628 | <entry>h<subscript>0</subscript></entry> | ||
| 2629 | <entry>s<subscript>7</subscript></entry> | ||
| 2630 | <entry>s<subscript>6</subscript></entry> | ||
| 2631 | <entry>s<subscript>5</subscript></entry> | ||
| 2632 | <entry>s<subscript>4</subscript></entry> | ||
| 2633 | <entry>s<subscript>3</subscript></entry> | ||
| 2634 | <entry>s<subscript>2</subscript></entry> | ||
| 2635 | <entry>s<subscript>1</subscript></entry> | ||
| 2636 | <entry>s<subscript>0</subscript></entry> | ||
| 2637 | <entry>v<subscript>7</subscript></entry> | ||
| 2638 | <entry>v<subscript>6</subscript></entry> | ||
| 2639 | <entry>v<subscript>5</subscript></entry> | ||
| 2640 | <entry>v<subscript>4</subscript></entry> | ||
| 2641 | <entry>v<subscript>3</subscript></entry> | ||
| 2642 | <entry>v<subscript>2</subscript></entry> | ||
| 2643 | <entry>v<subscript>1</subscript></entry> | ||
| 2644 | <entry>v<subscript>0</subscript></entry> | ||
| 2645 | </row> | ||
| 2646 | </tbody> | ||
| 2647 | </tgroup> | ||
| 2648 | </table> | ||
| 2649 | </section> | ||
| 2650 | |||
| 2494 | <section> | 2651 | <section> |
| 2495 | <title>JPEG Compressed Formats</title> | 2652 | <title>JPEG Compressed Formats</title> |
| 2496 | 2653 | ||
| @@ -140,6 +140,14 @@ structs, ioctls) must be noted in more detail in the history chapter · 139 unmodified lines | |||
| 140 | (compat.xml), along with the possible impact on existing drivers and | 140 | (compat.xml), along with the possible impact on existing drivers and |
| 141 | applications. --> | 141 | applications. --> |
| 142 | 142 | ||
| 143 | <revision> | ||
| 144 | <revnumber>3.14</revnumber> | ||
| 145 | <date>2013-11-25</date> | ||
| 146 | <authorinitials>rr</authorinitials> | ||
| 147 | <revremark>Set width and height as unsigned on v4l2_rect. | ||
| 148 | </revremark> | ||
| 149 | </revision> | ||
| 150 | |||
| 143 | <revision> | 151 | <revision> |
| 144 | <revnumber>3.11</revnumber> | 152 | <revnumber>3.11</revnumber> |
| 145 | <date>2013-05-26</date> | 153 | <date>2013-05-26</date> |
| @@ -501,7 +509,7 @@ and discussions on the V4L mailing list.</revremark> · 355 unmodified lines | |||
| 501 | </partinfo> | 509 | </partinfo> |
| 502 | 510 | ||
| 503 | <title>Video for Linux Two API Specification</title> | 511 | <title>Video for Linux Two API Specification</title> |
| 504 | <subtitle>Revision 3.11</subtitle> | 512 | <subtitle>Revision 3.14</subtitle> |
| 505 | 513 | ||
| 506 | <chapter id="common"> | 514 | <chapter id="common"> |
| 507 | &sub-common; | 515 | &sub-common; |
| @@ -133,18 +133,14 @@ rectangle, in pixels.</entry> · 132 unmodified lines | |||
| 133 | rectangle, in pixels.</entry> | 133 | rectangle, in pixels.</entry> |
| 134 | </row> | 134 | </row> |
| 135 | <row> | 135 | <row> |
| 136 | <entry>__s32</entry> | 136 | <entry>__u32</entry> |
| 137 | <entry><structfield>width</structfield></entry> | 137 | <entry><structfield>width</structfield></entry> |
| 138 | <entry>Width of the rectangle, in pixels.</entry> | 138 | <entry>Width of the rectangle, in pixels.</entry> |
| 139 | </row> | 139 | </row> |
| 140 | <row> | 140 | <row> |
| 141 | <entry>__s32</entry> | 141 | <entry>__u32</entry> |
| 142 | <entry><structfield>height</structfield></entry> | 142 | <entry><structfield>height</structfield></entry> |
| 143 | <entry>Height of the rectangle, in pixels. Width | 143 | <entry>Height of the rectangle, in pixels.</entry> |
| 144 | and height cannot be negative, the fields are signed for | ||
| 145 | hysterical reasons. <!-- video4linux-list@redhat.com | ||
| 146 | on 22 Oct 2002 subject "Re:[V4L][patches!] Re:v4l2/kernel-2.5" --> | ||
| 147 | </entry> | ||
| 148 | </row> | 144 | </row> |
| 149 | </tbody> | 145 | </tbody> |
| 150 | </tgroup> | 146 | </tgroup> |
| @@ -59,7 +59,7 @@ buffers are filled (if there are any empty buffers in the incoming · 58 unmodified lines | |||
| 59 | queue) until <constant>VIDIOC_STREAMON</constant> has been called. | 59 | queue) until <constant>VIDIOC_STREAMON</constant> has been called. |
| 60 | Accordingly the output hardware is disabled, no video signal is | 60 | Accordingly the output hardware is disabled, no video signal is |
| 61 | produced until <constant>VIDIOC_STREAMON</constant> has been called. | 61 | produced until <constant>VIDIOC_STREAMON</constant> has been called. |
| 62 | The ioctl will succeed only when at least one output buffer is in the | 62 | The ioctl will succeed when at least one output buffer is in the |
| 63 | incoming queue.</para> | 63 | incoming queue.</para> |
| 64 | 64 | ||
| 65 | <para>The <constant>VIDIOC_STREAMOFF</constant> ioctl, apart of | 65 | <para>The <constant>VIDIOC_STREAMOFF</constant> ioctl, apart of |
| @@ -112,7 +112,7 @@ required reading: · 111 unmodified lines | |||
| 112 | 112 | ||
| 113 | Other excellent descriptions of how to create patches properly are: | 113 | Other excellent descriptions of how to create patches properly are: |
| 114 | "The Perfect Patch" | 114 | "The Perfect Patch" |
| 115 | http://kerneltrap.org/node/3737 | 115 | http://www.ozlabs.org/~akpm/stuff/tpp.txt |
| 116 | "Linux kernel patch submission format" | 116 | "Linux kernel patch submission format" |
| 117 | http://linux.yyz.us/patch-format.html | 117 | http://linux.yyz.us/patch-format.html |
| 118 | 118 | ||
| @@ -579,7 +579,7 @@ all time. It should describe the patch completely, containing: · 460 unmodified lines | |||
| 579 | For more details on what this should all look like, please see the | 579 | For more details on what this should all look like, please see the |
| 580 | ChangeLog section of the document: | 580 | ChangeLog section of the document: |
| 581 | "The Perfect Patch" | 581 | "The Perfect Patch" |
| 582 | http://userweb.kernel.org/~akpm/stuff/tpp.txt | 582 | http://www.ozlabs.org/~akpm/stuff/tpp.txt |
| 583 | 583 | ||
| 584 | 584 | ||
| 585 | 585 | ||
| @@ -141,7 +141,7 @@ will use a legacy domain only if an IRQ range is supplied by the · 140 unmodified lines | |||
| 141 | system and will otherwise use a linear domain mapping. The semantics | 141 | system and will otherwise use a linear domain mapping. The semantics |
| 142 | of this call are such that if an IRQ range is specified then | 142 | of this call are such that if an IRQ range is specified then |
| 143 | descriptors will be allocated on-the-fly for it, and if no range is | 143 | descriptors will be allocated on-the-fly for it, and if no range is |
| 144 | specified it will fall through to irq_domain_add_linear() which meand | 144 | specified it will fall through to irq_domain_add_linear() which means |
| 145 | *no* irq descriptors will be allocated. | 145 | *no* irq descriptors will be allocated. |
| 146 | 146 | ||
| 147 | A typical use case for simple domains is where an irqchip provider | 147 | A typical use case for simple domains is where an irqchip provider |
| @@ -2,12 +2,12 @@ · 1 unmodified line | |||
| 2 | - this file | 2 | - this file |
| 3 | MSI-HOWTO.txt | 3 | MSI-HOWTO.txt |
| 4 | - the Message Signaled Interrupts (MSI) Driver Guide HOWTO and FAQ. | 4 | - the Message Signaled Interrupts (MSI) Driver Guide HOWTO and FAQ. |
| 5 | PCI-DMA-mapping.txt | ||
| 6 | - info for PCI drivers using DMA portably across all platforms | ||
| 7 | PCIEBUS-HOWTO.txt | 5 | PCIEBUS-HOWTO.txt |
| 8 | - a guide describing the PCI Express Port Bus driver | 6 | - a guide describing the PCI Express Port Bus driver |
| 9 | pci-error-recovery.txt | 7 | pci-error-recovery.txt |
| 10 | - info on PCI error recovery | 8 | - info on PCI error recovery |
| 9 | pci-iov-howto.txt | ||
| 10 | - the PCI Express I/O Virtualization HOWTO | ||
| 11 | pci.txt | 11 | pci.txt |
| 12 | - info on the PCI subsystem for device driver authors | 12 | - info on the PCI subsystem for device driver authors |
| 13 | pcieaer-howto.txt | 13 | pcieaer-howto.txt |
| @@ -82,93 +82,111 @@ Most of the hard work is done for the driver in the PCI layer. It simply · 81 unmodified lines | |||
| 82 | has to request that the PCI layer set up the MSI capability for this | 82 | has to request that the PCI layer set up the MSI capability for this |
| 83 | device. | 83 | device. |
| 84 | 84 | ||
| 85 | 4.2.1 pci_enable_msi | 85 | 4.2.1 pci_enable_msi_range |
| 86 | 86 | ||
| 87 | int pci_enable_msi(struct pci_dev *dev) | 87 | int pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec) |
| 88 | 88 | ||
| 89 | A successful call allocates ONE interrupt to the device, regardless | 89 | This function allows a device driver to request any number of MSI |
| 90 | of how many MSIs the device supports. The device is switched from | 90 | interrupts within specified range from 'minvec' to 'maxvec'. |
| 91 | pin-based interrupt mode to MSI mode. The dev->irq number is changed | ||
| 92 | to a new number which represents the message signaled interrupt; | ||
| 93 | consequently, this function should be called before the driver calls | ||
| 94 | request_irq(), because an MSI is delivered via a vector that is | ||
| 95 | different from the vector of a pin-based interrupt. | ||
| 96 | 91 | ||
| 97 | 4.2.2 pci_enable_msi_block | 92 | If this function returns a positive number it indicates the number of |
| 93 | MSI interrupts that have been successfully allocated. In this case | ||
| 94 | the device is switched from pin-based interrupt mode to MSI mode and | ||
| 95 | updates dev->irq to be the lowest of the new interrupts assigned to it. | ||
| 96 | The other interrupts assigned to the device are in the range dev->irq | ||
| 97 | to dev->irq + returned value - 1. Device driver can use the returned | ||
| 98 | number of successfully allocated MSI interrupts to further allocate | ||
| 99 | and initialize device resources. | ||
| 98 | 100 | ||
| 99 | int pci_enable_msi_block(struct pci_dev *dev, int count) | 101 | If this function returns a negative number, it indicates an error and |
| 102 | the driver should not attempt to request any more MSI interrupts for | ||
| 103 | this device. | ||
| 100 | 104 | ||
| 101 | This variation on the above call allows a device driver to request multiple | 105 | This function should be called before the driver calls request_irq(), |
| 102 | MSIs. The MSI specification only allows interrupts to be allocated in | 106 | because MSI interrupts are delivered via vectors that are different |
| 103 | powers of two, up to a maximum of 2^5 (32). | 107 | from the vector of a pin-based interrupt. |
| 104 | 108 | ||
| 105 | If this function returns 0, it has succeeded in allocating at least as many | 109 | It is ideal if drivers can cope with a variable number of MSI interrupts; |
| 106 | interrupts as the driver requested (it may have allocated more in order | 110 | there are many reasons why the platform may not be able to provide the |
| 107 | to satisfy the power-of-two requirement). In this case, the function | 111 | exact number that a driver asks for. |
| 108 | enables MSI on this device and updates dev->irq to be the lowest of | ||
| 109 | the new interrupts assigned to it. The other interrupts assigned to | ||
| 110 | the device are in the range dev->irq to dev->irq + count - 1. | ||
| 111 | 112 | ||
| 112 | If this function returns a negative number, it indicates an error and | 113 | There could be devices that can not operate with just any number of MSI |
| 113 | the driver should not attempt to request any more MSI interrupts for | 114 | interrupts within a range. See chapter 4.3.1.3 to get the idea how to |
| 114 | this device. If this function returns a positive number, it is | 115 | handle such devices for MSI-X - the same logic applies to MSI. |
| 115 | less than 'count' and indicates the number of interrupts that could have | ||
| 116 | been allocated. In neither case is the irq value updated or the device | ||
| 117 | switched into MSI mode. | ||
| 118 | |||
| 119 | The device driver must decide what action to take if | ||
| 120 | pci_enable_msi_block() returns a value less than the number requested. | ||
| 121 | For instance, the driver could still make use of fewer interrupts; | ||
| 122 | in this case the driver should call pci_enable_msi_block() | ||
| 123 | again. Note that it is not guaranteed to succeed, even when the | ||
| 124 | 'count' has been reduced to the value returned from a previous call to | ||
| 125 | pci_enable_msi_block(). This is because there are multiple constraints | ||
| 126 | on the number of vectors that can be allocated; pci_enable_msi_block() | ||
| 127 | returns as soon as it finds any constraint that doesn't allow the | ||
| 128 | call to succeed. | ||
| 129 | |||
| 130 | 4.2.3 pci_enable_msi_block_auto | ||
| 131 | |||
| 132 | int pci_enable_msi_block_auto(struct pci_dev *dev, unsigned int *count) | ||
| 133 | |||
| 134 | This variation on pci_enable_msi() call allows a device driver to request | ||
| 135 | the maximum possible number of MSIs. The MSI specification only allows | ||
| 136 | interrupts to be allocated in powers of two, up to a maximum of 2^5 (32). | ||
| 137 | |||
| 138 | If this function returns a positive number, it indicates that it has | ||
| 139 | succeeded and the returned value is the number of allocated interrupts. In | ||
| 140 | this case, the function enables MSI on this device and updates dev->irq to | ||
| 141 | be the lowest of the new interrupts assigned to it. The other interrupts | ||
| 142 | assigned to the device are in the range dev->irq to dev->irq + returned | ||
| 143 | value - 1. | ||
| 144 | 116 | ||
| 145 | If this function returns a negative number, it indicates an error and | 117 | 4.2.1.1 Maximum possible number of MSI interrupts |
| 146 | the driver should not attempt to request any more MSI interrupts for | 118 | |
| 147 | this device. | 119 | The typical usage of MSI interrupts is to allocate as many vectors as |
| 120 | possible, likely up to the limit returned by pci_msi_vec_count() function: | ||
| 121 | |||
| 122 | static int foo_driver_enable_msi(struct pci_dev *pdev, int nvec) | ||
| 123 | { | ||
| 124 | return pci_enable_msi_range(pdev, 1, nvec); | ||
| 125 | } | ||
| 126 | |||
| 127 | Note the value of 'minvec' parameter is 1. As 'minvec' is inclusive, | ||
| 128 | the value of 0 would be meaningless and could result in error. | ||
| 148 | 129 | ||
| 149 | If the device driver needs to know the number of interrupts the device | 130 | Some devices have a minimal limit on number of MSI interrupts. |
| 150 | supports it can pass the pointer count where that number is stored. The | 131 | In this case the function could look like this: |
| 151 | device driver must decide what action to take if pci_enable_msi_block_auto() | ||
| 152 | succeeds, but returns a value less than the number of interrupts supported. | ||
| 153 | If the device driver does not need to know the number of interrupts | ||
| 154 | supported, it can set the pointer count to NULL. | ||
| 155 | 132 | ||
| 156 | 4.2.4 pci_disable_msi | 133 | static int foo_driver_enable_msi(struct pci_dev *pdev, int nvec) |
| 134 | { | ||
| 135 | return pci_enable_msi_range(pdev, FOO_DRIVER_MINIMUM_NVEC, nvec); | ||
| 136 | } | ||
| 137 | |||
| 138 | 4.2.1.2 Exact number of MSI interrupts | ||
| 139 | |||
| 140 | If a driver is unable or unwilling to deal with a variable number of MSI | ||
| 141 | interrupts it could request a particular number of interrupts by passing | ||
| 142 | that number to pci_enable_msi_range() function as both 'minvec' and 'maxvec' | ||
| 143 | parameters: | ||
| 144 | |||
| 145 | static int foo_driver_enable_msi(struct pci_dev *pdev, int nvec) | ||
| 146 | { | ||
| 147 | return pci_enable_msi_range(pdev, nvec, nvec); | ||
| 148 | } | ||
| 149 | |||
| 150 | 4.2.1.3 Single MSI mode | ||
| 151 | |||
| 152 | The most notorious example of the request type described above is | ||
| 153 | enabling the single MSI mode for a device. It could be done by passing | ||
| 154 | two 1s as 'minvec' and 'maxvec': | ||
| 155 | |||
| 156 | static int foo_driver_enable_single_msi(struct pci_dev *pdev) | ||
| 157 | { | ||
| 158 | return pci_enable_msi_range(pdev, 1, 1); | ||
| 159 | } | ||
| 160 | |||
| 161 | 4.2.2 pci_disable_msi | ||
| 157 | 162 | ||
| 158 | void pci_disable_msi(struct pci_dev *dev) | 163 | void pci_disable_msi(struct pci_dev *dev) |
| 159 | 164 | ||
| 160 | This function should be used to undo the effect of pci_enable_msi() or | 165 | This function should be used to undo the effect of pci_enable_msi_range(). |
| 161 | pci_enable_msi_block() or pci_enable_msi_block_auto(). Calling it restores | 166 | Calling it restores dev->irq to the pin-based interrupt number and frees |
| 162 | dev->irq to the pin-based interrupt number and frees the previously | 167 | the previously allocated MSIs. The interrupts may subsequently be assigned |
| 163 | allocated message signaled interrupt(s). The interrupt may subsequently be | 168 | to another device, so drivers should not cache the value of dev->irq. |
| 164 | assigned to another device, so drivers should not cache the value of | ||
| 165 | dev->irq. | ||
| 166 | 169 | ||
| 167 | Before calling this function, a device driver must always call free_irq() | 170 | Before calling this function, a device driver must always call free_irq() |
| 168 | on any interrupt for which it previously called request_irq(). | 171 | on any interrupt for which it previously called request_irq(). |
| 169 | Failure to do so results in a BUG_ON(), leaving the device with | 172 | Failure to do so results in a BUG_ON(), leaving the device with |
| 170 | MSI enabled and thus leaking its vector. | 173 | MSI enabled and thus leaking its vector. |
| 171 | 174 | ||
| 175 | 4.2.3 pci_msi_vec_count | ||
| 176 | |||
| 177 | int pci_msi_vec_count(struct pci_dev *dev) | ||
| 178 | |||
| 179 | This function could be used to retrieve the number of MSI vectors the | ||
| 180 | device requested (via the Multiple Message Capable register). The MSI | ||
| 181 | specification only allows the returned value to be a power of two, | ||
| 182 | up to a maximum of 2^5 (32). | ||
| 183 | |||
| 184 | If this function returns a negative number, it indicates the device is | ||
| 185 | not capable of sending MSIs. | ||
| 186 | |||
| 187 | If this function returns a positive number, it indicates the maximum | ||
| 188 | number of MSI interrupt vectors that could be allocated. | ||
| 189 | |||
| 172 | 4.3 Using MSI-X | 190 | 4.3 Using MSI-X |
| 173 | 191 | ||
| 174 | The MSI-X capability is much more flexible than the MSI capability. | 192 | The MSI-X capability is much more flexible than the MSI capability. |
| @@ -188,26 +206,31 @@ in each element of the array to indicate for which entries the kernel · 13 unmodified lines | |||
| 188 | should assign interrupts; it is invalid to fill in two entries with the | 206 | should assign interrupts; it is invalid to fill in two entries with the |
| 189 | same number. | 207 | same number. |
| 190 | 208 | ||
| 191 | 4.3.1 pci_enable_msix | 209 | 4.3.1 pci_enable_msix_range |
| 192 | 210 | ||
| 193 | int pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, int nvec) | 211 | int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries, |
| 212 | int minvec, int maxvec) | ||
| 194 | 213 | ||
| 195 | Calling this function asks the PCI subsystem to allocate 'nvec' MSIs. | 214 | Calling this function asks the PCI subsystem to allocate any number of |
| 215 | MSI-X interrupts within specified range from 'minvec' to 'maxvec'. | ||
| 196 | The 'entries' argument is a pointer to an array of msix_entry structs | 216 | The 'entries' argument is a pointer to an array of msix_entry structs |
| 197 | which should be at least 'nvec' entries in size. On success, the | 217 | which should be at least 'maxvec' entries in size. |
| 198 | device is switched into MSI-X mode and the function returns 0. | 218 | |
| 199 | The 'vector' member in each entry is populated with the interrupt number; | 219 | On success, the device is switched into MSI-X mode and the function |
| 220 | returns the number of MSI-X interrupts that have been successfully | ||
| 221 | allocated. In this case the 'vector' member in entries numbered from | ||
| 222 | 0 to the returned value - 1 is populated with the interrupt number; | ||
| 200 | the driver should then call request_irq() for each 'vector' that it | 223 | the driver should then call request_irq() for each 'vector' that it |
| 201 | decides to use. The device driver is responsible for keeping track of the | 224 | decides to use. The device driver is responsible for keeping track of the |
| 202 | interrupts assigned to the MSI-X vectors so it can free them again later. | 225 | interrupts assigned to the MSI-X vectors so it can free them again later. |
| 226 | Device driver can use the returned number of successfully allocated MSI-X | ||
| 227 | interrupts to further allocate and initialize device resources. | ||
| 203 | 228 | ||
| 204 | If this function returns a negative number, it indicates an error and | 229 | If this function returns a negative number, it indicates an error and |
| 205 | the driver should not attempt to allocate any more MSI-X interrupts for | 230 | the driver should not attempt to allocate any more MSI-X interrupts for |
| 206 | this device. If it returns a positive number, it indicates the maximum | 231 | this device. |
| 207 | number of interrupt vectors that could have been allocated. See example | ||
| 208 | below. | ||
| 209 | 232 | ||
| 210 | This function, in contrast with pci_enable_msi(), does not adjust | 233 | This function, in contrast with pci_enable_msi_range(), does not adjust |
| 211 | dev->irq. The device will not generate interrupts for this interrupt | 234 | dev->irq. The device will not generate interrupts for this interrupt |
| 212 | number once MSI-X is enabled. | 235 | number once MSI-X is enabled. |
| 213 | 236 | ||
| @@ -218,28 +241,103 @@ It is ideal if drivers can cope with a variable number of MSI-X interrupts; · 4 unmodified lines | |||
| 218 | there are many reasons why the platform may not be able to provide the | 241 | there are many reasons why the platform may not be able to provide the |
| 219 | exact number that a driver asks for. | 242 | exact number that a driver asks for. |
| 220 | 243 | ||
| 221 | A request loop to achieve that might look like: | 244 | There could be devices that can not operate with just any number of MSI-X |
| 245 | interrupts within a range. E.g., an network adapter might need let's say | ||
| 246 | four vectors per each queue it provides. Therefore, a number of MSI-X | ||
| 247 | interrupts allocated should be a multiple of four. In this case interface | ||
| 248 | pci_enable_msix_range() can not be used alone to request MSI-X interrupts | ||
| 249 | (since it can allocate any number within the range, without any notion of | ||
| 250 | the multiple of four) and the device driver should master a custom logic | ||
| 251 | to request the required number of MSI-X interrupts. | ||
| 252 | |||
| 253 | 4.3.1.1 Maximum possible number of MSI-X interrupts | ||
| 254 | |||
| 255 | The typical usage of MSI-X interrupts is to allocate as many vectors as | ||
| 256 | possible, likely up to the limit returned by pci_msix_vec_count() function: | ||
| 222 | 257 | ||
| 223 | static int foo_driver_enable_msix(struct foo_adapter *adapter, int nvec) | 258 | static int foo_driver_enable_msix(struct foo_adapter *adapter, int nvec) |
| 224 | { | 259 | { |
| 225 | while (nvec >= FOO_DRIVER_MINIMUM_NVEC) { | 260 | return pci_enable_msi_range(adapter->pdev, adapter->msix_entries, |
| 226 | rc = pci_enable_msix(adapter->pdev, | 261 | 1, nvec); |
| 227 | adapter->msix_entries, nvec); | 262 | } |
| 228 | if (rc > 0) | 263 | |
| 229 | nvec = rc; | 264 | Note the value of 'minvec' parameter is 1. As 'minvec' is inclusive, |
| 230 | else | 265 | the value of 0 would be meaningless and could result in error. |
| 231 | return rc; | 266 | |
| 267 | Some devices have a minimal limit on number of MSI-X interrupts. | ||
| 268 | In this case the function could look like this: | ||
| 269 | |||
| 270 | static int foo_driver_enable_msix(struct foo_adapter *adapter, int nvec) | ||
| 271 | { | ||
| 272 | return pci_enable_msi_range(adapter->pdev, adapter->msix_entries, | ||
| 273 | FOO_DRIVER_MINIMUM_NVEC, nvec); | ||
| 274 | } | ||
| 275 | |||
| 276 | 4.3.1.2 Exact number of MSI-X interrupts | ||
| 277 | |||
| 278 | If a driver is unable or unwilling to deal with a variable number of MSI-X | ||
| 279 | interrupts it could request a particular number of interrupts by passing | ||
| 280 | that number to pci_enable_msix_range() function as both 'minvec' and 'maxvec' | ||
| 281 | parameters: | ||
| 282 | |||
| 283 | static int foo_driver_enable_msix(struct foo_adapter *adapter, int nvec) | ||
| 284 | { | ||
| 285 | return pci_enable_msi_range(adapter->pdev, adapter->msix_entries, | ||
| 286 | nvec, nvec); | ||
| 287 | } | ||
| 288 | |||
| 289 | 4.3.1.3 Specific requirements to the number of MSI-X interrupts | ||
| 290 | |||
| 291 | As noted above, there could be devices that can not operate with just any | ||
| 292 | number of MSI-X interrupts within a range. E.g., let's assume a device that | ||
| 293 | is only capable sending the number of MSI-X interrupts which is a power of | ||
| 294 | two. A routine that enables MSI-X mode for such device might look like this: | ||
| 295 | |||
| 296 | /* | ||
| 297 | * Assume 'minvec' and 'maxvec' are non-zero | ||
| 298 | */ | ||
| 299 | static int foo_driver_enable_msix(struct foo_adapter *adapter, | ||
| 300 | int minvec, int maxvec) | ||
| 301 | { | ||
| 302 | int rc; | ||
| 303 | |||
| 304 | minvec = roundup_pow_of_two(minvec); | ||
| 305 | maxvec = rounddown_pow_of_two(maxvec); | ||
| 306 | |||
| 307 | if (minvec > maxvec) | ||
| 308 | return -ERANGE; | ||
| 309 | |||
| 310 | retry: | ||
| 311 | rc = pci_enable_msix_range(adapter->pdev, adapter->msix_entries, | ||
| 312 | maxvec, maxvec); | ||
| 313 | /* | ||
| 314 | * -ENOSPC is the only error code allowed to be analized | ||
| 315 | */ | ||
| 316 | if (rc == -ENOSPC) { | ||
| 317 | if (maxvec == 1) | ||
| 318 | return -ENOSPC; | ||
| 319 | |||
| 320 | maxvec /= 2; | ||
| 321 | |||
| 322 | if (minvec > maxvec) | ||
| 323 | return -ENOSPC; | ||
| 324 | |||
| 325 | goto retry; | ||
| 232 | } | 326 | } |
| 233 | 327 | ||
| 234 | return -ENOSPC; | 328 | return rc; |
| 235 | } | 329 | } |
| 236 | 330 | ||
| 331 | Note how pci_enable_msix_range() return value is analized for a fallback - | ||
| 332 | any error code other than -ENOSPC indicates a fatal error and should not | ||
| 333 | be retried. | ||
| 334 | |||
| 237 | 4.3.2 pci_disable_msix | 335 | 4.3.2 pci_disable_msix |
| 238 | 336 | ||
| 239 | void pci_disable_msix(struct pci_dev *dev) | 337 | void pci_disable_msix(struct pci_dev *dev) |
| 240 | 338 | ||
| 241 | This function should be used to undo the effect of pci_enable_msix(). It frees | 339 | This function should be used to undo the effect of pci_enable_msix_range(). |
| 242 | the previously allocated message signaled interrupts. The interrupts may | 340 | It frees the previously allocated MSI-X interrupts. The interrupts may |
| 243 | subsequently be assigned to another device, so drivers should not cache | 341 | subsequently be assigned to another device, so drivers should not cache |
| 244 | the value of the 'vector' elements over a call to pci_disable_msix(). | 342 | the value of the 'vector' elements over a call to pci_disable_msix(). |
| 245 | 343 | ||
| @@ -255,18 +353,32 @@ MSI-X Table. This address is mapped by the PCI subsystem, and should not · 9 unmodified lines | |||
| 255 | be accessed directly by the device driver. If the driver wishes to | 353 | be accessed directly by the device driver. If the driver wishes to |
| 256 | mask or unmask an interrupt, it should call disable_irq() / enable_irq(). | 354 | mask or unmask an interrupt, it should call disable_irq() / enable_irq(). |
| 257 | 355 | ||
| 356 | 4.3.4 pci_msix_vec_count | ||
| 357 | |||
| 358 | int pci_msix_vec_count(struct pci_dev *dev) | ||
| 359 | |||
| 360 | This function could be used to retrieve number of entries in the device | ||
| 361 | MSI-X table. | ||
| 362 | |||
| 363 | If this function returns a negative number, it indicates the device is | ||
| 364 | not capable of sending MSI-Xs. | ||
| 365 | |||
| 366 | If this function returns a positive number, it indicates the maximum | ||
| 367 | number of MSI-X interrupt vectors that could be allocated. | ||
| 368 | |||
| 258 | 4.4 Handling devices implementing both MSI and MSI-X capabilities | 369 | 4.4 Handling devices implementing both MSI and MSI-X capabilities |
| 259 | 370 | ||
| 260 | If a device implements both MSI and MSI-X capabilities, it can | 371 | If a device implements both MSI and MSI-X capabilities, it can |
| 261 | run in either MSI mode or MSI-X mode, but not both simultaneously. | 372 | run in either MSI mode or MSI-X mode, but not both simultaneously. |
| 262 | This is a requirement of the PCI spec, and it is enforced by the | 373 | This is a requirement of the PCI spec, and it is enforced by the |
| 263 | PCI layer. Calling pci_enable_msi() when MSI-X is already enabled or | 374 | PCI layer. Calling pci_enable_msi_range() when MSI-X is already |
| 264 | pci_enable_msix() when MSI is already enabled results in an error. | 375 | enabled or pci_enable_msix_range() when MSI is already enabled |
| 265 | If a device driver wishes to switch between MSI and MSI-X at runtime, | 376 | results in an error. If a device driver wishes to switch between MSI |
| 266 | it must first quiesce the device, then switch it back to pin-interrupt | 377 | and MSI-X at runtime, it must first quiesce the device, then switch |
| 267 | mode, before calling pci_enable_msi() or pci_enable_msix() and resuming | 378 | it back to pin-interrupt mode, before calling pci_enable_msi_range() |
| 268 | operation. This is not expected to be a common operation but may be | 379 | or pci_enable_msix_range() and resuming operation. This is not expected |
| 269 | useful for debugging or testing during development. | 380 | to be a common operation but may be useful for debugging or testing |
| 381 | during development. | ||
| 270 | 382 | ||
| 271 | 4.5 Considerations when using MSIs | 383 | 4.5 Considerations when using MSIs |
| 272 | 384 | ||
| @@ -381,5 +493,5 @@ or disabled (0). If 0 is found in any of the msi_bus files belonging · 108 unmodified lines | |||
| 381 | to bridges between the PCI root and the device, MSIs are disabled. | 493 | to bridges between the PCI root and the device, MSIs are disabled. |
| 382 | 494 | ||
| 383 | It is also worth checking the device driver to see whether it supports MSIs. | 495 | It is also worth checking the device driver to see whether it supports MSIs. |
| 384 | For example, it may contain calls to pci_enable_msi(), pci_enable_msix() or | 496 | For example, it may contain calls to pci_enable_msi_range() or |
| 385 | pci_enable_msi_block(). | 497 | pci_enable_msix_range(). |
| @@ -123,8 +123,10 @@ initialization with a pointer to a structure describing the driver · 122 unmodified lines | |||
| 123 | 123 | ||
| 124 | 124 | ||
| 125 | The ID table is an array of struct pci_device_id entries ending with an | 125 | The ID table is an array of struct pci_device_id entries ending with an |
| 126 | all-zero entry; use of the macro DEFINE_PCI_DEVICE_TABLE is the preferred | 126 | all-zero entry. Definitions with static const are generally preferred. |
| 127 | method of declaring the table. Each entry consists of: | 127 | Use of the deprecated macro DEFINE_PCI_DEVICE_TABLE should be avoided. |
| 128 | |||
| 129 | Each entry consists of: | ||
| 128 | 130 | ||
| 129 | vendor,device Vendor and device ID to match (or PCI_ANY_ID) | 131 | vendor,device Vendor and device ID to match (or PCI_ANY_ID) |
| 130 | 132 | ||
| @@ -293,36 +293,13 @@ the device to the driver. For example: · 292 unmodified lines | |||
| 293 | 293 | ||
| 294 | These GPIO numbers are controller relative and path "\\_SB.PCI0.GPI0" | 294 | These GPIO numbers are controller relative and path "\\_SB.PCI0.GPI0" |
| 295 | specifies the path to the controller. In order to use these GPIOs in Linux | 295 | specifies the path to the controller. In order to use these GPIOs in Linux |
| 296 | we need to translate them to the Linux GPIO numbers. | 296 | we need to translate them to the corresponding Linux GPIO descriptors. |
| 297 | 297 | ||
| 298 | In a simple case of just getting the Linux GPIO number from device | 298 | There is a standard GPIO API for that and is documented in |
| 299 | resources one can use acpi_get_gpio_by_index() helper function. It takes | 299 | Documentation/gpio.txt. |
| 300 | pointer to the device and index of the GpioIo/GpioInt descriptor in the | ||
| 301 | device resources list. For example: | ||
| 302 | 300 | ||
| 303 | int gpio_irq, gpio_power; | 301 | In the above example we can get the corresponding two GPIO descriptors with |
| 304 | int ret; | 302 | a code like this: |
| 305 | |||
| 306 | gpio_irq = acpi_get_gpio_by_index(dev, 1, NULL); | ||
| 307 | if (gpio_irq < 0) | ||
| 308 | /* handle error */ | ||
| 309 | |||
| 310 | gpio_power = acpi_get_gpio_by_index(dev, 0, NULL); | ||
| 311 | if (gpio_power < 0) | ||
| 312 | /* handle error */ | ||
| 313 | |||
| 314 | /* Now we can use the GPIO numbers */ | ||
| 315 | |||
| 316 | Other GpioIo parameters must be converted first by the driver to be | ||
| 317 | suitable to the gpiolib before passing them. | ||
| 318 | |||
| 319 | In case of GpioInt resource an additional call to gpio_to_irq() must be | ||
| 320 | done before calling request_irq(). | ||
| 321 | |||
| 322 | Note that the above API is ACPI specific and not recommended for drivers | ||
| 323 | that need to support non-ACPI systems. The recommended way is to use | ||
| 324 | the descriptor based GPIO interfaces. The above example looks like this | ||
| 325 | when converted to the GPIO desc: | ||
| 326 | 303 | ||
| 327 | #include <linux/gpio/consumer.h> | 304 | #include <linux/gpio/consumer.h> |
| 328 | ... | 305 | ... |
| @@ -339,4 +316,5 @@ when converted to the GPIO desc: · 10 unmodified lines | |||
| 339 | 316 | ||
| 340 | /* Now we can use the GPIO descriptors */ | 317 | /* Now we can use the GPIO descriptors */ |
| 341 | 318 | ||
| 342 | See also Documentation/gpio.txt. | 319 | There are also devm_* versions of these functions which release the |
| 320 | descriptors once the device is released. | ||
| @@ -235,10 +235,6 @@ Wysocki <rafael.j.wysocki@intel.com>. · 234 unmodified lines | |||
| 235 | named object's type in the second column). In that case the object's | 235 | named object's type in the second column). In that case the object's |
| 236 | directory in sysfs will contain the 'path' attribute whose value is | 236 | directory in sysfs will contain the 'path' attribute whose value is |
| 237 | the full path to the node from the namespace root. | 237 | the full path to the node from the namespace root. |
| 238 | struct acpi_device objects are created for the ACPI namespace nodes | ||
| 239 | whose _STA control methods return PRESENT or FUNCTIONING. The power | ||
| 240 | resource nodes or nodes without _STA are assumed to be both PRESENT | ||
| 241 | and FUNCTIONING. | ||
| 242 | F: | 238 | F: |
| 243 | The struct acpi_device object is created for a fixed hardware | 239 | The struct acpi_device object is created for a fixed hardware |
| 244 | feature (as indicated by the fixed feature flag's name in the second | 240 | feature (as indicated by the fixed feature flag's name in the second |
| @@ -340,7 +336,7 @@ Wysocki <rafael.j.wysocki@intel.com>. · 95 unmodified lines | |||
| 340 | | +-------------+-------+----------------+ | 336 | | +-------------+-------+----------------+ |
| 341 | | | | 337 | | | |
| 342 | | | +- - - - - - - +- - - - - - +- - - - - - - -+ | 338 | | | +- - - - - - - +- - - - - - +- - - - - - - -+ |
| 343 | | +-| * PNP0C0D:00 | \_SB_.LID0 | acpi:PNP0C0D: | | 339 | | +-| PNP0C0D:00 | \_SB_.LID0 | acpi:PNP0C0D: | |
| 344 | | | +- - - - - - - +- - - - - - +- - - - - - - -+ | 340 | | | +- - - - - - - +- - - - - - +- - - - - - - -+ |
| 345 | | | | 341 | | | |
| 346 | | | +------------+------------+-----------------------+ | 342 | | | +------------+------------+-----------------------+ |
| @@ -390,6 +386,3 @@ Wysocki <rafael.j.wysocki@intel.com>. · 43 unmodified lines | |||
| 390 | attribute (as described earlier in this document). | 386 | attribute (as described earlier in this document). |
| 391 | NOTE: N/A indicates the device object does not have the 'path' or the | 387 | NOTE: N/A indicates the device object does not have the 'path' or the |
| 392 | 'modalias' attribute. | 388 | 'modalias' attribute. |
| 393 | NOTE: The PNP0C0D device listed above is highlighted (marked by "*") | ||
| 394 | to indicate it will be created only when its _STA methods return | ||
| 395 | PRESENT or FUNCTIONING. | ||
| @@ -211,6 +211,30 @@ MMP/MMP2 family (communication processor) · 210 unmodified lines | |||
| 211 | Linux kernel mach directory: arch/arm/mach-mmp | 211 | Linux kernel mach directory: arch/arm/mach-mmp |
| 212 | Linux kernel plat directory: arch/arm/plat-pxa | 212 | Linux kernel plat directory: arch/arm/plat-pxa |
| 213 | 213 | ||
| 214 | Berlin family (Digital Entertainment) | ||
| 215 | ------------------------------------- | ||
| 216 | |||
| 217 | Flavors: | ||
| 218 | 88DE3005, Armada 1500-mini | ||
| 219 | Design name: BG2CD | ||
| 220 | Core: ARM Cortex-A9, PL310 L2CC | ||
| 221 | Homepage: http://www.marvell.com/digital-entertainment/armada-1500-mini/ | ||
| 222 | 88DE3100, Armada 1500 | ||
| 223 | Design name: BG2 | ||
| 224 | Core: Marvell PJ4B (ARMv7), Tauros3 L2CC | ||
| 225 | Homepage: http://www.marvell.com/digital-entertainment/armada-1500/ | ||
| 226 | Product Brief: http://www.marvell.com/digital-entertainment/armada-1500/assets/Marvell-ARMADA-1500-Product-Brief.pdf | ||
| 227 | 88DE???? | ||
| 228 | Design name: BG3 | ||
| 229 | Core: ARM Cortex-A15, CA15 integrated L2CC | ||
| 230 | |||
| 231 | Homepage: http://www.marvell.com/digital-entertainment/ | ||
| 232 | Directory: arch/arm/mach-berlin | ||
| 233 | |||
| 234 | Comments: | ||
| 235 | * This line of SoCs is based on Marvell Sheeva or ARM Cortex CPUs | ||
| 236 | with Synopsys DesignWare (IRQ, GPIO, Timers, ...) and PXA IP (SDHCI, USB, ETH, ...). | ||
| 237 | |||
| 214 | Long-term plans | 238 | Long-term plans |
| 215 | --------------- | 239 | --------------- |
| 216 | 240 | ||
| @@ -85,21 +85,10 @@ between the calls. · 84 unmodified lines | |||
| 85 | Headers | 85 | Headers |
| 86 | ------- | 86 | ------- |
| 87 | 87 | ||
| 88 | See arch/arm/mach-s3c2410/include/mach/regs-gpio.h for the list | 88 | See arch/arm/mach-s3c24xx/include/mach/regs-gpio.h for the list |
| 89 | of GPIO pins, and the configuration values for them. This | 89 | of GPIO pins, and the configuration values for them. This |
| 90 | is included by using #include <mach/regs-gpio.h> | 90 | is included by using #include <mach/regs-gpio.h> |
| 91 | 91 | ||
| 92 | The GPIO management functions are defined in the hardware | ||
| 93 | header arch/arm/mach-s3c2410/include/mach/hardware.h which can be | ||
| 94 | included by #include <mach/hardware.h> | ||
| 95 | |||
| 96 | A useful amount of documentation can be found in the hardware | ||
| 97 | header on how the GPIO functions (and others) work. | ||
| 98 | |||
| 99 | Whilst a number of these functions do make some checks on what | ||
| 100 | is passed to them, for speed of use, they may not always ensure | ||
| 101 | that the user supplied data to them is correct. | ||
| 102 | |||
| 103 | 92 | ||
| 104 | PIN Numbers | 93 | PIN Numbers |
| 105 | ----------- | 94 | ----------- |
| @@ -447,14 +447,13 @@ struct bio_vec { · 446 unmodified lines | |||
| 447 | * main unit of I/O for the block layer and lower layers (ie drivers) | 447 | * main unit of I/O for the block layer and lower layers (ie drivers) |
| 448 | */ | 448 | */ |
| 449 | struct bio { | 449 | struct bio { |
| 450 | sector_t bi_sector; | ||
| 451 | struct bio *bi_next; /* request queue link */ | 450 | struct bio *bi_next; /* request queue link */ |
| 452 | struct block_device *bi_bdev; /* target device */ | 451 | struct block_device *bi_bdev; /* target device */ |
| 453 | unsigned long bi_flags; /* status, command, etc */ | 452 | unsigned long bi_flags; /* status, command, etc */ |
| 454 | unsigned long bi_rw; /* low bits: r/w, high: priority */ | 453 | unsigned long bi_rw; /* low bits: r/w, high: priority */ |
| 455 | 454 | ||
| 456 | unsigned int bi_vcnt; /* how may bio_vec's */ | 455 | unsigned int bi_vcnt; /* how may bio_vec's */ |
| 457 | unsigned int bi_idx; /* current index into bio_vec array */ | 456 | struct bvec_iter bi_iter; /* current index into bio_vec array */ |
| 458 | 457 | ||
| 459 | unsigned int bi_size; /* total size in bytes */ | 458 | unsigned int bi_size; /* total size in bytes */ |
| 460 | unsigned short bi_phys_segments; /* segments after physaddr coalesce*/ | 459 | unsigned short bi_phys_segments; /* segments after physaddr coalesce*/ |
| @@ -480,7 +479,7 @@ With this multipage bio design: · 19 unmodified lines | |||
| 480 | - Code that traverses the req list can find all the segments of a bio | 479 | - Code that traverses the req list can find all the segments of a bio |
| 481 | by using rq_for_each_segment. This handles the fact that a request | 480 | by using rq_for_each_segment. This handles the fact that a request |
| 482 | has multiple bios, each of which can have multiple segments. | 481 | has multiple bios, each of which can have multiple segments. |
| 483 | - Drivers which can't process a large bio in one shot can use the bi_idx | 482 | - Drivers which can't process a large bio in one shot can use the bi_iter |
| 484 | field to keep track of the next bio_vec entry to process. | 483 | field to keep track of the next bio_vec entry to process. |
| 485 | (e.g a 1MB bio_vec needs to be handled in max 128kB chunks for IDE) | 484 | (e.g a 1MB bio_vec needs to be handled in max 128kB chunks for IDE) |
| 486 | [TBD: Should preferably also have a bi_voffset and bi_vlen to avoid modifying | 485 | [TBD: Should preferably also have a bi_voffset and bi_vlen to avoid modifying |
| @@ -589,7 +588,7 @@ driver should not modify these values. The block layer sets up the · 102 unmodified lines | |||
| 589 | nr_sectors and current_nr_sectors fields (based on the corresponding | 588 | nr_sectors and current_nr_sectors fields (based on the corresponding |
| 590 | hard_xxx values and the number of bytes transferred) and updates it on | 589 | hard_xxx values and the number of bytes transferred) and updates it on |
| 591 | every transfer that invokes end_that_request_first. It does the same for the | 590 | every transfer that invokes end_that_request_first. It does the same for the |
| 592 | buffer, bio, bio->bi_idx fields too. | 591 | buffer, bio, bio->bi_iter fields too. |
| 593 | 592 | ||
| 594 | The buffer field is just a virtual address mapping of the current segment | 593 | The buffer field is just a virtual address mapping of the current segment |
| 595 | of the i/o buffer in cases where the buffer resides in low-memory. For high | 594 | of the i/o buffer in cases where the buffer resides in low-memory. For high |
| @@ -0,0 +1,111 @@ | |||
| 1 | |||
| 2 | Immutable biovecs and biovec iterators: | ||
| 3 | ======================================= | ||
| 4 | |||
| 5 | Kent Overstreet <kmo@daterainc.com> | ||
| 6 | |||
| 7 | As of 3.13, biovecs should never be modified after a bio has been submitted. | ||
| 8 | Instead, we have a new struct bvec_iter which represents a range of a biovec - | ||
| 9 | the iterator will be modified as the bio is completed, not the biovec. | ||
| 10 | |||
| 11 | More specifically, old code that needed to partially complete a bio would | ||
| 12 | update bi_sector and bi_size, and advance bi_idx to the next biovec. If it | ||
| 13 | ended up partway through a biovec, it would increment bv_offset and decrement | ||
| 14 | bv_len by the number of bytes completed in that biovec. | ||
| 15 | |||
| 16 | In the new scheme of things, everything that must be mutated in order to | ||
| 17 | partially complete a bio is segregated into struct bvec_iter: bi_sector, | ||
| 18 | bi_size and bi_idx have been moved there; and instead of modifying bv_offset | ||
| 19 | and bv_len, struct bvec_iter has bi_bvec_done, which represents the number of | ||
| 20 | bytes completed in the current bvec. | ||
| 21 | |||
| 22 | There are a bunch of new helper macros for hiding the gory details - in | ||
| 23 | particular, presenting the illusion of partially completed biovecs so that | ||
| 24 | normal code doesn't have to deal with bi_bvec_done. | ||
| 25 | |||
| 26 | * Driver code should no longer refer to biovecs directly; we now have | ||
| 27 | bio_iovec() and bio_iovec_iter() macros that return literal struct biovecs, | ||
| 28 | constructed from the raw biovecs but taking into account bi_bvec_done and | ||
| 29 | bi_size. | ||
| 30 | |||
| 31 | bio_for_each_segment() has been updated to take a bvec_iter argument | ||
| 32 | instead of an integer (that corresponded to bi_idx); for a lot of code the | ||
| 33 | conversion just required changing the types of the arguments to | ||
| 34 | bio_for_each_segment(). | ||
| 35 | |||
| 36 | * Advancing a bvec_iter is done with bio_advance_iter(); bio_advance() is a | ||
| 37 | wrapper around bio_advance_iter() that operates on bio->bi_iter, and also | ||
| 38 | advances the bio integrity's iter if present. | ||
| 39 | |||
| 40 | There is a lower level advance function - bvec_iter_advance() - which takes | ||
| 41 | a pointer to a biovec, not a bio; this is used by the bio integrity code. | ||
| 42 | |||
| 43 | What's all this get us? | ||
| 44 | ======================= | ||
| 45 | |||
| 46 | Having a real iterator, and making biovecs immutable, has a number of | ||
| 47 | advantages: | ||
| 48 | |||
| 49 | * Before, iterating over bios was very awkward when you weren't processing | ||
| 50 | exactly one bvec at a time - for example, bio_copy_data() in fs/bio.c, | ||
| 51 | which copies the contents of one bio into another. Because the biovecs | ||
| 52 | wouldn't necessarily be the same size, the old code was tricky convoluted - | ||
| 53 | it had to walk two different bios at the same time, keeping both bi_idx and | ||
| 54 | and offset into the current biovec for each. | ||
| 55 | |||
| 56 | The new code is much more straightforward - have a look. This sort of | ||
| 57 | pattern comes up in a lot of places; a lot of drivers were essentially open | ||
| 58 | coding bvec iterators before, and having common implementation considerably | ||
| 59 | simplifies a lot of code. | ||
| 60 | |||
| 61 | * Before, any code that might need to use the biovec after the bio had been | ||
| 62 | completed (perhaps to copy the data somewhere else, or perhaps to resubmit | ||
| 63 | it somewhere else if there was an error) had to save the entire bvec array | ||
| 64 | - again, this was being done in a fair number of places. | ||
| 65 | |||
| 66 | * Biovecs can be shared between multiple bios - a bvec iter can represent an | ||
| 67 | arbitrary range of an existing biovec, both starting and ending midway | ||
| 68 | through biovecs. This is what enables efficient splitting of arbitrary | ||
| 69 | bios. Note that this means we _only_ use bi_size to determine when we've | ||
| 70 | reached the end of a bio, not bi_vcnt - and the bio_iovec() macro takes | ||
| 71 | bi_size into account when constructing biovecs. | ||
| 72 | |||
| 73 | * Splitting bios is now much simpler. The old bio_split() didn't even work on | ||
| 74 | bios with more than a single bvec! Now, we can efficiently split arbitrary | ||
| 75 | size bios - because the new bio can share the old bio's biovec. | ||
| 76 | |||
| 77 | Care must be taken to ensure the biovec isn't freed while the split bio is | ||
| 78 | still using it, in case the original bio completes first, though. Using | ||
| 79 | bio_chain() when splitting bios helps with this. | ||
| 80 | |||
| 81 | * Submitting partially completed bios is now perfectly fine - this comes up | ||
| 82 | occasionally in stacking block drivers and various code (e.g. md and | ||
| 83 | bcache) had some ugly workarounds for this. | ||
| 84 | |||
| 85 | It used to be the case that submitting a partially completed bio would work | ||
| 86 | fine to _most_ devices, but since accessing the raw bvec array was the | ||
| 87 | norm, not all drivers would respect bi_idx and those would break. Now, | ||
| 88 | since all drivers _must_ go through the bvec iterator - and have been | ||
| 89 | audited to make sure they are - submitting partially completed bios is | ||
| 90 | perfectly fine. | ||
| 91 | |||
| 92 | Other implications: | ||
| 93 | =================== | ||
| 94 | |||
| 95 | * Almost all usage of bi_idx is now incorrect and has been removed; instead, | ||
| 96 | where previously you would have used bi_idx you'd now use a bvec_iter, | ||
| 97 | probably passing it to one of the helper macros. | ||
| 98 | |||
| 99 | I.e. instead of using bio_iovec_idx() (or bio->bi_iovec[bio->bi_idx]), you | ||
| 100 | now use bio_iter_iovec(), which takes a bvec_iter and returns a | ||
| 101 | literal struct bio_vec - constructed on the fly from the raw biovec but | ||
| 102 | taking into account bi_bvec_done (and bi_size). | ||
| 103 | |||
| 104 | * bi_vcnt can't be trusted or relied upon by driver code - i.e. anything that | ||
| 105 | doesn't actually own the bio. The reason is twofold: firstly, it's not | ||
| 106 | actually needed for iterating over the bio anymore - we only use bi_size. | ||
| 107 | Secondly, when cloning a bio and reusing (a portion of) the original bio's | ||
| 108 | biovec, in order to calculate bi_vcnt for the new bio we'd have to iterate | ||
| 109 | over all the biovecs in the new bio - which is silly as it's not needed. | ||
| 110 | |||
| 111 | So, don't use bi_vcnt anymore. | ||
| @@ -36,21 +36,30 @@ allowing one to squeeze more programs onto an average installation or · 35 unmodified lines | |||
| 36 | rescue floppy disk. | 36 | rescue floppy disk. |
| 37 | 37 | ||
| 38 | 38 | ||
| 39 | 2) Kernel Command Line Parameters | 39 | 2) Parameters |
| 40 | --------------------------------- | 40 | --------------------------------- |
| 41 | 41 | ||
| 42 | 2a) Kernel Command Line Parameters | ||
| 43 | |||
| 42 | ramdisk_size=N | 44 | ramdisk_size=N |
| 43 | ============== | 45 | ============== |
| 44 | 46 | ||
| 45 | This parameter tells the RAM disk driver to set up RAM disks of N k size. The | 47 | This parameter tells the RAM disk driver to set up RAM disks of N k size. The |
| 46 | default is 4096 (4 MB) (8192 (8 MB) on S390). | 48 | default is 4096 (4 MB). |
| 49 | |||
| 50 | 2b) Module parameters | ||
| 47 | 51 | ||
| 48 | ramdisk_blocksize=N | 52 | rd_nr |
| 49 | =================== | 53 | ===== |
| 54 | /dev/ramX devices created. | ||
| 50 | 55 | ||
| 51 | This parameter tells the RAM disk driver how many bytes to use per block. The | 56 | max_part |
| 52 | default is 1024 (BLOCK_SIZE). | 57 | ======== |
| 58 | Maximum partition number. | ||
| 53 | 59 | ||
| 60 | rd_size | ||
| 61 | ======= | ||
| 62 | See ramdisk_size. | ||
| 54 | 63 | ||
| 55 | 3) Using "rdev -r" | 64 | 3) Using "rdev -r" |
| 56 | ------------------ | 65 | ------------------ |
| @@ -1,8 +1,6 @@ | |||
| 1 | zram: Compressed RAM based block devices | 1 | zram: Compressed RAM based block devices |
| 2 | ---------------------------------------- | 2 | ---------------------------------------- |
| 3 | 3 | ||
| 4 | Project home: http://compcache.googlecode.com/ | ||
| 5 | |||
| 6 | * Introduction | 4 | * Introduction |
| 7 | 5 | ||
| 8 | The zram module creates RAM based block devices named /dev/zram<id> | 6 | The zram module creates RAM based block devices named /dev/zram<id> |
| @@ -69,9 +67,5 @@ Following shows a typical sequence of steps for using zram. · 60 unmodified lines | |||
| 69 | resets the disksize to zero. You must set the disksize again | 67 | resets the disksize to zero. You must set the disksize again |
| 70 | before reusing the device. | 68 | before reusing the device. |
| 71 | 69 | ||
| 72 | Please report any problems at: | ||
| 73 | - Mailing list: linux-mm-cc at laptop dot org | ||
| 74 | - Issue tracker: http://code.google.com/p/compcache/issues/list | ||
| 75 | |||
| 76 | Nitin Gupta | 70 | Nitin Gupta |
| 77 | ngupta@vflare.org | 71 | ngupta@vflare.org |
| @@ -24,7 +24,6 @@ CONTENTS: · 23 unmodified lines | |||
| 24 | 2.1 Basic Usage | 24 | 2.1 Basic Usage |
| 25 | 2.2 Attaching processes | 25 | 2.2 Attaching processes |
| 26 | 2.3 Mounting hierarchies by name | 26 | 2.3 Mounting hierarchies by name |
| 27 | 2.4 Notification API | ||
| 28 | 3. Kernel API | 27 | 3. Kernel API |
| 29 | 3.1 Overview | 28 | 3.1 Overview |
| 30 | 3.2 Synchronization | 29 | 3.2 Synchronization |
| @@ -472,25 +471,6 @@ you give a subsystem a name. · 441 unmodified lines | |||
| 472 | The name of the subsystem appears as part of the hierarchy description | 471 | The name of the subsystem appears as part of the hierarchy description |
| 473 | in /proc/mounts and /proc/<pid>/cgroups. | 472 | in /proc/mounts and /proc/<pid>/cgroups. |
| 474 | 473 | ||
| 475 | 2.4 Notification API | ||
| 476 | -------------------- | ||
| 477 | |||
| 478 | There is mechanism which allows to get notifications about changing | ||
| 479 | status of a cgroup. | ||
| 480 | |||
| 481 | To register a new notification handler you need to: | ||
| 482 | - create a file descriptor for event notification using eventfd(2); | ||
| 483 | - open a control file to be monitored (e.g. memory.usage_in_bytes); | ||
| 484 | - write "<event_fd> <control_fd> <args>" to cgroup.event_control. | ||
| 485 | Interpretation of args is defined by control file implementation; | ||
| 486 | |||
| 487 | eventfd will be woken up by control file implementation or when the | ||
| 488 | cgroup is removed. | ||
| 489 | |||
| 490 | To unregister a notification handler just close eventfd. | ||
| 491 | |||
| 492 | NOTE: Support of notifications should be implemented for the control | ||
| 493 | file. See documentation for the subsystem. | ||
| 494 | 474 | ||
| 495 | 3. Kernel API | 475 | 3. Kernel API |
| 496 | ============= | 476 | ============= |
| @@ -577,7 +577,7 @@ Each memcg's numa_stat file includes "total", "file", "anon" and "unevictable" · 576 unmodified lines | |||
| 577 | per-node page counts including "hierarchical_<counter>" which sums up all | 577 | per-node page counts including "hierarchical_<counter>" which sums up all |
| 578 | hierarchical children's values in addition to the memcg's own value. | 578 | hierarchical children's values in addition to the memcg's own value. |
| 579 | 579 | ||
| 580 | The ouput format of memory.numa_stat is: | 580 | The output format of memory.numa_stat is: |
| 581 | 581 | ||
| 582 | total=<total pages> N0=<node 0 pages> N1=<node 1 pages> ... | 582 | total=<total pages> N0=<node 0 pages> N1=<node 1 pages> ... |
| 583 | file=<total file pages> N0=<node 0 pages> N1=<node 1 pages> ... | 583 | file=<total file pages> N0=<node 0 pages> N1=<node 1 pages> ... |
| @@ -670,7 +670,7 @@ page tables. · 86 unmodified lines | |||
| 670 | 670 | ||
| 671 | 8.1 Interface | 671 | 8.1 Interface |
| 672 | 672 | ||
| 673 | This feature is disabled by default. It can be enabledi (and disabled again) by | 673 | This feature is disabled by default. It can be enabled (and disabled again) by |
| 674 | writing to memory.move_charge_at_immigrate of the destination cgroup. | 674 | writing to memory.move_charge_at_immigrate of the destination cgroup. |
| 675 | 675 | ||
| 676 | If you want to enable it: | 676 | If you want to enable it: |
| @@ -6,6 +6,8 @@ tag network packets with a class identifier (classid). · 5 unmodified lines | |||
| 6 | 6 | ||
| 7 | The Traffic Controller (tc) can be used to assign | 7 | The Traffic Controller (tc) can be used to assign |
| 8 | different priorities to packets from different cgroups. | 8 | different priorities to packets from different cgroups. |
| 9 | Also, Netfilter (iptables) can use this tag to perform | ||
| 10 | actions on such packets. | ||
| 9 | 11 | ||
| 10 | Creating a net_cls cgroups instance creates a net_cls.classid file. | 12 | Creating a net_cls cgroups instance creates a net_cls.classid file. |
| 11 | This net_cls.classid value is initialized to 0. | 13 | This net_cls.classid value is initialized to 0. |
| @@ -32,3 +34,6 @@ tc class add dev eth0 parent 10: classid 10:1 htb rate 40mbit · 20 unmodified lines | |||
| 32 | - creating traffic class 10:1 | 34 | - creating traffic class 10:1 |
| 33 | 35 | ||
| 34 | tc filter add dev eth0 parent 10: protocol ip prio 10 handle 1: cgroup | 36 | tc filter add dev eth0 parent 10: protocol ip prio 10 handle 1: cgroup |
| 37 | |||
| 38 | configuring iptables, basic example: | ||
| 39 | iptables -A OUTPUT -m cgroup ! --cgroup 0x100001 -j DROP | ||
| @@ -95,10 +95,10 @@ to work with it. · 94 unmodified lines | |||
| 95 | 95 | ||
| 96 | f. u64 res_counter_uncharge_until | 96 | f. u64 res_counter_uncharge_until |
| 97 | (struct res_counter *rc, struct res_counter *top, | 97 | (struct res_counter *rc, struct res_counter *top, |
| 98 | unsinged long val) | 98 | unsigned long val) |
| 99 | 99 | ||
| 100 | Almost same as res_cunter_uncharge() but propagation of uncharge | 100 | Almost same as res_counter_uncharge() but propagation of uncharge |
| 101 | stops when rc == top. This is useful when kill a res_coutner in | 101 | stops when rc == top. This is useful when kill a res_counter in |
| 102 | child cgroup. | 102 | child cgroup. |
| 103 | 103 | ||
| 104 | 2.1 Other accounting routines | 104 | 2.1 Other accounting routines |
| @@ -77,6 +77,11 @@ the operations defined in clk.h: · 76 unmodified lines | |||
| 77 | int (*set_parent)(struct clk_hw *hw, u8 index); | 77 | int (*set_parent)(struct clk_hw *hw, u8 index); |
| 78 | u8 (*get_parent)(struct clk_hw *hw); | 78 | u8 (*get_parent)(struct clk_hw *hw); |
| 79 | int (*set_rate)(struct clk_hw *hw, unsigned long); | 79 | int (*set_rate)(struct clk_hw *hw, unsigned long); |
| 80 | int (*set_rate_and_parent)(struct clk_hw *hw, | ||
| 81 | unsigned long rate, | ||
| 82 | unsigned long parent_rate, u8 index); | ||
| 83 | unsigned long (*recalc_accuracy)(struct clk_hw *hw, | ||
| 84 | unsigned long parent_accuracy); | ||
| 80 | void (*init)(struct clk_hw *hw); | 85 | void (*init)(struct clk_hw *hw); |
| 81 | }; | 86 | }; |
| 82 | 87 | ||
| @@ -202,6 +207,8 @@ optional or must be evaluated on a case-by-case basis. · 119 unmodified lines | |||
| 202 | .set_parent | | | n | y | n | | 207 | .set_parent | | | n | y | n | |
| 203 | .get_parent | | | n | y | n | | 208 | .get_parent | | | n | y | n | |
| 204 | | | | | | | | 209 | | | | | | | |
| 210 | .recalc_accuracy| | | | | | | ||
| 211 | | | | | | | | ||
| 205 | .init | | | | | | | 212 | .init | | | | | | |
| 206 | ----------------------------------------------------------- | 213 | ----------------------------------------------------------- |
| 207 | [1] either one of round_rate or determine_rate is required. | 214 | [1] either one of round_rate or determine_rate is required. |
| @@ -17,8 +17,8 @@ Introduction · 16 unmodified lines | |||
| 17 | Some CPUs support a functionality to raise the operating frequency of | 17 | Some CPUs support a functionality to raise the operating frequency of |
| 18 | some cores in a multi-core package if certain conditions apply, mostly | 18 | some cores in a multi-core package if certain conditions apply, mostly |
| 19 | if the whole chip is not fully utilized and below it's intended thermal | 19 | if the whole chip is not fully utilized and below it's intended thermal |
| 20 | budget. This is done without operating system control by a combination | 20 | budget. The decision about boost disable/enable is made either at hardware |
| 21 | of hardware and firmware. | 21 | (e.g. x86) or software (e.g ARM). |
| 22 | On Intel CPUs this is called "Turbo Boost", AMD calls it "Turbo-Core", | 22 | On Intel CPUs this is called "Turbo Boost", AMD calls it "Turbo-Core", |
| 23 | in technical documentation "Core performance boost". In Linux we use | 23 | in technical documentation "Core performance boost". In Linux we use |
| 24 | the term "boost" for convenience. | 24 | the term "boost" for convenience. |
| @@ -48,24 +48,24 @@ be desirable: · 23 unmodified lines | |||
| 48 | User controlled switch | 48 | User controlled switch |
| 49 | ---------------------- | 49 | ---------------------- |
| 50 | 50 | ||
| 51 | To allow the user to toggle the boosting functionality, the acpi-cpufreq | 51 | To allow the user to toggle the boosting functionality, the cpufreq core |
| 52 | driver exports a sysfs knob to disable it. There is a file: | 52 | driver exports a sysfs knob to enable or disable it. There is a file: |
| 53 | /sys/devices/system/cpu/cpufreq/boost | 53 | /sys/devices/system/cpu/cpufreq/boost |
| 54 | which can either read "0" (boosting disabled) or "1" (boosting enabled). | 54 | which can either read "0" (boosting disabled) or "1" (boosting enabled). |
| 55 | Reading the file is always supported, even if the processor does not | 55 | The file is exported only when cpufreq driver supports boosting. |
| 56 | support boosting. In this case the file will be read-only and always | 56 | Explicitly changing the permissions and writing to that file anyway will |
| 57 | reads as "0". Explicitly changing the permissions and writing to that | 57 | return EINVAL. |
| 58 | file anyway will return EINVAL. | ||
| 59 | 58 | ||
| 60 | On supported CPUs one can write either a "0" or a "1" into this file. | 59 | On supported CPUs one can write either a "0" or a "1" into this file. |
| 61 | This will either disable the boost functionality on all cores in the | 60 | This will either disable the boost functionality on all cores in the |
| 62 | whole system (0) or will allow the hardware to boost at will (1). | 61 | whole system (0) or will allow the software or hardware to boost at will |
| 62 | (1). | ||
| 63 | 63 | ||
| 64 | Writing a "1" does not explicitly boost the system, but just allows the | 64 | Writing a "1" does not explicitly boost the system, but just allows the |
| 65 | CPU (and the firmware) to boost at their discretion. Some implementations | 65 | CPU to boost at their discretion. Some implementations take external |
| 66 | take external factors like the chip's temperature into account, so | 66 | factors like the chip's temperature into account, so boosting once does |
| 67 | boosting once does not necessarily mean that it will occur every time | 67 | not necessarily mean that it will occur every time even using the exact |
| 68 | even using the exact same software setup. | 68 | same software setup. |
| 69 | 69 | ||
| 70 | 70 | ||
| 71 | AMD legacy cpb switch | 71 | AMD legacy cpb switch |
| @@ -0,0 +1,40 @@ | |||
| 1 | Intel P-state driver | ||
| 2 | -------------------- | ||
| 3 | |||
| 4 | This driver implements a scaling driver with an internal governor for | ||
| 5 | Intel Core processors. The driver follows the same model as the | ||
| 6 | Transmeta scaling driver (longrun.c) and implements the setpolicy() | ||
| 7 | instead of target(). Scaling drivers that implement setpolicy() are | ||
| 8 | assumed to implement internal governors by the cpufreq core. All the | ||
| 9 | logic for selecting the current P state is contained within the | ||
| 10 | driver; no external governor is used by the cpufreq core. | ||
| 11 | |||
| 12 | Intel SandyBridge+ processors are supported. | ||
| 13 | |||
| 14 | New sysfs files for controlling P state selection have been added to | ||
| 15 | /sys/devices/system/cpu/intel_pstate/ | ||
| 16 | |||
| 17 | max_perf_pct: limits the maximum P state that will be requested by | ||
| 18 | the driver stated as a percentage of the available performance. | ||
| 19 | |||
| 20 | min_perf_pct: limits the minimum P state that will be requested by | ||
| 21 | the driver stated as a percentage of the available performance. | ||
| 22 | |||
| 23 | no_turbo: limits the driver to selecting P states below the turbo | ||
| 24 | frequency range. | ||
| 25 | |||
| 26 | For contemporary Intel processors, the frequency is controlled by the | ||
| 27 | processor itself and the P-states exposed to software are related to | ||
| 28 | performance levels. The idea that frequency can be set to a single | ||
| 29 | frequency is fiction for Intel Core processors. Even if the scaling | ||
| 30 | driver selects a single P state the actual frequency the processor | ||
| 31 | will run at is selected by the processor itself. | ||
| 32 | |||
| 33 | New debugfs files have also been added to /sys/kernel/debug/pstate_snb/ | ||
| 34 | |||
| 35 | deadband | ||
| 36 | d_gain_pct | ||
| 37 | i_gain_pct | ||
| 38 | p_gain_pct | ||
| 39 | sample_rate_ms | ||
| 40 | setpoint | ||
| @@ -285,7 +285,7 @@ A: This is what you would need in your kernel code to receive notifications. · 284 unmodified lines | |||
| 285 | return NOTIFY_OK; | 285 | return NOTIFY_OK; |
| 286 | } | 286 | } |
| 287 | 287 | ||
| 288 | static struct notifier_block foobar_cpu_notifer = | 288 | static struct notifier_block foobar_cpu_notifier = |
| 289 | { | 289 | { |
| 290 | .notifier_call = foobar_cpu_callback, | 290 | .notifier_call = foobar_cpu_callback, |
| 291 | }; | 291 | }; |
| @@ -22,10 +22,12 @@ locations such as buffers like the printk buffer or the process table. · 21 unmodified lines | |||
| 22 | Retrieving a full system memory dump is also possible over the FireWire, | 22 | Retrieving a full system memory dump is also possible over the FireWire, |
| 23 | using data transfer rates in the order of 10MB/s or more. | 23 | using data transfer rates in the order of 10MB/s or more. |
| 24 | 24 | ||
| 25 | Memory access is currently limited to the low 4G of physical address | 25 | With most FireWire controllers, memory access is limited to the low 4 GB |
| 26 | space which can be a problem on IA64 machines where memory is located | 26 | of physical address space. This can be a problem on IA64 machines where |
| 27 | mostly above that limit, but it is rarely a problem on more common | 27 | memory is located mostly above that limit, but it is rarely a problem on |
| 28 | hardware such as hardware based on x86, x86-64 and PowerPC. | 28 | more common hardware such as x86, x86-64 and PowerPC. However, at least |
| 29 | Agere/LSI FW643e and FW643e2 controllers are known to support access to | ||
| 30 | physical addresses above 4 GB. | ||
| 29 | 31 | ||
| 30 | Together with a early initialization of the OHCI-1394 controller for debugging, | 32 | Together with a early initialization of the OHCI-1394 controller for debugging, |
| 31 | this facility proved most useful for examining long debugs logs in the printk | 33 | this facility proved most useful for examining long debugs logs in the printk |
| @@ -36,17 +38,11 @@ available (notebooks) or too slow for extensive debug information (like ACPI). · 4 unmodified lines | |||
| 36 | Drivers | 38 | Drivers |
| 37 | ------- | 39 | ------- |
| 38 | 40 | ||
| 39 | The ohci1394 driver in drivers/ieee1394 initializes the OHCI-1394 controllers | 41 | The firewire-ohci driver in drivers/firewire uses filtered physical |
| 40 | to a working state and enables physical DMA by default for all remote nodes. | ||
| 41 | This can be turned off by ohci1394's module parameter phys_dma=0. | ||
| 42 | |||
| 43 | The alternative firewire-ohci driver in drivers/firewire uses filtered physical | ||
| 44 | DMA by default, which is more secure but not suitable for remote debugging. | 42 | DMA by default, which is more secure but not suitable for remote debugging. |
| 45 | Compile the driver with CONFIG_FIREWIRE_OHCI_REMOTE_DMA (Kernel hacking menu: | 43 | Pass the remote_dma=1 parameter to the driver to get unfiltered physical DMA. |
| 46 | Remote debugging over FireWire with firewire-ohci) to get unfiltered physical | ||
| 47 | DMA. | ||
| 48 | 44 | ||
| 49 | Because ohci1394 and firewire-ohci depend on the PCI enumeration to be | 45 | Because the firewire-ohci driver depends on the PCI enumeration to be |
| 50 | completed, an initialization routine which runs pretty early has been | 46 | completed, an initialization routine which runs pretty early has been |
| 51 | implemented for x86. This routine runs long before console_init() can be | 47 | implemented for x86. This routine runs long before console_init() can be |
| 52 | called, i.e. before the printk buffer appears on the console. | 48 | called, i.e. before the printk buffer appears on the console. |
| @@ -64,7 +60,7 @@ be used to view the printk buffer of a remote machine, even with live update. · 11 unmodified lines | |||
| 64 | 60 | ||
| 65 | Bernhard Kaindl enhanced firescope to support accessing 64-bit machines | 61 | Bernhard Kaindl enhanced firescope to support accessing 64-bit machines |
| 66 | from 32-bit firescope and vice versa: | 62 | from 32-bit firescope and vice versa: |
| 67 | - http://halobates.de/firewire/firescope-0.2.2.tar.bz2 | 63 | - http://v3.sk/~lkundrak/firescope/ |
| 68 | 64 | ||
| 69 | and he implemented fast system dump (alpha version - read README.txt): | 65 | and he implemented fast system dump (alpha version - read README.txt): |
| 70 | - http://halobates.de/firewire/firedump-0.1.tar.bz2 | 66 | - http://halobates.de/firewire/firedump-0.1.tar.bz2 |
| @@ -92,11 +88,11 @@ Step-by-step instructions for using firescope with early OHCI initialization: · 21 unmodified lines | |||
| 92 | 88 | ||
| 93 | 1) Verify that your hardware is supported: | 89 | 1) Verify that your hardware is supported: |
| 94 | 90 | ||
| 95 | Load the ohci1394 or the fw-ohci module and check your kernel logs. | 91 | Load the firewire-ohci module and check your kernel logs. |
| 96 | You should see a line similar to | 92 | You should see a line similar to |
| 97 | 93 | ||
| 98 | ohci1394: fw-host0: OHCI-1394 1.1 (PCI): IRQ=[18] MMIO=[fe9ff800-fe9fffff] | 94 | firewire_ohci 0000:15:00.1: added OHCI v1.0 device as card 2, 4 IR + 4 IT |
| 99 | ... Max Packet=[2048] IR/IT contexts=[4/8] | 95 | ... contexts, quirks 0x11 |
| 100 | 96 | ||
| 101 | when loading the driver. If you have no supported controller, many PCI, | 97 | when loading the driver. If you have no supported controller, many PCI, |
| 102 | CardBus and even some Express cards which are fully compliant to OHCI-1394 | 98 | CardBus and even some Express cards which are fully compliant to OHCI-1394 |
| @@ -105,6 +101,9 @@ Step-by-step instructions for using firescope with early OHCI initialization: · 2 unmodified lines | |||
| 105 | compliant, they are based on TI PCILynx chips and require drivers for Win- | 101 | compliant, they are based on TI PCILynx chips and require drivers for Win- |
| 106 | dows operating systems. | 102 | dows operating systems. |
| 107 | 103 | ||
| 104 | The mentioned kernel log message contains ">4 GB phys DMA" in case of | ||
| 105 | OHCI-1394 controllers which support accesses above this limit. | ||
| 106 | |||
| 108 | 2) Establish a working FireWire cable connection: | 107 | 2) Establish a working FireWire cable connection: |
| 109 | 108 | ||
| 110 | Any FireWire cable, as long at it provides electrically and mechanically | 109 | Any FireWire cable, as long at it provides electrically and mechanically |
| @@ -113,20 +112,18 @@ Step-by-step instructions for using firescope with early OHCI initialization: · 2 unmodified lines | |||
| 113 | 112 | ||
| 114 | If an driver is running on both machines you should see a line like | 113 | If an driver is running on both machines you should see a line like |
| 115 | 114 | ||
| 116 | ieee1394: Node added: ID:BUS[0-01:1023] GUID[0090270001b84bba] | 115 | firewire_core 0000:15:00.1: created device fw1: GUID 00061b0020105917, S400 |
| 117 | 116 | ||
| 118 | on both machines in the kernel log when the cable is plugged in | 117 | on both machines in the kernel log when the cable is plugged in |
| 119 | and connects the two machines. | 118 | and connects the two machines. |
| 120 | 119 | ||
| 121 | 3) Test physical DMA using firescope: | 120 | 3) Test physical DMA using firescope: |
| 122 | 121 | ||
| 123 | On the debug host, | 122 | On the debug host, make sure that /dev/fw* is accessible, |
| 124 | - load the raw1394 module, | ||
| 125 | - make sure that /dev/raw1394 is accessible, | ||
| 126 | then start firescope: | 123 | then start firescope: |
| 127 | 124 | ||
| 128 | $ firescope | 125 | $ firescope |
| 129 | Port 0 (ohci1394) opened, 2 nodes detected | 126 | Port 0 (/dev/fw1) opened, 2 nodes detected |
| 130 | 127 | ||
| 131 | FireScope | 128 | FireScope |
| 132 | --------- | 129 | --------- |
| @@ -40,8 +40,11 @@ on hit count on entry. The policy aims to take different cache miss · 39 unmodified lines | |||
| 40 | costs into account and to adjust to varying load patterns automatically. | 40 | costs into account and to adjust to varying load patterns automatically. |
| 41 | 41 | ||
| 42 | Message and constructor argument pairs are: | 42 | Message and constructor argument pairs are: |
| 43 | 'sequential_threshold <#nr_sequential_ios>' and | 43 | 'sequential_threshold <#nr_sequential_ios>' |
| 44 | 'random_threshold <#nr_random_ios>'. | 44 | 'random_threshold <#nr_random_ios>' |
| 45 | 'read_promote_adjustment <value>' | ||
| 46 | 'write_promote_adjustment <value>' | ||
| 47 | 'discard_promote_adjustment <value>' | ||
| 45 | 48 | ||
| 46 | The sequential threshold indicates the number of contiguous I/Os | 49 | The sequential threshold indicates the number of contiguous I/Os |
| 47 | required before a stream is treated as sequential. The random threshold | 50 | required before a stream is treated as sequential. The random threshold |
| @@ -55,6 +58,15 @@ since spindles tend to have good bandwidth. The io_tracker counts · 7 unmodified lines | |||
| 55 | contiguous I/Os to try to spot when the io is in one of these sequential | 58 | contiguous I/Os to try to spot when the io is in one of these sequential |
| 56 | modes. | 59 | modes. |
| 57 | 60 | ||
| 61 | Internally the mq policy maintains a promotion threshold variable. If | ||
| 62 | the hit count of a block not in the cache goes above this threshold it | ||
| 63 | gets promoted to the cache. The read, write and discard promote adjustment | ||
| 64 | tunables allow you to tweak the promotion threshold by adding a small | ||
| 65 | value based on the io type. They default to 4, 8 and 1 respectively. | ||
| 66 | If you're trying to quickly warm a new cache device you may wish to | ||
| 67 | reduce these to encourage promotion. Remember to switch them back to | ||
| 68 | their defaults after the cache fills though. | ||
| 69 | |||
| 58 | cleaner | 70 | cleaner |
| 59 | ------- | 71 | ------- |
| 60 | 72 | ||
| @@ -217,36 +217,43 @@ the characteristics of a specific policy, always request it by name. · 216 unmodified lines | |||
| 217 | Status | 217 | Status |
| 218 | ------ | 218 | ------ |
| 219 | 219 | ||
| 220 | <#used metadata blocks>/<#total metadata blocks> <#read hits> <#read misses> | 220 | <metadata block size> <#used metadata blocks>/<#total metadata blocks> |
| 221 | <#write hits> <#write misses> <#demotions> <#promotions> <#blocks in cache> | 221 | <cache block size> <#used cache blocks>/<#total cache blocks> |
| 222 | <#dirty> <#features> <features>* <#core args> <core args>* <#policy args> | 222 | <#read hits> <#read misses> <#write hits> <#write misses> |
| 223 | <policy args>* | 223 | <#demotions> <#promotions> <#dirty> <#features> <features>* |
| 224 | 224 | <#core args> <core args>* <policy name> <#policy args> <policy args>* | |
| 225 | #used metadata blocks : Number of metadata blocks used | 225 | |
| 226 | #total metadata blocks : Total number of metadata blocks | 226 | metadata block size : Fixed block size for each metadata block in |
| 227 | #read hits : Number of times a READ bio has been mapped | 227 | sectors |
| 228 | #used metadata blocks : Number of metadata blocks used | ||
| 229 | #total metadata blocks : Total number of metadata blocks | ||
| 230 | cache block size : Configurable block size for the cache device | ||
| 231 | in sectors | ||
| 232 | #used cache blocks : Number of blocks resident in the cache | ||
| 233 | #total cache blocks : Total number of cache blocks | ||
| 234 | #read hits : Number of times a READ bio has been mapped | ||
| 228 | to the cache | 235 | to the cache |
| 229 | #read misses : Number of times a READ bio has been mapped | 236 | #read misses : Number of times a READ bio has been mapped |
| 230 | to the origin | 237 | to the origin |
| 231 | #write hits : Number of times a WRITE bio has been mapped | 238 | #write hits : Number of times a WRITE bio has been mapped |
| 232 | to the cache | 239 | to the cache |
| 233 | #write misses : Number of times a WRITE bio has been | 240 | #write misses : Number of times a WRITE bio has been |
| 234 | mapped to the origin | 241 | mapped to the origin |
| 235 | #demotions : Number of times a block has been removed | 242 | #demotions : Number of times a block has been removed |
| 236 | from the cache | 243 | from the cache |
| 237 | #promotions : Number of times a block has been moved to | 244 | #promotions : Number of times a block has been moved to |
| 238 | the cache | 245 | the cache |
| 239 | #blocks in cache : Number of blocks resident in the cache | 246 | #dirty : Number of blocks in the cache that differ |
| 240 | #dirty : Number of blocks in the cache that differ | ||
| 241 | from the origin | 247 | from the origin |
| 242 | #feature args : Number of feature args to follow | 248 | #feature args : Number of feature args to follow |
| 243 | feature args : 'writethrough' (optional) | 249 | feature args : 'writethrough' (optional) |
| 244 | #core args : Number of core arguments (must be even) | 250 | #core args : Number of core arguments (must be even) |
| 245 | core args : Key/value pairs for tuning the core | 251 | core args : Key/value pairs for tuning the core |
| 246 | e.g. migration_threshold | 252 | e.g. migration_threshold |
| 247 | #policy args : Number of policy arguments to follow (must be even) | 253 | policy name : Name of the policy |
| 248 | policy args : Key/value pairs | 254 | #policy args : Number of policy arguments to follow (must be even) |
| 249 | e.g. 'sequential_threshold 1024 | 255 | policy args : Key/value pairs |
| 256 | e.g. sequential_threshold | ||
| 250 | 257 | ||
| 251 | Messages | 258 | Messages |
| 252 | -------- | 259 | -------- |
| @@ -235,6 +235,8 @@ i) Constructor · 234 unmodified lines | |||
| 235 | read_only: Don't allow any changes to be made to the pool | 235 | read_only: Don't allow any changes to be made to the pool |
| 236 | metadata. | 236 | metadata. |
| 237 | 237 | ||
| 238 | error_if_no_space: Error IOs, instead of queueing, if no space. | ||
| 239 | |||
| 238 | Data block size must be between 64KB (128 sectors) and 1GB | 240 | Data block size must be between 64KB (128 sectors) and 1GB |
| 239 | (2097152 sectors) inclusive. | 241 | (2097152 sectors) inclusive. |
| 240 | 242 | ||
| @@ -276,6 +278,11 @@ ii) Status · 35 unmodified lines | |||
| 276 | contain the string 'Fail'. The userspace recovery tools | 278 | contain the string 'Fail'. The userspace recovery tools |
| 277 | should then be used. | 279 | should then be used. |
| 278 | 280 | ||
| 281 | error_if_no_space|queue_if_no_space | ||
| 282 | If the pool runs out of data or metadata space, the pool will | ||
| 283 | either queue or error the IO destined to the data device. The | ||
| 284 | default is to queue the IO until more space is added. | ||
| 285 | |||
| 279 | iii) Messages | 286 | iii) Messages |
| 280 | 287 | ||
| 281 | create_thin <dev id> | 288 | create_thin <dev id> |
| @@ -409,6 +409,7 @@ Your cooperation is appreciated. · 408 unmodified lines | |||
| 409 | 193 = /dev/d7s SPARC 7-segment display | 409 | 193 = /dev/d7s SPARC 7-segment display |
| 410 | 194 = /dev/zkshim Zero-Knowledge network shim control | 410 | 194 = /dev/zkshim Zero-Knowledge network shim control |
| 411 | 195 = /dev/elographics/e2201 Elographics touchscreen E271-2201 | 411 | 195 = /dev/elographics/e2201 Elographics touchscreen E271-2201 |
| 412 | 196 = /dev/vfio/vfio VFIO userspace driver interface | ||
| 412 | 198 = /dev/sexec Signed executable interface | 413 | 198 = /dev/sexec Signed executable interface |
| 413 | 199 = /dev/scanners/cuecat :CueCat barcode scanner | 414 | 199 = /dev/scanners/cuecat :CueCat barcode scanner |
| 414 | 200 = /dev/net/tun TAP/TUN network device | 415 | 200 = /dev/net/tun TAP/TUN network device |
| @@ -0,0 +1,39 @@ | |||
| 1 | |||
| 2 | Devicetree (DT) ABI | ||
| 3 | |||
| 4 | I. Regarding stable bindings/ABI, we quote from the 2013 ARM mini-summit | ||
| 5 | summary document: | ||
| 6 | |||
| 7 | "That still leaves the question of, what does a stable binding look | ||
| 8 | like? Certainly a stable binding means that a newer kernel will not | ||
| 9 | break on an older device tree, but that doesn't mean the binding is | ||
| 10 | frozen for all time. Grant said there are ways to change bindings that | ||
| 11 | don't result in breakage. For instance, if a new property is added, | ||
| 12 | then default to the previous behaviour if it is missing. If a binding | ||
| 13 | truly needs an incompatible change, then change the compatible string | ||
| 14 | at the same time. The driver can bind against both the old and the | ||
| 15 | new. These guidelines aren't new, but they desperately need to be | ||
| 16 | documented." | ||
| 17 | |||
| 18 | II. General binding rules | ||
| 19 | |||
| 20 | 1) Maintainers, don't let perfect be the enemy of good. Don't hold up a | ||
| 21 | binding because it isn't perfect. | ||
| 22 | |||
| 23 | 2) Use specific compatible strings so that if we need to add a feature (DMA) | ||
| 24 | in the future, we can create a new compatible string. See I. | ||
| 25 | |||
| 26 | 3) Bindings can be augmented, but the driver shouldn't break when given | ||
| 27 | the old binding. ie. add additional properties, but don't change the | ||
| 28 | meaning of an existing property. For drivers, default to the original | ||
| 29 | behaviour when a newly added property is missing. | ||
| 30 | |||
| 31 | 4) Don't submit bindings for staging or unstable. That will be decided by | ||
| 32 | the devicetree maintainers *after* discussion on the mailinglist. | ||
| 33 | |||
| 34 | III. Notes | ||
| 35 | |||
| 36 | 1) This document is intended as a general familiarization with the process as | ||
| 37 | decided at the 2013 Kernel Summit. When in doubt, the current word of the | ||
| 38 | devicetree maintainers overrules this document. In that situation, a patch | ||
| 39 | updating this document would be appreciated. | ||
| @@ -14,6 +14,9 @@ Required nodes: · 13 unmodified lines | |||
| 14 | - core-module: the root node to the Integrator platforms must have | 14 | - core-module: the root node to the Integrator platforms must have |
| 15 | a core-module with regs and the compatible string | 15 | a core-module with regs and the compatible string |
| 16 | "arm,core-module-integrator" | 16 | "arm,core-module-integrator" |
| 17 | - external-bus-interface: the root node to the Integrator platforms | ||
| 18 | must have an external bus interface with regs and the | ||
| 19 | compatible-string "arm,external-bus-interface" | ||
| 17 | 20 | ||
| 18 | Required properties for the core module: | 21 | Required properties for the core module: |
| 19 | - regs: the location and size of the core module registers, one | 22 | - regs: the location and size of the core module registers, one |
| @@ -48,6 +51,11 @@ Required nodes: · 28 unmodified lines | |||
| 48 | reg = <0x10000000 0x200>; | 51 | reg = <0x10000000 0x200>; |
| 49 | }; | 52 | }; |
| 50 | 53 | ||
| 54 | ebi@12000000 { | ||
| 55 | compatible = "arm,external-bus-interface"; | ||
| 56 | reg = <0x12000000 0x100>; | ||
| 57 | }; | ||
| 58 | |||
| 51 | syscon { | 59 | syscon { |
| 52 | compatible = "arm,integrator-ap-syscon"; | 60 | compatible = "arm,integrator-ap-syscon"; |
| 53 | reg = <0x11000000 0x100>; | 61 | reg = <0x11000000 0x100>; |
| @@ -2,6 +2,7 @@ · 1 unmodified line | |||
| 2 | 2 | ||
| 3 | Required properties: | 3 | Required properties: |
| 4 | - compatible: Should be "atmel,<chip>-aic" | 4 | - compatible: Should be "atmel,<chip>-aic" |
| 5 | <chip> can be "at91rm9200" or "sama5d3" | ||
| 5 | - interrupt-controller: Identifies the node as an interrupt controller. | 6 | - interrupt-controller: Identifies the node as an interrupt controller. |
| 6 | - interrupt-parent: For single AIC system, it is an empty property. | 7 | - interrupt-parent: For single AIC system, it is an empty property. |
| 7 | - #interrupt-cells: The number of cells to define the interrupts. It should be 3. | 8 | - #interrupt-cells: The number of cells to define the interrupts. It should be 3. |
| @@ -20,6 +20,10 @@ TC/TCLIB Timer required properties: · 19 unmodified lines | |||
| 20 | - interrupts: Should contain all interrupts for the TC block | 20 | - interrupts: Should contain all interrupts for the TC block |
| 21 | Note that you can specify several interrupt cells if the TC | 21 | Note that you can specify several interrupt cells if the TC |
| 22 | block has one interrupt per channel. | 22 | block has one interrupt per channel. |
| 23 | - clock-names: tuple listing input clock names. | ||
| 24 | Required elements: "t0_clk" | ||
| 25 | Optional elements: "t1_clk", "t2_clk" | ||
| 26 | - clocks: phandles to input clocks. | ||
| 23 | 27 | ||
| 24 | Examples: | 28 | Examples: |
| 25 | 29 | ||
| @@ -28,6 +32,8 @@ One interrupt per TC block: · 2 unmodified lines | |||
| 28 | compatible = "atmel,at91rm9200-tcb"; | 32 | compatible = "atmel,at91rm9200-tcb"; |
| 29 | reg = <0xfff7c000 0x100>; | 33 | reg = <0xfff7c000 0x100>; |
| 30 | interrupts = <18 4>; | 34 | interrupts = <18 4>; |
| 35 | clocks = <&tcb0_clk>; | ||
| 36 | clock-names = "t0_clk"; | ||
| 31 | }; | 37 | }; |
| 32 | 38 | ||
| 33 | One interrupt per TC channel in a TC block: | 39 | One interrupt per TC channel in a TC block: |
| @@ -35,6 +41,8 @@ One interrupt per TC channel in a TC block: · 1 unmodified line | |||
| 35 | compatible = "atmel,at91rm9200-tcb"; | 41 | compatible = "atmel,at91rm9200-tcb"; |
| 36 | reg = <0xfffdc000 0x100>; | 42 | reg = <0xfffdc000 0x100>; |
| 37 | interrupts = <26 4 27 4 28 4>; | 43 | interrupts = <26 4 27 4 28 4>; |
| 44 | clocks = <&tcb1_clk>; | ||
| 45 | clock-names = "t0_clk"; | ||
| 38 | }; | 46 | }; |
| 39 | 47 | ||
| 40 | RSTC Reset Controller required properties: | 48 | RSTC Reset Controller required properties: |
| @@ -50,7 +58,8 @@ Example: · 9 unmodified lines | |||
| 50 | }; | 58 | }; |
| 51 | 59 | ||
| 52 | RAMC SDRAM/DDR Controller required properties: | 60 | RAMC SDRAM/DDR Controller required properties: |
| 53 | - compatible: Should be "atmel,at91sam9260-sdramc", | 61 | - compatible: Should be "atmel,at91rm9200-sdramc", |
| 62 | "atmel,at91sam9260-sdramc", | ||
| 54 | "atmel,at91sam9g45-ddramc", | 63 | "atmel,at91sam9g45-ddramc", |
| 55 | - reg: Should contain registers location and length | 64 | - reg: Should contain registers location and length |
| 56 | For at91sam9263 and at91sam9g45 you must specify 2 entries. | 65 | For at91sam9263 and at91sam9g45 you must specify 2 entries. |
| @@ -8,13 +8,18 @@ Required properties: · 7 unmodified lines | |||
| 8 | - DEPRECATED: compatible : "bcm,kona-timer" | 8 | - DEPRECATED: compatible : "bcm,kona-timer" |
| 9 | - reg : Register range for the timer | 9 | - reg : Register range for the timer |
| 10 | - interrupts : interrupt for the timer | 10 | - interrupts : interrupt for the timer |
| 11 | - clocks: phandle + clock specifier pair of the external clock | ||
| 11 | - clock-frequency: frequency that the clock operates | 12 | - clock-frequency: frequency that the clock operates |
| 12 | 13 | ||
| 14 | Only one of clocks or clock-frequency should be specified. | ||
| 15 | |||
| 16 | Refer to clocks/clock-bindings.txt for generic clock consumer properties. | ||
| 17 | |||
| 13 | Example: | 18 | Example: |
| 14 | timer@35006000 { | 19 | timer@35006000 { |
| 15 | compatible = "brcm,kona-timer"; | 20 | compatible = "brcm,kona-timer"; |
| 16 | reg = <0x35006000 0x1000>; | 21 | reg = <0x35006000 0x1000>; |
| 17 | interrupts = <0x0 7 0x4>; | 22 | interrupts = <0x0 7 0x4>; |
| 18 | clock-frequency = <32768>; | 23 | clocks = <&hub_timer_clk>; |
| 19 | }; | 24 | }; |
| 20 | 25 | ||
| @@ -1,46 +0,0 @@ | |||
| 1 | * Texas Instruments Davinci NAND | ||
| 2 | |||
| 3 | This file provides information, what the device node for the | ||
| 4 | davinci nand interface contain. | ||
| 5 | |||
| 6 | Required properties: | ||
| 7 | - compatible: "ti,davinci-nand"; | ||
| 8 | - reg : contain 2 offset/length values: | ||
| 9 | - offset and length for the access window | ||
| 10 | - offset and length for accessing the aemif control registers | ||
| 11 | - ti,davinci-chipselect: Indicates on the davinci_nand driver which | ||
| 12 | chipselect is used for accessing the nand. | ||
| 13 | |||
| 14 | Recommended properties : | ||
| 15 | - ti,davinci-mask-ale: mask for ale | ||
| 16 | - ti,davinci-mask-cle: mask for cle | ||
| 17 | - ti,davinci-mask-chipsel: mask for chipselect | ||
| 18 | - ti,davinci-ecc-mode: ECC mode valid values for davinci driver: | ||
| 19 | - "none" | ||
| 20 | - "soft" | ||
| 21 | - "hw" | ||
| 22 | - ti,davinci-ecc-bits: used ECC bits, currently supported 1 or 4. | ||
| 23 | - ti,davinci-nand-buswidth: buswidth 8 or 16 | ||
| 24 | - ti,davinci-nand-use-bbt: use flash based bad block table support. | ||
| 25 | |||
| 26 | nand device bindings may contain additional sub-nodes describing | ||
| 27 | partitions of the address space. See partition.txt for more detail. | ||
| 28 | |||
| 29 | Example(da850 EVM ): | ||
| 30 | nand_cs3@62000000 { | ||
| 31 | compatible = "ti,davinci-nand"; | ||
| 32 | reg = <0x62000000 0x807ff | ||
| 33 | 0x68000000 0x8000>; | ||
| 34 | ti,davinci-chipselect = <1>; | ||
| 35 | ti,davinci-mask-ale = <0>; | ||
| 36 | ti,davinci-mask-cle = <0>; | ||
| 37 | ti,davinci-mask-chipsel = <0>; | ||
| 38 | ti,davinci-ecc-mode = "hw"; | ||
| 39 | ti,davinci-ecc-bits = <4>; | ||
| 40 | ti,davinci-nand-use-bbt; | ||
| 41 | |||
| 42 | partition@180000 { | ||
| 43 | label = "ubifs"; | ||
| 44 | reg = <0x180000 0x7e80000>; | ||
| 45 | }; | ||
| 46 | }; | ||
| @@ -0,0 +1,20 @@ | |||
| 1 | Trusted Foundations | ||
| 2 | ------------------- | ||
| 3 | |||
| 4 | Boards that use the Trusted Foundations secure monitor can signal its | ||
| 5 | presence by declaring a node compatible with "tlm,trusted-foundations" | ||
| 6 | under the /firmware/ node | ||
| 7 | |||
| 8 | Required properties: | ||
| 9 | - compatible: "tlm,trusted-foundations" | ||
| 10 | - tlm,version-major: major version number of Trusted Foundations firmware | ||
| 11 | - tlm,version-minor: minor version number of Trusted Foundations firmware | ||
| 12 | |||
| 13 | Example: | ||
| 14 | firmware { | ||
| 15 | trusted-foundations { | ||
| 16 | compatible = "tlm,trusted-foundations"; | ||
| 17 | tlm,version-major = <2>; | ||
| 18 | tlm,version-minor = <8>; | ||
| 19 | }; | ||
| 20 | }; | ||
| @@ -11,6 +11,7 @@ have PPIs or SGIs. · 10 unmodified lines | |||
| 11 | Main node required properties: | 11 | Main node required properties: |
| 12 | 12 | ||
| 13 | - compatible : should be one of: | 13 | - compatible : should be one of: |
| 14 | "arm,gic-400" | ||
| 14 | "arm,cortex-a15-gic" | 15 | "arm,cortex-a15-gic" |
| 15 | "arm,cortex-a9-gic" | 16 | "arm,cortex-a9-gic" |
| 16 | "arm,cortex-a7-gic" | 17 | "arm,cortex-a7-gic" |
| @@ -0,0 +1,32 @@ | |||
| 1 | Hisilicon Platforms Device Tree Bindings | ||
| 2 | ---------------------------------------------------- | ||
| 3 | |||
| 4 | Hi4511 Board | ||
| 5 | Required root node properties: | ||
| 6 | - compatible = "hisilicon,hi3620-hi4511"; | ||
| 7 | |||
| 8 | Hisilicon system controller | ||
| 9 | |||
| 10 | Required properties: | ||
| 11 | - compatible : "hisilicon,sysctrl" | ||
| 12 | - reg : Register address and size | ||
| 13 | |||
| 14 | Optional properties: | ||
| 15 | - smp-offset : offset in sysctrl for notifying slave cpu booting | ||
| 16 | cpu 1, reg; | ||
| 17 | cpu 2, reg + 0x4; | ||
| 18 | cpu 3, reg + 0x8; | ||
| 19 | If reg value is not zero, cpun exit wfi and go | ||
| 20 | - resume-offset : offset in sysctrl for notifying cpu0 when resume | ||
| 21 | - reboot-offset : offset in sysctrl for system reboot | ||
| 22 | |||
| 23 | Example: | ||
| 24 | |||
| 25 | /* for Hi3620 */ | ||
| 26 | sysctrl: system-controller@fc802000 { | ||
| 27 | compatible = "hisilicon,sysctrl"; | ||
| 28 | reg = <0xfc802000 0x1000>; | ||
| 29 | smp-offset = <0x31c>; | ||
| 30 | resume-offset = <0x308>; | ||
| 31 | reboot-offset = <0x4>; | ||
| 32 | }; | ||
| @@ -7,20 +7,21 @@ The ARM L2 cache representation in the device tree should be done as follows: · 6 unmodified lines | |||
| 7 | Required properties: | 7 | Required properties: |
| 8 | 8 | ||
| 9 | - compatible : should be one of: | 9 | - compatible : should be one of: |
| 10 | "arm,pl310-cache" | 10 | "arm,pl310-cache" |
| 11 | "arm,l220-cache" | 11 | "arm,l220-cache" |
| 12 | "arm,l210-cache" | 12 | "arm,l210-cache" |
| 13 | "marvell,aurora-system-cache": Marvell Controller designed to be | 13 | "bcm,bcm11351-a2-pl310-cache": DEPRECATED by "brcm,bcm11351-a2-pl310-cache" |
| 14 | "brcm,bcm11351-a2-pl310-cache": For Broadcom bcm11351 chipset where an | ||
| 15 | offset needs to be added to the address before passing down to the L2 | ||
| 16 | cache controller | ||
| 17 | "marvell,aurora-system-cache": Marvell Controller designed to be | ||
| 14 | compatible with the ARM one, with system cache mode (meaning | 18 | compatible with the ARM one, with system cache mode (meaning |
| 15 | maintenance operations on L1 are broadcasted to the L2 and L2 | 19 | maintenance operations on L1 are broadcasted to the L2 and L2 |
| 16 | performs the same operation). | 20 | performs the same operation). |
| 17 | "marvell,"aurora-outer-cache: Marvell Controller designed to be | 21 | "marvell,aurora-outer-cache": Marvell Controller designed to be |
| 18 | compatible with the ARM one with outer cache mode. | 22 | compatible with the ARM one with outer cache mode. |
| 19 | "brcm,bcm11351-a2-pl310-cache": For Broadcom bcm11351 chipset where an | 23 | "marvell,tauros3-cache": Marvell Tauros3 cache controller, compatible |
| 20 | offset needs to be added to the address before passing down to the L2 | 24 | with arm,pl310-cache controller. |
| 21 | cache controller | ||
| 22 | "bcm,bcm11351-a2-pl310-cache": DEPRECATED by | ||
| 23 | "brcm,bcm11351-a2-pl310-cache" | ||
| 24 | - cache-unified : Specifies the cache is a unified cache. | 25 | - cache-unified : Specifies the cache is a unified cache. |
| 25 | - cache-level : Should be set to 2 for a level 2 cache. | 26 | - cache-level : Should be set to 2 for a level 2 cache. |
| 26 | - reg : Physical base address and size of cache controller's memory mapped | 27 | - reg : Physical base address and size of cache controller's memory mapped |
| @@ -0,0 +1,24 @@ | |||
| 1 | Marvell Berlin SoC Family Device Tree Bindings | ||
| 2 | --------------------------------------------------------------- | ||
| 3 | |||
| 4 | Boards with a SoC of the Marvell Berlin family, e.g. Armada 1500 | ||
| 5 | shall have the following properties: | ||
| 6 | |||
| 7 | * Required root node properties: | ||
| 8 | compatible: must contain "marvell,berlin" | ||
| 9 | |||
| 10 | In addition, the above compatible shall be extended with the specific | ||
| 11 | SoC and board used. Currently known SoC compatibles are: | ||
| 12 | "marvell,berlin2" for Marvell Armada 1500 (BG2, 88DE3100), | ||
| 13 | "marvell,berlin2cd" for Marvell Armada 1500-mini (BG2CD, 88DE3005) | ||
| 14 | "marvell,berlin2ct" for Marvell Armada ? (BG2CT, 88DE????) | ||
| 15 | "marvell,berlin3" for Marvell Armada ? (BG3, 88DE????) | ||
| 16 | |||
| 17 | * Example: | ||
| 18 | |||
| 19 | / { | ||
| 20 | model = "Sony NSZ-GS7"; | ||
| 21 | compatible = "sony,nsz-gs7", "marvell,berlin2", "marvell,berlin"; | ||
| 22 | |||
| 23 | ... | ||
| 24 | } | ||
| @@ -0,0 +1,12 @@ | |||
| 1 | MOXA ART device tree bindings | ||
| 2 | |||
| 3 | Boards with the MOXA ART SoC shall have the following properties: | ||
| 4 | |||
| 5 | Required root node property: | ||
| 6 | |||
| 7 | compatible = "moxa,moxart"; | ||
| 8 | |||
| 9 | Boards: | ||
| 10 | |||
| 11 | - UC-7112-LX: embedded computer | ||
| 12 | compatible = "moxa,moxart-uc-7112-lx", "moxa,moxart" | ||
| @@ -31,6 +31,59 @@ spinlock@1 { · 30 unmodified lines | |||
| 31 | ti,hwmods = "spinlock"; | 31 | ti,hwmods = "spinlock"; |
| 32 | }; | 32 | }; |
| 33 | 33 | ||
| 34 | SoC Type (optional): | ||
| 35 | |||
| 36 | - General Purpose devices | ||
| 37 | compatible = "ti,gp" | ||
| 38 | - High Security devices | ||
| 39 | compatible = "ti,hs" | ||
| 40 | |||
| 41 | SoC Families: | ||
| 42 | |||
| 43 | - OMAP2 generic - defaults to OMAP2420 | ||
| 44 | compatible = "ti,omap2" | ||
| 45 | - OMAP3 generic - defaults to OMAP3430 | ||
| 46 | compatible = "ti,omap3" | ||
| 47 | - OMAP4 generic - defaults to OMAP4430 | ||
| 48 | compatible = "ti,omap4" | ||
| 49 | - OMAP5 generic - defaults to OMAP5430 | ||
| 50 | compatible = "ti,omap5" | ||
| 51 | - DRA7 generic - defaults to DRA742 | ||
| 52 | compatible = "ti,dra7" | ||
| 53 | - AM43x generic - defaults to AM4372 | ||
| 54 | compatible = "ti,am43" | ||
| 55 | |||
| 56 | SoCs: | ||
| 57 | |||
| 58 | - OMAP2420 | ||
| 59 | compatible = "ti,omap2420", "ti,omap2" | ||
| 60 | - OMAP2430 | ||
| 61 | compatible = "ti,omap2430", "ti,omap2" | ||
| 62 | |||
| 63 | - OMAP3430 | ||
| 64 | compatible = "ti,omap3430", "ti,omap3" | ||
| 65 | - AM3517 | ||
| 66 | compatible = "ti,am3517", "ti,omap3" | ||
| 67 | - OMAP3630 | ||
| 68 | compatible = "ti,omap36xx", "ti,omap3" | ||
| 69 | - AM33xx | ||
| 70 | compatible = "ti,am33xx", "ti,omap3" | ||
| 71 | |||
| 72 | - OMAP4430 | ||
| 73 | compatible = "ti,omap4430", "ti,omap4" | ||
| 74 | - OMAP4460 | ||
| 75 | compatible = "ti,omap4460", "ti,omap4" | ||
| 76 | |||
| 77 | - OMAP5430 | ||
| 78 | compatible = "ti,omap5430", "ti,omap5" | ||
| 79 | - OMAP5432 | ||
| 80 | compatible = "ti,omap5432", "ti,omap5" | ||
| 81 | |||
| 82 | - DRA742 | ||
| 83 | compatible = "ti,dra7xx", "ti,dra7" | ||
| 84 | |||
| 85 | - AM4372 | ||
| 86 | compatible = "ti,am4372", "ti,am43" | ||
| 34 | 87 | ||
| 35 | Boards: | 88 | Boards: |
| 36 | 89 | ||
| @@ -1,7 +1,12 @@ | |||
| 1 | SAMSUNG S5P/Exynos SoC series System Registers (SYSREG) | 1 | SAMSUNG S5P/Exynos SoC series System Registers (SYSREG) |
| 2 | 2 | ||
| 3 | Properties: | 3 | Properties: |
| 4 | - name : should be 'sysreg'; | ||
| 5 | - compatible : should contain "samsung,<chip name>-sysreg", "syscon"; | 4 | - compatible : should contain "samsung,<chip name>-sysreg", "syscon"; |
| 6 | For Exynos4 SoC series it should be "samsung,exynos4-sysreg", "syscon"; | 5 | For Exynos4 SoC series it should be "samsung,exynos4-sysreg", "syscon"; |
| 7 | - reg : offset and length of the register set. | 6 | - reg : offset and length of the register set. |
| 7 | |||
| 8 | Example: | ||
| 9 | syscon@10010000 { | ||
| 10 | compatible = "samsung,exynos4-sysreg", "syscon"; | ||
| 11 | reg = <0x10010000 0x400>; | ||
| 12 | }; | ||
| @@ -32,3 +32,8 @@ board-specific compatible values: · 31 unmodified lines | |||
| 32 | nvidia,whistler | 32 | nvidia,whistler |
| 33 | toradex,colibri_t20-512 | 33 | toradex,colibri_t20-512 |
| 34 | toradex,iris | 34 | toradex,iris |
| 35 | |||
| 36 | Trusted Foundations | ||
| 37 | ------------------------------------------- | ||
| 38 | Tegra supports the Trusted Foundation secure monitor. See the | ||
| 39 | "tlm,trusted-foundations" binding's documentation for more details. | ||
| @@ -9,6 +9,7 @@ Required properties: · 8 unmodified lines | |||
| 9 | - compatible : Should contain "nvidia,tegra<chip>-pmc". | 9 | - compatible : Should contain "nvidia,tegra<chip>-pmc". |
| 10 | - reg : Offset and length of the register set for the device | 10 | - reg : Offset and length of the register set for the device |
| 11 | - clocks : Must contain an entry for each entry in clock-names. | 11 | - clocks : Must contain an entry for each entry in clock-names. |
| 12 | See ../clocks/clock-bindings.txt for details. | ||
| 12 | - clock-names : Must include the following entries: | 13 | - clock-names : Must include the following entries: |
| 13 | "pclk" (The Tegra clock of that name), | 14 | "pclk" (The Tegra clock of that name), |
| 14 | "clk32k_in" (The 32KHz clock input to Tegra). | 15 | "clk32k_in" (The 32KHz clock input to Tegra). |
| @@ -29,3 +29,8 @@ pic: pic@14000000 { · 28 unmodified lines | |||
| 29 | clear-mask = <0xffffffff>; | 29 | clear-mask = <0xffffffff>; |
| 30 | valid-mask = <0x003fffff>; | 30 | valid-mask = <0x003fffff>; |
| 31 | }; | 31 | }; |
| 32 | |||
| 33 | Optional properties: | ||
| 34 | - interrupts: if the FPGA IRQ controller is cascaded, i.e. if its IRQ | ||
| 35 | output is simply connected to the input of another IRQ controller, | ||
| 36 | then the parent IRQ shall be specified in this property. | ||
| @@ -1,7 +1,7 @@ | |||
| 1 | * Marvell Orion SATA | 1 | * Marvell Orion SATA |
| 2 | 2 | ||
| 3 | Required Properties: | 3 | Required Properties: |
| 4 | - compatibility : "marvell,orion-sata" | 4 | - compatibility : "marvell,orion-sata" or "marvell,armada-370-sata" |
| 5 | - reg : Address range of controller | 5 | - reg : Address range of controller |
| 6 | - interrupts : Interrupt controller is using | 6 | - interrupts : Interrupt controller is using |
| 7 | - nr-ports : Number of SATA ports in use. | 7 | - nr-ports : Number of SATA ports in use. |
| @@ -0,0 +1,18 @@ | |||
| 1 | * Renesas R-Car SATA | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible : should contain one of the following: | ||
| 5 | - "renesas,sata-r8a7779" for R-Car H1 | ||
| 6 | - "renesas,sata-r8a7790" for R-Car H2 | ||
| 7 | - "renesas,sata-r8a7791" for R-Car M2 | ||
| 8 | - reg : address and length of the SATA registers; | ||
| 9 | - interrupts : must consist of one interrupt specifier. | ||
| 10 | |||
| 11 | Example: | ||
| 12 | |||
| 13 | sata: sata@fc600000 { | ||
| 14 | compatible = "renesas,sata-r8a7779"; | ||
| 15 | reg = <0xfc600000 0x2000>; | ||
| 16 | interrupt-parent = <&gic>; | ||
| 17 | interrupts = <0 100 IRQ_TYPE_LEVEL_HIGH>; | ||
| 18 | }; | ||
| @@ -0,0 +1,339 @@ | |||
| 1 | Device Tree Clock bindings for arch-at91 | ||
| 2 | |||
| 3 | This binding uses the common clock binding[1]. | ||
| 4 | |||
| 5 | [1] Documentation/devicetree/bindings/clock/clock-bindings.txt | ||
| 6 | |||
| 7 | Required properties: | ||
| 8 | - compatible : shall be one of the following: | ||
| 9 | "atmel,at91rm9200-pmc" or | ||
| 10 | "atmel,at91sam9g45-pmc" or | ||
| 11 | "atmel,at91sam9n12-pmc" or | ||
| 12 | "atmel,at91sam9x5-pmc" or | ||
| 13 | "atmel,sama5d3-pmc": | ||
| 14 | at91 PMC (Power Management Controller) | ||
| 15 | All at91 specific clocks (clocks defined below) must be child | ||
| 16 | node of the PMC node. | ||
| 17 | |||
| 18 | "atmel,at91rm9200-clk-main": | ||
| 19 | at91 main oscillator | ||
| 20 | |||
| 21 | "atmel,at91rm9200-clk-master" or | ||
| 22 | "atmel,at91sam9x5-clk-master": | ||
| 23 | at91 master clock | ||
| 24 | |||
| 25 | "atmel,at91sam9x5-clk-peripheral" or | ||
| 26 | "atmel,at91rm9200-clk-peripheral": | ||
| 27 | at91 peripheral clocks | ||
| 28 | |||
| 29 | "atmel,at91rm9200-clk-pll" or | ||
| 30 | "atmel,at91sam9g45-clk-pll" or | ||
| 31 | "atmel,at91sam9g20-clk-pllb" or | ||
| 32 | "atmel,sama5d3-clk-pll": | ||
| 33 | at91 pll clocks | ||
| 34 | |||
| 35 | "atmel,at91sam9x5-clk-plldiv": | ||
| 36 | at91 plla divisor | ||
| 37 | |||
| 38 | "atmel,at91rm9200-clk-programmable" or | ||
| 39 | "atmel,at91sam9g45-clk-programmable" or | ||
| 40 | "atmel,at91sam9x5-clk-programmable": | ||
| 41 | at91 programmable clocks | ||
| 42 | |||
| 43 | "atmel,at91sam9x5-clk-smd": | ||
| 44 | at91 SMD (Soft Modem) clock | ||
| 45 | |||
| 46 | "atmel,at91rm9200-clk-system": | ||
| 47 | at91 system clocks | ||
| 48 | |||
| 49 | "atmel,at91rm9200-clk-usb" or | ||
| 50 | "atmel,at91sam9x5-clk-usb" or | ||
| 51 | "atmel,at91sam9n12-clk-usb": | ||
| 52 | at91 usb clock | ||
| 53 | |||
| 54 | "atmel,at91sam9x5-clk-utmi": | ||
| 55 | at91 utmi clock | ||
| 56 | |||
| 57 | Required properties for PMC node: | ||
| 58 | - reg : defines the IO memory reserved for the PMC. | ||
| 59 | - #size-cells : shall be 0 (reg is used to encode clk id). | ||
| 60 | - #address-cells : shall be 1 (reg is used to encode clk id). | ||
| 61 | - interrupts : shall be set to PMC interrupt line. | ||
| 62 | - interrupt-controller : tell that the PMC is an interrupt controller. | ||
| 63 | - #interrupt-cells : must be set to 1. The first cell encodes the interrupt id, | ||
| 64 | and reflect the bit position in the PMC_ER/DR/SR registers. | ||
| 65 | You can use the dt macros defined in dt-bindings/clk/at91.h. | ||
| 66 | 0 (AT91_PMC_MOSCS) -> main oscillator ready | ||
| 67 | 1 (AT91_PMC_LOCKA) -> PLL A ready | ||
| 68 | 2 (AT91_PMC_LOCKB) -> PLL B ready | ||
| 69 | 3 (AT91_PMC_MCKRDY) -> master clock ready | ||
| 70 | 6 (AT91_PMC_LOCKU) -> UTMI PLL clock ready | ||
| 71 | 8 .. 15 (AT91_PMC_PCKRDY(id)) -> programmable clock ready | ||
| 72 | 16 (AT91_PMC_MOSCSELS) -> main oscillator selected | ||
| 73 | 17 (AT91_PMC_MOSCRCS) -> RC main oscillator stabilized | ||
| 74 | 18 (AT91_PMC_CFDEV) -> clock failure detected | ||
| 75 | |||
| 76 | For example: | ||
| 77 | pmc: pmc@fffffc00 { | ||
| 78 | compatible = "atmel,sama5d3-pmc"; | ||
| 79 | interrupts = <1 4 7>; | ||
| 80 | interrupt-controller; | ||
| 81 | #interrupt-cells = <2>; | ||
| 82 | #size-cells = <0>; | ||
| 83 | #address-cells = <1>; | ||
| 84 | |||
| 85 | /* put at91 clocks here */ | ||
| 86 | }; | ||
| 87 | |||
| 88 | Required properties for main clock: | ||
| 89 | - interrupt-parent : must reference the PMC node. | ||
| 90 | - interrupts : shall be set to "<0>". | ||
| 91 | - #clock-cells : from common clock binding; shall be set to 0. | ||
| 92 | - clocks (optional if clock-frequency is provided) : shall be the slow clock | ||
| 93 | phandle. This clock is used to calculate the main clock rate if | ||
| 94 | "clock-frequency" is not provided. | ||
| 95 | - clock-frequency : the main oscillator frequency.Prefer the use of | ||
| 96 | "clock-frequency" over automatic clock rate calculation. | ||
| 97 | |||
| 98 | For example: | ||
| 99 | main: mainck { | ||
| 100 | compatible = "atmel,at91rm9200-clk-main"; | ||
| 101 | interrupt-parent = <&pmc>; | ||
| 102 | interrupts = <0>; | ||
| 103 | #clock-cells = <0>; | ||
| 104 | clocks = <&ck32k>; | ||
| 105 | clock-frequency = <18432000>; | ||
| 106 | }; | ||
| 107 | |||
| 108 | Required properties for master clock: | ||
| 109 | - interrupt-parent : must reference the PMC node. | ||
| 110 | - interrupts : shall be set to "<3>". | ||
| 111 | - #clock-cells : from common clock binding; shall be set to 0. | ||
| 112 | - clocks : shall be the master clock sources (see atmel datasheet) phandles. | ||
| 113 | e.g. "<&ck32k>, <&main>, <&plla>, <&pllb>". | ||
| 114 | - atmel,clk-output-range : minimum and maximum clock frequency (two u32 | ||
| 115 | fields). | ||
| 116 | e.g. output = <0 133000000>; <=> 0 to 133MHz. | ||
| 117 | - atmel,clk-divisors : master clock divisors table (four u32 fields). | ||
| 118 | 0 <=> reserved value. | ||
| 119 | e.g. divisors = <1 2 4 6>; | ||
| 120 | - atmel,master-clk-have-div3-pres : some SoC use the reserved value 7 in the | ||
| 121 | PRES field as CLOCK_DIV3 (e.g sam9x5). | ||
| 122 | |||
| 123 | For example: | ||
| 124 | mck: mck { | ||
| 125 | compatible = "atmel,at91rm9200-clk-master"; | ||
| 126 | interrupt-parent = <&pmc>; | ||
| 127 | interrupts = <3>; | ||
| 128 | #clock-cells = <0>; | ||
| 129 | atmel,clk-output-range = <0 133000000>; | ||
| 130 | atmel,clk-divisors = <1 2 4 0>; | ||
| 131 | }; | ||
| 132 | |||
| 133 | Required properties for peripheral clocks: | ||
| 134 | - #size-cells : shall be 0 (reg is used to encode clk id). | ||
| 135 | - #address-cells : shall be 1 (reg is used to encode clk id). | ||
| 136 | - clocks : shall be the master clock phandle. | ||
| 137 | e.g. clocks = <&mck>; | ||
| 138 | - name: device tree node describing a specific system clock. | ||
| 139 | * #clock-cells : from common clock binding; shall be set to 0. | ||
| 140 | * reg: peripheral id. See Atmel's datasheets to get a full | ||
| 141 | list of peripheral ids. | ||
| 142 | * atmel,clk-output-range : minimum and maximum clock frequency | ||
| 143 | (two u32 fields). Only valid on at91sam9x5-clk-peripheral | ||
| 144 | compatible IPs. | ||
| 145 | |||
| 146 | For example: | ||
| 147 | periph: periphck { | ||
| 148 | compatible = "atmel,at91sam9x5-clk-peripheral"; | ||
| 149 | #size-cells = <0>; | ||
| 150 | #address-cells = <1>; | ||
| 151 | clocks = <&mck>; | ||
| 152 | |||
| 153 | ssc0_clk { | ||
| 154 | #clock-cells = <0>; | ||
| 155 | reg = <2>; | ||
| 156 | atmel,clk-output-range = <0 133000000>; | ||
| 157 | }; | ||
| 158 | |||
| 159 | usart0_clk { | ||
| 160 | #clock-cells = <0>; | ||
| 161 | reg = <3>; | ||
| 162 | atmel,clk-output-range = <0 66000000>; | ||
| 163 | }; | ||
| 164 | }; | ||
| 165 | |||
| 166 | |||
| 167 | Required properties for pll clocks: | ||
| 168 | - interrupt-parent : must reference the PMC node. | ||
| 169 | - interrupts : shall be set to "<1>". | ||
| 170 | - #clock-cells : from common clock binding; shall be set to 0. | ||
| 171 | - clocks : shall be the main clock phandle. | ||
| 172 | - reg : pll id. | ||
| 173 | 0 -> PLL A | ||
| 174 | 1 -> PLL B | ||
| 175 | - atmel,clk-input-range : minimum and maximum source clock frequency (two u32 | ||
| 176 | fields). | ||
| 177 | e.g. input = <1 32000000>; <=> 1 to 32MHz. | ||
| 178 | - #atmel,pll-clk-output-range-cells : number of cells reserved for pll output | ||
| 179 | range description. Sould be set to 2, 3 | ||
| 180 | or 4. | ||
| 181 | * 1st and 2nd cells represent the frequency range (min-max). | ||
| 182 | * 3rd cell is optional and represents the OUT field value for the given | ||
| 183 | range. | ||
| 184 | * 4th cell is optional and represents the ICPLL field (PLLICPR | ||
| 185 | register) | ||
| 186 | - atmel,pll-clk-output-ranges : pll output frequency ranges + optional parameter | ||
| 187 | depending on #atmel,pll-output-range-cells | ||
| 188 | property value. | ||
| 189 | |||
| 190 | For example: | ||
| 191 | plla: pllack { | ||
| 192 | compatible = "atmel,at91sam9g45-clk-pll"; | ||
| 193 | interrupt-parent = <&pmc>; | ||
| 194 | interrupts = <1>; | ||
| 195 | #clock-cells = <0>; | ||
| 196 | clocks = <&main>; | ||
| 197 | reg = <0>; | ||
| 198 | atmel,clk-input-range = <2000000 32000000>; | ||
| 199 | #atmel,pll-clk-output-range-cells = <4>; | ||
| 200 | atmel,pll-clk-output-ranges = <74500000 800000000 0 0 | ||
| 201 | 69500000 750000000 1 0 | ||
| 202 | 64500000 700000000 2 0 | ||
| 203 | 59500000 650000000 3 0 | ||
| 204 | 54500000 600000000 0 1 | ||
| 205 | 49500000 550000000 1 1 | ||
| 206 | 44500000 500000000 2 1 | ||
| 207 | 40000000 450000000 3 1>; | ||
| 208 | }; | ||
| 209 | |||
| 210 | Required properties for plldiv clocks (plldiv = pll / 2): | ||
| 211 | - #clock-cells : from common clock binding; shall be set to 0. | ||
| 212 | - clocks : shall be the plla clock phandle. | ||
| 213 | |||
| 214 | The pll divisor is equal to 2 and cannot be changed. | ||
| 215 | |||
| 216 | For example: | ||
| 217 | plladiv: plladivck { | ||
| 218 | compatible = "atmel,at91sam9x5-clk-plldiv"; | ||
| 219 | #clock-cells = <0>; | ||
| 220 | clocks = <&plla>; | ||
| 221 | }; | ||
| 222 | |||
| 223 | Required properties for programmable clocks: | ||
| 224 | - interrupt-parent : must reference the PMC node. | ||
| 225 | - #size-cells : shall be 0 (reg is used to encode clk id). | ||
| 226 | - #address-cells : shall be 1 (reg is used to encode clk id). | ||
| 227 | - clocks : shall be the programmable clock source phandles. | ||
| 228 | e.g. clocks = <&clk32k>, <&main>, <&plla>, <&pllb>; | ||
| 229 | - name: device tree node describing a specific prog clock. | ||
| 230 | * #clock-cells : from common clock binding; shall be set to 0. | ||
| 231 | * reg : programmable clock id (register offset from PCKx | ||
| 232 | register). | ||
| 233 | * interrupts : shall be set to "<(8 + id)>". | ||
| 234 | |||
| 235 | For example: | ||
| 236 | prog: progck { | ||
| 237 | compatible = "atmel,at91sam9g45-clk-programmable"; | ||
| 238 | #size-cells = <0>; | ||
| 239 | #address-cells = <1>; | ||
| 240 | interrupt-parent = <&pmc>; | ||
| 241 | clocks = <&clk32k>, <&main>, <&plladiv>, <&utmi>, <&mck>; | ||
| 242 | |||
| 243 | prog0 { | ||
| 244 | #clock-cells = <0>; | ||
| 245 | reg = <0>; | ||
| 246 | interrupts = <8>; | ||
| 247 | }; | ||
| 248 | |||
| 249 | prog1 { | ||
| 250 | #clock-cells = <0>; | ||
| 251 | reg = <1>; | ||
| 252 | interrupts = <9>; | ||
| 253 | }; | ||
| 254 | }; | ||
| 255 | |||
| 256 | |||
| 257 | Required properties for smd clock: | ||
| 258 | - #clock-cells : from common clock binding; shall be set to 0. | ||
| 259 | - clocks : shall be the smd clock source phandles. | ||
| 260 | e.g. clocks = <&plladiv>, <&utmi>; | ||
| 261 | |||
| 262 | For example: | ||
| 263 | smd: smdck { | ||
| 264 | compatible = "atmel,at91sam9x5-clk-smd"; | ||
| 265 | #clock-cells = <0>; | ||
| 266 | clocks = <&plladiv>, <&utmi>; | ||
| 267 | }; | ||
| 268 | |||
| 269 | Required properties for system clocks: | ||
| 270 | - #size-cells : shall be 0 (reg is used to encode clk id). | ||
| 271 | - #address-cells : shall be 1 (reg is used to encode clk id). | ||
| 272 | - name: device tree node describing a specific system clock. | ||
| 273 | * #clock-cells : from common clock binding; shall be set to 0. | ||
| 274 | * reg: system clock id (bit position in SCER/SCDR/SCSR registers). | ||
| 275 | See Atmel's datasheet to get a full list of system clock ids. | ||
| 276 | |||
| 277 | For example: | ||
| 278 | system: systemck { | ||
| 279 | compatible = "atmel,at91rm9200-clk-system"; | ||
| 280 | #address-cells = <1>; | ||
| 281 | #size-cells = <0>; | ||
| 282 | |||
| 283 | ddrck { | ||
| 284 | #clock-cells = <0>; | ||
| 285 | reg = <2>; | ||
| 286 | clocks = <&mck>; | ||
| 287 | }; | ||
| 288 | |||
| 289 | uhpck { | ||
| 290 | #clock-cells = <0>; | ||
| 291 | reg = <6>; | ||
| 292 | clocks = <&usb>; | ||
| 293 | }; | ||
| 294 | |||
| 295 | udpck { | ||
| 296 | #clock-cells = <0>; | ||
| 297 | reg = <7>; | ||
| 298 | clocks = <&usb>; | ||
| 299 | }; | ||
| 300 | }; | ||
| 301 | |||
| 302 | |||
| 303 | Required properties for usb clock: | ||
| 304 | - #clock-cells : from common clock binding; shall be set to 0. | ||
| 305 | - clocks : shall be the smd clock source phandles. | ||
| 306 | e.g. clocks = <&pllb>; | ||
| 307 | - atmel,clk-divisors (only available for "atmel,at91rm9200-clk-usb"): | ||
| 308 | usb clock divisor table. | ||
| 309 | e.g. divisors = <1 2 4 0>; | ||
| 310 | |||
| 311 | For example: | ||
| 312 | usb: usbck { | ||
| 313 | compatible = "atmel,at91sam9x5-clk-usb"; | ||
| 314 | #clock-cells = <0>; | ||
| 315 | clocks = <&plladiv>, <&utmi>; | ||
| 316 | }; | ||
| 317 | |||
| 318 | usb: usbck { | ||
| 319 | compatible = "atmel,at91rm9200-clk-usb"; | ||
| 320 | #clock-cells = <0>; | ||
| 321 | clocks = <&pllb>; | ||
| 322 | atmel,clk-divisors = <1 2 4 0>; | ||
| 323 | }; | ||
| 324 | |||
| 325 | |||
| 326 | Required properties for utmi clock: | ||
| 327 | - interrupt-parent : must reference the PMC node. | ||
| 328 | - interrupts : shall be set to "<AT91_PMC_LOCKU IRQ_TYPE_LEVEL_HIGH>". | ||
| 329 | - #clock-cells : from common clock binding; shall be set to 0. | ||
| 330 | - clocks : shall be the main clock source phandle. | ||
| 331 | |||
| 332 | For example: | ||
| 333 | utmi: utmick { | ||
| 334 | compatible = "atmel,at91sam9x5-clk-utmi"; | ||
| 335 | interrupt-parent = <&pmc>; | ||
| 336 | interrupts = <AT91_PMC_LOCKU IRQ_TYPE_LEVEL_HIGH>; | ||
| 337 | #clock-cells = <0>; | ||
| 338 | clocks = <&main>; | ||
| 339 | }; | ||
| @@ -0,0 +1,93 @@ | |||
| 1 | Broadcom Kona Family Clocks | ||
| 2 | |||
| 3 | This binding is associated with Broadcom SoCs having "Kona" style | ||
| 4 | clock control units (CCUs). A CCU is a clock provider that manages | ||
| 5 | a set of clock signals. Each CCU is represented by a node in the | ||
| 6 | device tree. | ||
| 7 | |||
| 8 | This binding uses the common clock binding: | ||
| 9 | Documentation/devicetree/bindings/clock/clock-bindings.txt | ||
| 10 | |||
| 11 | Required properties: | ||
| 12 | - compatible | ||
| 13 | Shall have one of the following values: | ||
| 14 | - "brcm,bcm11351-root-ccu" | ||
| 15 | - "brcm,bcm11351-aon-ccu" | ||
| 16 | - "brcm,bcm11351-hub-ccu" | ||
| 17 | - "brcm,bcm11351-master-ccu" | ||
| 18 | - "brcm,bcm11351-slave-ccu" | ||
| 19 | - reg | ||
| 20 | Shall define the base and range of the address space | ||
| 21 | containing clock control registers | ||
| 22 | - #clock-cells | ||
| 23 | Shall have value <1>. The permitted clock-specifier values | ||
| 24 | are defined below. | ||
| 25 | - clock-output-names | ||
| 26 | Shall be an ordered list of strings defining the names of | ||
| 27 | the clocks provided by the CCU. | ||
| 28 | |||
| 29 | |||
| 30 | BCM281XX family SoCs use Kona CCUs. The following table defines | ||
| 31 | the set of CCUs and clock specifiers for BCM281XX clocks. When | ||
| 32 | a clock consumer references a clocks, its symbolic specifier | ||
| 33 | (rather than its numeric index value) should be used. These | ||
| 34 | specifiers are defined in "include/dt-bindings/clock/bcm281xx.h". | ||
| 35 | |||
| 36 | CCU Clock Type Index Specifier | ||
| 37 | --- ----- ---- ----- --------- | ||
| 38 | root frac_1m peri 0 BCM281XX_ROOT_CCU_FRAC_1M | ||
| 39 | |||
| 40 | aon hub_timer peri 0 BCM281XX_AON_CCU_HUB_TIMER | ||
| 41 | aon pmu_bsc peri 1 BCM281XX_AON_CCU_PMU_BSC | ||
| 42 | aon pmu_bsc_var peri 2 BCM281XX_AON_CCU_PMU_BSC_VAR | ||
| 43 | |||
| 44 | hub tmon_1m peri 0 BCM281XX_HUB_CCU_TMON_1M | ||
| 45 | |||
| 46 | master sdio1 peri 0 BCM281XX_MASTER_CCU_SDIO1 | ||
| 47 | master sdio2 peri 1 BCM281XX_MASTER_CCU_SDIO2 | ||
| 48 | master sdio3 peri 2 BCM281XX_MASTER_CCU_SDIO3 | ||
| 49 | master sdio4 peri 3 BCM281XX_MASTER_CCU_SDIO4 | ||
| 50 | master dmac peri 4 BCM281XX_MASTER_CCU_DMAC | ||
| 51 | master usb_ic peri 5 BCM281XX_MASTER_CCU_USB_IC | ||
| 52 | master hsic2_48m peri 6 BCM281XX_MASTER_CCU_HSIC_48M | ||
| 53 | master hsic2_12m peri 7 BCM281XX_MASTER_CCU_HSIC_12M | ||
| 54 | |||
| 55 | slave uartb peri 0 BCM281XX_SLAVE_CCU_UARTB | ||
| 56 | slave uartb2 peri 1 BCM281XX_SLAVE_CCU_UARTB2 | ||
| 57 | slave uartb3 peri 2 BCM281XX_SLAVE_CCU_UARTB3 | ||
| 58 | slave uartb4 peri 3 BCM281XX_SLAVE_CCU_UARTB4 | ||
| 59 | slave ssp0 peri 4 BCM281XX_SLAVE_CCU_SSP0 | ||
| 60 | slave ssp2 peri 5 BCM281XX_SLAVE_CCU_SSP2 | ||
| 61 | slave bsc1 peri 6 BCM281XX_SLAVE_CCU_BSC1 | ||
| 62 | slave bsc2 peri 7 BCM281XX_SLAVE_CCU_BSC2 | ||
| 63 | slave bsc3 peri 8 BCM281XX_SLAVE_CCU_BSC3 | ||
| 64 | slave pwm peri 9 BCM281XX_SLAVE_CCU_PWM | ||
| 65 | |||
| 66 | |||
| 67 | Device tree example: | ||
| 68 | |||
| 69 | slave_ccu: slave_ccu { | ||
| 70 | compatible = "brcm,bcm11351-slave-ccu"; | ||
| 71 | reg = <0x3e011000 0x0f00>; | ||
| 72 | #clock-cells = <1>; | ||
| 73 | clock-output-names = "uartb", | ||
| 74 | "uartb2", | ||
| 75 | "uartb3", | ||
| 76 | "uartb4"; | ||
| 77 | }; | ||
| 78 | |||
| 79 | ref_crystal_clk: ref_crystal { | ||
| 80 | #clock-cells = <0>; | ||
| 81 | compatible = "fixed-clock"; | ||
| 82 | clock-frequency = <26000000>; | ||
| 83 | }; | ||
| 84 | |||
| 85 | uart@3e002000 { | ||
| 86 | compatible = "brcm,bcm11351-dw-apb-uart", "snps,dw-apb-uart"; | ||
| 87 | status = "disabled"; | ||
| 88 | reg = <0x3e002000 0x1000>; | ||
| 89 | clocks = <&slave_ccu BCM281XX_SLAVE_CCU_UARTB3>; | ||
| 90 | interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>; | ||
| 91 | reg-shift = <2>; | ||
| 92 | reg-io-width = <4>; | ||
| 93 | }; | ||
| @@ -8,12 +8,29 @@ Required Properties: · 7 unmodified lines | |||
| 8 | 8 | ||
| 9 | - compatible: should be one of the following: | 9 | - compatible: should be one of the following: |
| 10 | - "samsung,exynos4210-audss-clock" - controller compatible with all Exynos4 SoCs. | 10 | - "samsung,exynos4210-audss-clock" - controller compatible with all Exynos4 SoCs. |
| 11 | - "samsung,exynos5250-audss-clock" - controller compatible with all Exynos5 SoCs. | 11 | - "samsung,exynos5250-audss-clock" - controller compatible with Exynos5250 |
| 12 | 12 | SoCs. | |
| 13 | - "samsung,exynos5420-audss-clock" - controller compatible with Exynos5420 | ||
| 14 | SoCs. | ||
| 13 | - reg: physical base address and length of the controller's register set. | 15 | - reg: physical base address and length of the controller's register set. |
| 14 | 16 | ||
| 15 | - #clock-cells: should be 1. | 17 | - #clock-cells: should be 1. |
| 16 | 18 | ||
| 19 | - clocks: | ||
| 20 | - pll_ref: Fixed rate PLL reference clock, parent of mout_audss. "fin_pll" | ||
| 21 | is used if not specified. | ||
| 22 | - pll_in: Input PLL to the AudioSS block, parent of mout_audss. "fout_epll" | ||
| 23 | is used if not specified. | ||
| 24 | - cdclk: External i2s clock, parent of mout_i2s. "cdclk0" is used if not | ||
| 25 | specified. | ||
| 26 | - sclk_audio: Audio bus clock, parent of mout_i2s. "sclk_audio0" is used if | ||
| 27 | not specified. | ||
| 28 | - sclk_pcm_in: PCM clock, parent of sclk_pcm. "sclk_pcm0" is used if not | ||
| 29 | specified. | ||
| 30 | |||
| 31 | - clock-names: Aliases for the above clocks. They should be "pll_ref", | ||
| 32 | "pll_in", "cdclk", "sclk_audio", and "sclk_pcm_in" respectively. | ||
| 33 | |||
| 17 | The following is the list of clocks generated by the controller. Each clock is | 34 | The following is the list of clocks generated by the controller. Each clock is |
| 18 | assigned an identifier and client nodes use this identifier to specify the | 35 | assigned an identifier and client nodes use this identifier to specify the |
| 19 | clock which they consume. Some of the clocks are available only on a particular | 36 | clock which they consume. Some of the clocks are available only on a particular |
| @@ -34,16 +51,30 @@ i2s_bus 6 · 14 unmodified lines | |||
| 34 | sclk_i2s 7 | 51 | sclk_i2s 7 |
| 35 | pcm_bus 8 | 52 | pcm_bus 8 |
| 36 | sclk_pcm 9 | 53 | sclk_pcm 9 |
| 54 | adma 10 Exynos5420 | ||
| 55 | |||
| 56 | Example 1: An example of a clock controller node using the default input | ||
| 57 | clock names is listed below. | ||
| 58 | |||
| 59 | clock_audss: audss-clock-controller@3810000 { | ||
| 60 | compatible = "samsung,exynos5250-audss-clock"; | ||
| 61 | reg = <0x03810000 0x0C>; | ||
| 62 | #clock-cells = <1>; | ||
| 63 | }; | ||
| 37 | 64 | ||
| 38 | Example 1: An example of a clock controller node is listed below. | 65 | Example 2: An example of a clock controller node with the input clocks |
| 66 | specified. | ||
| 39 | 67 | ||
| 40 | clock_audss: audss-clock-controller@3810000 { | 68 | clock_audss: audss-clock-controller@3810000 { |
| 41 | compatible = "samsung,exynos5250-audss-clock"; | 69 | compatible = "samsung,exynos5250-audss-clock"; |
| 42 | reg = <0x03810000 0x0C>; | 70 | reg = <0x03810000 0x0C>; |
| 43 | #clock-cells = <1>; | 71 | #clock-cells = <1>; |
| 72 | clocks = <&clock 1>, <&clock 7>, <&clock 138>, <&clock 160>, | ||
| 73 | <&ext_i2s_clk>; | ||
| 74 | clock-names = "pll_ref", "pll_in", "sclk_audio", "sclk_pcm_in", "cdclk"; | ||
| 44 | }; | 75 | }; |
| 45 | 76 | ||
| 46 | Example 2: I2S controller node that consumes the clock generated by the clock | 77 | Example 3: I2S controller node that consumes the clock generated by the clock |
| 47 | controller. Refer to the standard clock bindings for information | 78 | controller. Refer to the standard clock bindings for information |
| 48 | about 'clocks' and 'clock-names' property. | 79 | about 'clocks' and 'clock-names' property. |
| 49 | 80 | ||
| @@ -5,7 +5,7 @@ Sources of clock signal can be represented by any node in the device · 4 unmodified lines | |||
| 5 | tree. Those nodes are designated as clock providers. Clock consumer | 5 | tree. Those nodes are designated as clock providers. Clock consumer |
| 6 | nodes use a phandle and clock specifier pair to connect clock provider | 6 | nodes use a phandle and clock specifier pair to connect clock provider |
| 7 | outputs to clock inputs. Similar to the gpio specifiers, a clock | 7 | outputs to clock inputs. Similar to the gpio specifiers, a clock |
| 8 | specifier is an array of one more more cells identifying the clock | 8 | specifier is an array of zero, one or more cells identifying the clock |
| 9 | output on a device. The length of a clock specifier is defined by the | 9 | output on a device. The length of a clock specifier is defined by the |
| 10 | value of a #clock-cells property in the clock provider node. | 10 | value of a #clock-cells property in the clock provider node. |
| 11 | 11 | ||
| @@ -0,0 +1,134 @@ | |||
| 1 | * Clock Block on Freescale CoreNet Platforms | ||
| 2 | |||
| 3 | Freescale CoreNet chips take primary clocking input from the external | ||
| 4 | SYSCLK signal. The SYSCLK input (frequency) is multiplied using | ||
| 5 | multiple phase locked loops (PLL) to create a variety of frequencies | ||
| 6 | which can then be passed to a variety of internal logic, including | ||
| 7 | cores and peripheral IP blocks. | ||
| 8 | Please refer to the Reference Manual for details. | ||
| 9 | |||
| 10 | 1. Clock Block Binding | ||
| 11 | |||
| 12 | Required properties: | ||
| 13 | - compatible: Should contain a specific clock block compatible string | ||
| 14 | and a single chassis clock compatible string. | ||
| 15 | Clock block strings include, but not limited to, one of the: | ||
| 16 | * "fsl,p2041-clockgen" | ||
| 17 | * "fsl,p3041-clockgen" | ||
| 18 | * "fsl,p4080-clockgen" | ||
| 19 | * "fsl,p5020-clockgen" | ||
| 20 | * "fsl,p5040-clockgen" | ||
| 21 | * "fsl,t4240-clockgen" | ||
| 22 | * "fsl,b4420-clockgen" | ||
| 23 | * "fsl,b4860-clockgen" | ||
| 24 | Chassis clock strings include: | ||
| 25 | * "fsl,qoriq-clockgen-1.0": for chassis 1.0 clocks | ||
| 26 | * "fsl,qoriq-clockgen-2.0": for chassis 2.0 clocks | ||
| 27 | - reg: Describes the address of the device's resources within the | ||
| 28 | address space defined by its parent bus, and resource zero | ||
| 29 | represents the clock register set | ||
| 30 | - clock-frequency: Input system clock frequency | ||
| 31 | |||
| 32 | Recommended properties: | ||
| 33 | - ranges: Allows valid translation between child's address space and | ||
| 34 | parent's. Must be present if the device has sub-nodes. | ||
| 35 | - #address-cells: Specifies the number of cells used to represent | ||
| 36 | physical base addresses. Must be present if the device has | ||
| 37 | sub-nodes and set to 1 if present | ||
| 38 | - #size-cells: Specifies the number of cells used to represent | ||
| 39 | the size of an address. Must be present if the device has | ||
| 40 | sub-nodes and set to 1 if present | ||
| 41 | |||
| 42 | 2. Clock Provider/Consumer Binding | ||
| 43 | |||
| 44 | Most of the bindings are from the common clock binding[1]. | ||
| 45 | [1] Documentation/devicetree/bindings/clock/clock-bindings.txt | ||
| 46 | |||
| 47 | Required properties: | ||
| 48 | - compatible : Should include one of the following: | ||
| 49 | * "fsl,qoriq-core-pll-1.0" for core PLL clocks (v1.0) | ||
| 50 | * "fsl,qoriq-core-pll-2.0" for core PLL clocks (v2.0) | ||
| 51 | * "fsl,qoriq-core-mux-1.0" for core mux clocks (v1.0) | ||
| 52 | * "fsl,qoriq-core-mux-2.0" for core mux clocks (v2.0) | ||
| 53 | * "fsl,qoriq-sysclk-1.0": for input system clock (v1.0). | ||
| 54 | It takes parent's clock-frequency as its clock. | ||
| 55 | * "fsl,qoriq-sysclk-2.0": for input system clock (v2.0). | ||
| 56 | It takes parent's clock-frequency as its clock. | ||
| 57 | - #clock-cells: From common clock binding. The number of cells in a | ||
| 58 | clock-specifier. Should be <0> for "fsl,qoriq-sysclk-[1,2].0" | ||
| 59 | clocks, or <1> for "fsl,qoriq-core-pll-[1,2].0" clocks. | ||
| 60 | For "fsl,qoriq-core-pll-[1,2].0" clocks, the single | ||
| 61 | clock-specifier cell may take the following values: | ||
| 62 | * 0 - equal to the PLL frequency | ||
| 63 | * 1 - equal to the PLL frequency divided by 2 | ||
| 64 | * 2 - equal to the PLL frequency divided by 4 | ||
| 65 | |||
| 66 | Recommended properties: | ||
| 67 | - clocks: Should be the phandle of input parent clock | ||
| 68 | - clock-names: From common clock binding, indicates the clock name | ||
| 69 | - clock-output-names: From common clock binding, indicates the names of | ||
| 70 | output clocks | ||
| 71 | - reg: Should be the offset and length of clock block base address. | ||
| 72 | The length should be 4. | ||
| 73 | |||
| 74 | Example for clock block and clock provider: | ||
| 75 | / { | ||
| 76 | clockgen: global-utilities@e1000 { | ||
| 77 | compatible = "fsl,p5020-clockgen", "fsl,qoriq-clockgen-1.0"; | ||
| 78 | ranges = <0x0 0xe1000 0x1000>; | ||
| 79 | clock-frequency = <133333333>; | ||
| 80 | reg = <0xe1000 0x1000>; | ||
| 81 | #address-cells = <1>; | ||
| 82 | #size-cells = <1>; | ||
| 83 | |||
| 84 | sysclk: sysclk { | ||
| 85 | #clock-cells = <0>; | ||
| 86 | compatible = "fsl,qoriq-sysclk-1.0"; | ||
| 87 | clock-output-names = "sysclk"; | ||
| 88 | } | ||
| 89 | |||
| 90 | pll0: pll0@800 { | ||
| 91 | #clock-cells = <1>; | ||
| 92 | reg = <0x800 0x4>; | ||
| 93 | compatible = "fsl,qoriq-core-pll-1.0"; | ||
| 94 | clocks = <&sysclk>; | ||
| 95 | clock-output-names = "pll0", "pll0-div2"; | ||
| 96 | }; | ||
| 97 | |||
| 98 | pll1: pll1@820 { | ||
| 99 | #clock-cells = <1>; | ||
| 100 | reg = <0x820 0x4>; | ||
| 101 | compatible = "fsl,qoriq-core-pll-1.0"; | ||
| 102 | clocks = <&sysclk>; | ||
| 103 | clock-output-names = "pll1", "pll1-div2"; | ||
| 104 | }; | ||
| 105 | |||
| 106 | mux0: mux0@0 { | ||
| 107 | #clock-cells = <0>; | ||
| 108 | reg = <0x0 0x4>; | ||
| 109 | compatible = "fsl,qoriq-core-mux-1.0"; | ||
| 110 | clocks = <&pll0 0>, <&pll0 1>, <&pll1 0>, <&pll1 1>; | ||
| 111 | clock-names = "pll0", "pll0-div2", "pll1", "pll1-div2"; | ||
| 112 | clock-output-names = "cmux0"; | ||
| 113 | }; | ||
| 114 | |||
| 115 | mux1: mux1@20 { | ||
| 116 | #clock-cells = <0>; | ||
| 117 | reg = <0x20 0x4>; | ||
| 118 | compatible = "fsl,qoriq-core-mux-1.0"; | ||
| 119 | clocks = <&pll0 0>, <&pll0 1>, <&pll1 0>, <&pll1 1>; | ||
| 120 | clock-names = "pll0", "pll0-div2", "pll1", "pll1-div2"; | ||
| 121 | clock-output-names = "cmux1"; | ||
| 122 | }; | ||
| 123 | }; | ||
| 124 | } | ||
| 125 | |||
| 126 | Example for clock consumer: | ||
| 127 | |||
| 128 | / { | ||
| 129 | cpu0: PowerPC,e5500@0 { | ||
| 130 | ... | ||
| 131 | clocks = <&mux0>; | ||
| 132 | ... | ||
| 133 | }; | ||
| 134 | } | ||
| @@ -0,0 +1,98 @@ | |||
| 1 | Device tree Clock bindings for Renesas EMMA Mobile EV2 | ||
| 2 | |||
| 3 | This binding uses the common clock binding. | ||
| 4 | |||
| 5 | * SMU | ||
| 6 | System Management Unit described in user's manual R19UH0037EJ1000_SMU. | ||
| 7 | This is not a clock provider, but clocks under SMU depend on it. | ||
| 8 | |||
| 9 | Required properties: | ||
| 10 | - compatible: Should be "renesas,emev2-smu" | ||
| 11 | - reg: Address and Size of SMU registers | ||
| 12 | |||
| 13 | * SMU_CLKDIV | ||
| 14 | Function block with an input mux and a divider, which corresponds to | ||
| 15 | "Serial clock generator" in fig."Clock System Overview" of the manual, | ||
| 16 | and "xxx frequency division setting register" (XXXCLKDIV) registers. | ||
| 17 | This makes internal (neither input nor output) clock that is provided | ||
| 18 | to input of xxxGCLK block. | ||
| 19 | |||
| 20 | Required properties: | ||
| 21 | - compatible: Should be "renesas,emev2-smu-clkdiv" | ||
| 22 | - reg: Byte offset from SMU base and Bit position in the register | ||
| 23 | - clocks: Parent clocks. Input clocks as described in clock-bindings.txt | ||
| 24 | - #clock-cells: Should be <0> | ||
| 25 | |||
| 26 | * SMU_GCLK | ||
| 27 | Clock gating node shown as "Clock stop processing block" in the | ||
| 28 | fig."Clock System Overview" of the manual. | ||
| 29 | Registers are "xxx clock gate control register" (XXXGCLKCTRL). | ||
| 30 | |||
| 31 | Required properties: | ||
| 32 | - compatible: Should be "renesas,emev2-smu-gclk" | ||
| 33 | - reg: Byte offset from SMU base and Bit position in the register | ||
| 34 | - clocks: Input clock as described in clock-bindings.txt | ||
| 35 | - #clock-cells: Should be <0> | ||
| 36 | |||
| 37 | Example of provider: | ||
| 38 | |||
| 39 | usia_u0_sclkdiv: usia_u0_sclkdiv { | ||
| 40 | compatible = "renesas,emev2-smu-clkdiv"; | ||
| 41 | reg = <0x610 0>; | ||
| 42 | clocks = <&pll3_fo>, <&pll4_fo>, <&pll1_fo>, <&osc1_fo>; | ||
| 43 | #clock-cells = <0>; | ||
| 44 | }; | ||
| 45 | |||
| 46 | usia_u0_sclk: usia_u0_sclk { | ||
| 47 | compatible = "renesas,emev2-smu-gclk"; | ||
| 48 | reg = <0x4a0 1>; | ||
| 49 | clocks = <&usia_u0_sclkdiv>; | ||
| 50 | #clock-cells = <0>; | ||
| 51 | }; | ||
| 52 | |||
| 53 | Example of consumer: | ||
| 54 | |||
| 55 | uart@e1020000 { | ||
| 56 | compatible = "renesas,em-uart"; | ||
| 57 | reg = <0xe1020000 0x38>; | ||
| 58 | interrupts = <0 8 0>; | ||
| 59 | clocks = <&usia_u0_sclk>; | ||
| 60 | clock-names = "sclk"; | ||
| 61 | }; | ||
| 62 | |||
| 63 | Example of clock-tree description: | ||
| 64 | |||
| 65 | This describes a clock path in the clock tree | ||
| 66 | c32ki -> pll3_fo -> usia_u0_sclkdiv -> usia_u0_sclk | ||
| 67 | |||
| 68 | smu@e0110000 { | ||
| 69 | compatible = "renesas,emev2-smu"; | ||
| 70 | reg = <0xe0110000 0x10000>; | ||
| 71 | #address-cells = <2>; | ||
| 72 | #size-cells = <0>; | ||
| 73 | |||
| 74 | c32ki: c32ki { | ||
| 75 | compatible = "fixed-clock"; | ||
| 76 | clock-frequency = <32768>; | ||
| 77 | #clock-cells = <0>; | ||
| 78 | }; | ||
| 79 | pll3_fo: pll3_fo { | ||
| 80 | compatible = "fixed-factor-clock"; | ||
| 81 | clocks = <&c32ki>; | ||
| 82 | clock-div = <1>; | ||
| 83 | clock-mult = <7000>; | ||
| 84 | #clock-cells = <0>; | ||
| 85 | }; | ||
| 86 | usia_u0_sclkdiv: usia_u0_sclkdiv { | ||
| 87 | compatible = "renesas,emev2-smu-clkdiv"; | ||
| 88 | reg = <0x610 0>; | ||
| 89 | clocks = <&pll3_fo>; | ||
| 90 | #clock-cells = <0>; | ||
| 91 | }; | ||
| 92 | usia_u0_sclk: usia_u0_sclk { | ||
| 93 | compatible = "renesas,emev2-smu-gclk"; | ||
| 94 | reg = <0x4a0 1>; | ||
| 95 | clocks = <&usia_u0_sclkdiv>; | ||
| 96 | #clock-cells = <0>; | ||
| 97 | }; | ||
| 98 | }; | ||
| @@ -62,6 +62,7 @@ clock which they consume. · 61 unmodified lines | |||
| 62 | div_i2s1 157 | 62 | div_i2s1 157 |
| 63 | div_i2s2 158 | 63 | div_i2s2 158 |
| 64 | sclk_hdmiphy 159 | 64 | sclk_hdmiphy 159 |
| 65 | div_pcm0 160 | ||
| 65 | 66 | ||
| 66 | 67 | ||
| 67 | [Peripheral Clock Gates] | 68 | [Peripheral Clock Gates] |
| @@ -10,6 +10,8 @@ Required properties: · 9 unmodified lines | |||
| 10 | - clock-frequency : frequency of clock in Hz. Should be a single cell. | 10 | - clock-frequency : frequency of clock in Hz. Should be a single cell. |
| 11 | 11 | ||
| 12 | Optional properties: | 12 | Optional properties: |
| 13 | - clock-accuracy : accuracy of clock in ppb (parts per billion). | ||
| 14 | Should be a single cell. | ||
| 13 | - gpios : From common gpio binding; gpio connection to clock enable pin. | 15 | - gpios : From common gpio binding; gpio connection to clock enable pin. |
| 14 | - clock-output-names : From common clock binding. | 16 | - clock-output-names : From common clock binding. |
| 15 | 17 | ||
| @@ -18,4 +20,5 @@ Example: · 2 unmodified lines | |||
| 18 | compatible = "fixed-clock"; | 20 | compatible = "fixed-clock"; |
| 19 | #clock-cells = <0>; | 21 | #clock-cells = <0>; |
| 20 | clock-frequency = <1000000000>; | 22 | clock-frequency = <1000000000>; |
| 23 | clock-accuracy = <100>; | ||
| 21 | }; | 24 | }; |
| @@ -19,6 +19,6 @@ Example: · 18 unmodified lines | |||
| 19 | compatible = "fixed-factor-clock"; | 19 | compatible = "fixed-factor-clock"; |
| 20 | clocks = <&parentclk>; | 20 | clocks = <&parentclk>; |
| 21 | #clock-cells = <0>; | 21 | #clock-cells = <0>; |
| 22 | div = <2>; | 22 | clock-div = <2>; |
| 23 | mult = <1>; | 23 | clock-mult = <1>; |
| 24 | }; | 24 | }; |
| @@ -0,0 +1,19 @@ | |||
| 1 | * Hisilicon Hi3620 Clock Controller | ||
| 2 | |||
| 3 | The Hi3620 clock controller generates and supplies clock to various | ||
| 4 | controllers within the Hi3620 SoC. | ||
| 5 | |||
| 6 | Required Properties: | ||
| 7 | |||
| 8 | - compatible: should be one of the following. | ||
| 9 | - "hisilicon,hi3620-clock" - controller compatible with Hi3620 SoC. | ||
| 10 | |||
| 11 | - reg: physical base address of the controller and length of memory mapped | ||
| 12 | region. | ||
| 13 | |||
| 14 | - #clock-cells: should be 1. | ||
| 15 | |||
| 16 | Each clock is assigned an identifier and client nodes use this identifier | ||
| 17 | to specify the clock which they consume. | ||
| 18 | |||
| 19 | All these identifier could be found in <dt-bindings/clock/hi3620-clock.h>. | ||
| @@ -0,0 +1,113 @@ | |||
| 1 | * Clock bindings for Freescale i.MX35 | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: Should be "fsl,imx35-ccm" | ||
| 5 | - reg: Address and length of the register set | ||
| 6 | - interrupts: Should contain CCM interrupt | ||
| 7 | - #clock-cells: Should be <1> | ||
| 8 | |||
| 9 | The clock consumer should specify the desired clock by having the clock | ||
| 10 | ID in its "clocks" phandle cell. The following is a full list of i.MX35 | ||
| 11 | clocks and IDs. | ||
| 12 | |||
| 13 | Clock ID | ||
| 14 | --------------------------- | ||
| 15 | ckih 0 | ||
| 16 | mpll 1 | ||
| 17 | ppll 2 | ||
| 18 | mpll_075 3 | ||
| 19 | arm 4 | ||
| 20 | hsp 5 | ||
| 21 | hsp_div 6 | ||
| 22 | hsp_sel 7 | ||
| 23 | ahb 8 | ||
| 24 | ipg 9 | ||
| 25 | arm_per_div 10 | ||
| 26 | ahb_per_div 11 | ||
| 27 | ipg_per 12 | ||
| 28 | uart_sel 13 | ||
| 29 | uart_div 14 | ||
| 30 | esdhc_sel 15 | ||
| 31 | esdhc1_div 16 | ||
| 32 | esdhc2_div 17 | ||
| 33 | esdhc3_div 18 | ||
| 34 | spdif_sel 19 | ||
| 35 | spdif_div_pre 20 | ||
| 36 | spdif_div_post 21 | ||
| 37 | ssi_sel 22 | ||
| 38 | ssi1_div_pre 23 | ||
| 39 | ssi1_div_post 24 | ||
| 40 | ssi2_div_pre 25 | ||
| 41 | ssi2_div_post 26 | ||
| 42 | usb_sel 27 | ||
| 43 | usb_div 28 | ||
| 44 | nfc_div 29 | ||
| 45 | asrc_gate 30 | ||
| 46 | pata_gate 31 | ||
| 47 | audmux_gate 32 | ||
| 48 | can1_gate 33 | ||
| 49 | can2_gate 34 | ||
| 50 | cspi1_gate 35 | ||
| 51 | cspi2_gate 36 | ||
| 52 | ect_gate 37 | ||
| 53 | edio_gate 38 | ||
| 54 | emi_gate 39 | ||
| 55 | epit1_gate 40 | ||
| 56 | epit2_gate 41 | ||
| 57 | esai_gate 42 | ||
| 58 | esdhc1_gate 43 | ||
| 59 | esdhc2_gate 44 | ||
| 60 | esdhc3_gate 45 | ||
| 61 | fec_gate 46 | ||
| 62 | gpio1_gate 47 | ||
| 63 | gpio2_gate 48 | ||
| 64 | gpio3_gate 49 | ||
| 65 | gpt_gate 50 | ||
| 66 | i2c1_gate 51 | ||
| 67 | i2c2_gate 52 | ||
| 68 | i2c3_gate 53 | ||
| 69 | iomuxc_gate 54 | ||
| 70 | ipu_gate 55 | ||
| 71 | kpp_gate 56 | ||
| 72 | mlb_gate 57 | ||
| 73 | mshc_gate 58 | ||
| 74 | owire_gate 59 | ||
| 75 | pwm_gate 60 | ||
| 76 | rngc_gate 61 | ||
| 77 | rtc_gate 62 | ||
| 78 | rtic_gate 63 | ||
| 79 | scc_gate 64 | ||
| 80 | sdma_gate 65 | ||
| 81 | spba_gate 66 | ||
| 82 | spdif_gate 67 | ||
| 83 | ssi1_gate 68 | ||
| 84 | ssi2_gate 69 | ||
| 85 | uart1_gate 70 | ||
| 86 | uart2_gate 71 | ||
| 87 | uart3_gate 72 | ||
| 88 | usbotg_gate 73 | ||
| 89 | wdog_gate 74 | ||
| 90 | max_gate 75 | ||
| 91 | admux_gate 76 | ||
| 92 | csi_gate 77 | ||
| 93 | csi_div 78 | ||
| 94 | csi_sel 79 | ||
| 95 | iim_gate 80 | ||
| 96 | gpu2d_gate 81 | ||
| 97 | |||
| 98 | Examples: | ||
| 99 | |||
| 100 | clks: ccm@53f80000 { | ||
| 101 | compatible = "fsl,imx35-ccm"; | ||
| 102 | reg = <0x53f80000 0x4000>; | ||
| 103 | interrupts = <31>; | ||
| 104 | #clock-cells = <1>; | ||
| 105 | }; | ||
| 106 | |||
| 107 | esdhc1: esdhc@53fb4000 { | ||
| 108 | compatible = "fsl,imx35-esdhc"; | ||
| 109 | reg = <0x53fb4000 0x4000>; | ||
| 110 | interrupts = <7>; | ||
| 111 | clocks = <&clks 9>, <&clks 8>, <&clks 43>; | ||
| 112 | clock-names = "ipg", "ahb", "per"; | ||
| 113 | }; | ||
| @@ -7,197 +7,8 @@ Required properties: · 6 unmodified lines | |||
| 7 | - #clock-cells: Should be <1> | 7 | - #clock-cells: Should be <1> |
| 8 | 8 | ||
| 9 | The clock consumer should specify the desired clock by having the clock | 9 | The clock consumer should specify the desired clock by having the clock |
| 10 | ID in its "clocks" phandle cell. The following is a full list of i.MX5 | 10 | ID in its "clocks" phandle cell. See include/dt-bindings/clock/imx5-clock.h |
| 11 | clocks and IDs. | 11 | for the full list of i.MX5 clock IDs. |
| 12 | |||
| 13 | Clock ID | ||
| 14 | --------------------------- | ||
| 15 | dummy 0 | ||
| 16 | ckil 1 | ||
| 17 | osc 2 | ||
| 18 | ckih1 3 | ||
| 19 | ckih2 4 | ||
| 20 | ahb 5 | ||
| 21 | ipg 6 | ||
| 22 | axi_a 7 | ||
| 23 | axi_b 8 | ||
| 24 | uart_pred 9 | ||
| 25 | uart_root 10 | ||
| 26 | esdhc_a_pred 11 | ||
| 27 | esdhc_b_pred 12 | ||
| 28 | esdhc_c_s 13 | ||
| 29 | esdhc_d_s 14 | ||
| 30 | emi_sel 15 | ||
| 31 | emi_slow_podf 16 | ||
| 32 | nfc_podf 17 | ||
| 33 | ecspi_pred 18 | ||
| 34 | ecspi_podf 19 | ||
| 35 | usboh3_pred 20 | ||
| 36 | usboh3_podf 21 | ||
| 37 | usb_phy_pred 22 | ||
| 38 | usb_phy_podf 23 | ||
| 39 | cpu_podf 24 | ||
| 40 | di_pred 25 | ||
| 41 | tve_s 27 | ||
| 42 | uart1_ipg_gate 28 | ||
| 43 | uart1_per_gate 29 | ||
| 44 | uart2_ipg_gate 30 | ||
| 45 | uart2_per_gate 31 | ||
| 46 | uart3_ipg_gate 32 | ||
| 47 | uart3_per_gate 33 | ||
| 48 | i2c1_gate 34 | ||
| 49 | i2c2_gate 35 | ||
| 50 | gpt_ipg_gate 36 | ||
| 51 | pwm1_ipg_gate 37 | ||
| 52 | pwm1_hf_gate 38 | ||
| 53 | pwm2_ipg_gate 39 | ||
| 54 | pwm2_hf_gate 40 | ||
| 55 | gpt_hf_gate 41 | ||
| 56 | fec_gate 42 | ||
| 57 | usboh3_per_gate 43 | ||
| 58 | esdhc1_ipg_gate 44 | ||
| 59 | esdhc2_ipg_gate 45 | ||
| 60 | esdhc3_ipg_gate 46 | ||
| 61 | esdhc4_ipg_gate 47 | ||
| 62 | ssi1_ipg_gate 48 | ||
| 63 | ssi2_ipg_gate 49 | ||
| 64 | ssi3_ipg_gate 50 | ||
| 65 | ecspi1_ipg_gate 51 | ||
| 66 | ecspi1_per_gate 52 | ||
| 67 | ecspi2_ipg_gate 53 | ||
| 68 | ecspi2_per_gate 54 | ||
| 69 | cspi_ipg_gate 55 | ||
| 70 | sdma_gate 56 | ||
| 71 | emi_slow_gate 57 | ||
| 72 | ipu_s 58 | ||
| 73 | ipu_gate 59 | ||
| 74 | nfc_gate 60 | ||
| 75 | ipu_di1_gate 61 | ||
| 76 | vpu_s 62 | ||
| 77 | vpu_gate 63 | ||
| 78 | vpu_reference_gate 64 | ||
| 79 | uart4_ipg_gate 65 | ||
| 80 | uart4_per_gate 66 | ||
| 81 | uart5_ipg_gate 67 | ||
| 82 | uart5_per_gate 68 | ||
| 83 | tve_gate 69 | ||
| 84 | tve_pred 70 | ||
| 85 | esdhc1_per_gate 71 | ||
| 86 | esdhc2_per_gate 72 | ||
| 87 | esdhc3_per_gate 73 | ||
| 88 | esdhc4_per_gate 74 | ||
| 89 | usb_phy_gate 75 | ||
| 90 | hsi2c_gate 76 | ||
| 91 | mipi_hsc1_gate 77 | ||
| 92 | mipi_hsc2_gate 78 | ||
| 93 | mipi_esc_gate 79 | ||
| 94 | mipi_hsp_gate 80 | ||
| 95 | ldb_di1_div_3_5 81 | ||
| 96 | ldb_di1_div 82 | ||
| 97 | ldb_di0_div_3_5 83 | ||
| 98 | ldb_di0_div 84 | ||
| 99 | ldb_di1_gate 85 | ||
| 100 | can2_serial_gate 86 | ||
| 101 | can2_ipg_gate 87 | ||
| 102 | i2c3_gate 88 | ||
| 103 | lp_apm 89 | ||
| 104 | periph_apm 90 | ||
| 105 | main_bus 91 | ||
| 106 | ahb_max 92 | ||
| 107 | aips_tz1 93 | ||
| 108 | aips_tz2 94 | ||
| 109 | tmax1 95 | ||
| 110 | tmax2 96 | ||
| 111 | tmax3 97 | ||
| 112 | spba 98 | ||
| 113 | uart_sel 99 | ||
| 114 | esdhc_a_sel 100 | ||
| 115 | esdhc_b_sel 101 | ||
| 116 | esdhc_a_podf 102 | ||
| 117 | esdhc_b_podf 103 | ||
| 118 | ecspi_sel 104 | ||
| 119 | usboh3_sel 105 | ||
| 120 | usb_phy_sel 106 | ||
| 121 | iim_gate 107 | ||
| 122 | usboh3_gate 108 | ||
| 123 | emi_fast_gate 109 | ||
| 124 | ipu_di0_gate 110 | ||
| 125 | gpc_dvfs 111 | ||
| 126 | pll1_sw 112 | ||
| 127 | pll2_sw 113 | ||
| 128 | pll3_sw 114 | ||
| 129 | ipu_di0_sel 115 | ||
| 130 | ipu_di1_sel 116 | ||
| 131 | tve_ext_sel 117 | ||
| 132 | mx51_mipi 118 | ||
| 133 | pll4_sw 119 | ||
| 134 | ldb_di1_sel 120 | ||
| 135 | di_pll4_podf 121 | ||
| 136 | ldb_di0_sel 122 | ||
| 137 | ldb_di0_gate 123 | ||
| 138 | usb_phy1_gate 124 | ||
| 139 | usb_phy2_gate 125 | ||
| 140 | per_lp_apm 126 | ||
| 141 | per_pred1 127 | ||
| 142 | per_pred2 128 | ||
| 143 | per_podf 129 | ||
| 144 | per_root 130 | ||
| 145 | ssi_apm 131 | ||
| 146 | ssi1_root_sel 132 | ||
| 147 | ssi2_root_sel 133 | ||
| 148 | ssi3_root_sel 134 | ||
| 149 | ssi_ext1_sel 135 | ||
| 150 | ssi_ext2_sel 136 | ||
| 151 | ssi_ext1_com_sel 137 | ||
| 152 | ssi_ext2_com_sel 138 | ||
| 153 | ssi1_root_pred 139 | ||
| 154 | ssi1_root_podf 140 | ||
| 155 | ssi2_root_pred 141 | ||
| 156 | ssi2_root_podf 142 | ||
| 157 | ssi_ext1_pred 143 | ||
| 158 | ssi_ext1_podf 144 | ||
| 159 | ssi_ext2_pred 145 | ||
| 160 | ssi_ext2_podf 146 | ||
| 161 | ssi1_root_gate 147 | ||
| 162 | ssi2_root_gate 148 | ||
| 163 | ssi3_root_gate 149 | ||
| 164 | ssi_ext1_gate 150 | ||
| 165 | ssi_ext2_gate 151 | ||
| 166 | epit1_ipg_gate 152 | ||
| 167 | epit1_hf_gate 153 | ||
| 168 | epit2_ipg_gate 154 | ||
| 169 | epit2_hf_gate 155 | ||
| 170 | can_sel 156 | ||
| 171 | can1_serial_gate 157 | ||
| 172 | can1_ipg_gate 158 | ||
| 173 | owire_gate 159 | ||
| 174 | gpu3d_s 160 | ||
| 175 | gpu2d_s 161 | ||
| 176 | gpu3d_gate 162 | ||
| 177 | gpu2d_gate 163 | ||
| 178 | garb_gate 164 | ||
| 179 | cko1_sel 165 | ||
| 180 | cko1_podf 166 | ||
| 181 | cko1 167 | ||
| 182 | cko2_sel 168 | ||
| 183 | cko2_podf 169 | ||
| 184 | cko2 170 | ||
| 185 | srtc_gate 171 | ||
| 186 | pata_gate 172 | ||
| 187 | sata_gate 173 | ||
| 188 | spdif_xtal_sel 174 | ||
| 189 | spdif0_sel 175 | ||
| 190 | spdif1_sel 176 | ||
| 191 | spdif0_pred 177 | ||
| 192 | spdif0_podf 178 | ||
| 193 | spdif1_pred 179 | ||
| 194 | spdif1_podf 180 | ||
| 195 | spdif0_com_sel 181 | ||
| 196 | spdif1_com_sel 182 | ||
| 197 | spdif0_gate 183 | ||
| 198 | spdif1_gate 184 | ||
| 199 | spdif_ipg_gate 185 | ||
| 200 | ocram 186 | ||
| 201 | 12 | ||
| 202 | Examples (for mx53): | 13 | Examples (for mx53): |
| 203 | 14 | ||
| @@ -212,7 +23,7 @@ can1: can@53fc8000 { · 8 unmodified lines | |||
| 212 | compatible = "fsl,imx53-flexcan", "fsl,p1010-flexcan"; | 23 | compatible = "fsl,imx53-flexcan", "fsl,p1010-flexcan"; |
| 213 | reg = <0x53fc8000 0x4000>; | 24 | reg = <0x53fc8000 0x4000>; |
| 214 | interrupts = <82>; | 25 | interrupts = <82>; |
| 215 | clocks = <&clks 158>, <&clks 157>; | 26 | clocks = <&clks IMX5_CLK_CAN1_IPG_GATE>, <&clks IMX5_CLK_CAN1_SERIAL_GATE>; |
| 216 | clock-names = "ipg", "per"; | 27 | clock-names = "ipg", "per"; |
| 217 | status = "disabled"; | 28 | status = "disabled"; |
| 218 | }; | 29 | }; |
| @@ -17,13 +17,14 @@ Required properties: · 16 unmodified lines | |||
| 17 | - reg - pll control0 and pll multipler registers | 17 | - reg - pll control0 and pll multipler registers |
| 18 | - reg-names : control and multiplier. The multiplier is applicable only for | 18 | - reg-names : control and multiplier. The multiplier is applicable only for |
| 19 | main pll clock | 19 | main pll clock |
| 20 | - fixed-postdiv : fixed post divider value | 20 | - fixed-postdiv : fixed post divider value. If absent, use clkod register bits |
| 21 | for postdiv | ||
| 21 | 22 | ||
| 22 | Example: | 23 | Example: |
| 23 | mainpllclk: mainpllclk@2310110 { | 24 | mainpllclk: mainpllclk@2310110 { |
| 24 | #clock-cells = <0>; | 25 | #clock-cells = <0>; |
| 25 | compatible = "ti,keystone,main-pll-clock"; | 26 | compatible = "ti,keystone,main-pll-clock"; |
| 26 | clocks = <&refclkmain>; | 27 | clocks = <&refclksys>; |
| 27 | reg = <0x02620350 4>, <0x02310110 4>; | 28 | reg = <0x02620350 4>, <0x02310110 4>; |
| 28 | reg-names = "control", "multiplier"; | 29 | reg-names = "control", "multiplier"; |
| 29 | fixed-postdiv = <2>; | 30 | fixed-postdiv = <2>; |
| @@ -32,11 +33,10 @@ Example: · 2 unmodified lines | |||
| 32 | papllclk: papllclk@2620358 { | 33 | papllclk: papllclk@2620358 { |
| 33 | #clock-cells = <0>; | 34 | #clock-cells = <0>; |
| 34 | compatible = "ti,keystone,pll-clock"; | 35 | compatible = "ti,keystone,pll-clock"; |
| 35 | clocks = <&refclkmain>; | 36 | clocks = <&refclkpass>; |
| 36 | clock-output-names = "pa-pll-clk"; | 37 | clock-output-names = "pa-pll-clk"; |
| 37 | reg = <0x02620358 4>; | 38 | reg = <0x02620358 4>; |
| 38 | reg-names = "control"; | 39 | reg-names = "control"; |
| 39 | fixed-postdiv = <6>; | ||
| 40 | }; | 40 | }; |
| 41 | 41 | ||
| 42 | Required properties: | 42 | Required properties: |
| @@ -0,0 +1,38 @@ | |||
| 1 | Binding for Maxim MAX77686 32k clock generator block | ||
| 2 | |||
| 3 | This is a part of device tree bindings of MAX77686 multi-function device. | ||
| 4 | More information can be found in bindings/mfd/max77686.txt file. | ||
| 5 | |||
| 6 | The MAX77686 contains three 32.768khz clock outputs that can be controlled | ||
| 7 | (gated/ungated) over I2C. | ||
| 8 | |||
| 9 | Following properties should be presend in main device node of the MFD chip. | ||
| 10 | |||
| 11 | Required properties: | ||
| 12 | - #clock-cells: simple one-cell clock specifier format is used, where the | ||
| 13 | only cell is used as an index of the clock inside the provider. Following | ||
| 14 | indices are allowed: | ||
| 15 | - 0: 32khz_ap clock, | ||
| 16 | - 1: 32khz_cp clock, | ||
| 17 | - 2: 32khz_pmic clock. | ||
| 18 | |||
| 19 | Example: Node of the MFD chip | ||
| 20 | |||
| 21 | max77686: max77686@09 { | ||
| 22 | compatible = "maxim,max77686"; | ||
| 23 | interrupt-parent = <&wakeup_eint>; | ||
| 24 | interrupts = <26 0>; | ||
| 25 | reg = <0x09>; | ||
| 26 | #clock-cells = <1>; | ||
| 27 | |||
| 28 | /* ... */ | ||
| 29 | }; | ||
| 30 | |||
| 31 | Example: Clock consumer node | ||
| 32 | |||
| 33 | foo@0 { | ||
| 34 | compatible = "bar,foo"; | ||
| 35 | /* ... */ | ||
| 36 | clock-names = "my-clock"; | ||
| 37 | clocks = <&max77686 2>; | ||
| 38 | }; | ||
| @@ -15,6 +15,9 @@ Required properties : · 14 unmodified lines | |||
| 15 | In clock consumers, this cell represents the clock ID exposed by the | 15 | In clock consumers, this cell represents the clock ID exposed by the |
| 16 | CAR. The assignments may be found in header file | 16 | CAR. The assignments may be found in header file |
| 17 | <dt-bindings/clock/tegra114-car.h>. | 17 | <dt-bindings/clock/tegra114-car.h>. |
| 18 | - #reset-cells : Should be 1. | ||
| 19 | In clock consumers, this cell represents the bit number in the CAR's | ||
| 20 | array of CLK_RST_CONTROLLER_RST_DEVICES_* registers. | ||
| 18 | 21 | ||
| 19 | Example SoC include file: | 22 | Example SoC include file: |
| 20 | 23 | ||
| @@ -23,6 +26,7 @@ Example SoC include file: · 2 unmodified lines | |||
| 23 | compatible = "nvidia,tegra114-car"; | 26 | compatible = "nvidia,tegra114-car"; |
| 24 | reg = <0x60006000 0x1000>; | 27 | reg = <0x60006000 0x1000>; |
| 25 | #clock-cells = <1>; | 28 | #clock-cells = <1>; |
| 29 | #reset-cells = <1>; | ||
| 26 | }; | 30 | }; |
| 27 | 31 | ||
| 28 | usb@c5004000 { | 32 | usb@c5004000 { |
| @@ -0,0 +1,63 @@ | |||
| 1 | NVIDIA Tegra124 Clock And Reset Controller | ||
| 2 | |||
| 3 | This binding uses the common clock binding: | ||
| 4 | Documentation/devicetree/bindings/clock/clock-bindings.txt | ||
| 5 | |||
| 6 | The CAR (Clock And Reset) Controller on Tegra is the HW module responsible | ||
| 7 | for muxing and gating Tegra's clocks, and setting their rates. | ||
| 8 | |||
| 9 | Required properties : | ||
| 10 | - compatible : Should be "nvidia,tegra124-car" | ||
| 11 | - reg : Should contain CAR registers location and length | ||
| 12 | - clocks : Should contain phandle and clock specifiers for two clocks: | ||
| 13 | the 32 KHz "32k_in", and the board-specific oscillator "osc". | ||
| 14 | - #clock-cells : Should be 1. | ||
| 15 | In clock consumers, this cell represents the clock ID exposed by the | ||
| 16 | CAR. The assignments may be found in header file | ||
| 17 | <dt-bindings/clock/tegra124-car.h>. | ||
| 18 | - #reset-cells : Should be 1. | ||
| 19 | In clock consumers, this cell represents the bit number in the CAR's | ||
| 20 | array of CLK_RST_CONTROLLER_RST_DEVICES_* registers. | ||
| 21 | |||
| 22 | Example SoC include file: | ||
| 23 | |||
| 24 | / { | ||
| 25 | tegra_car: clock { | ||
| 26 | compatible = "nvidia,tegra124-car"; | ||
| 27 | reg = <0x60006000 0x1000>; | ||
| 28 | #clock-cells = <1>; | ||
| 29 | #reset-cells = <1>; | ||
| 30 | }; | ||
| 31 | |||
| 32 | usb@c5004000 { | ||
| 33 | clocks = <&tegra_car TEGRA124_CLK_USB2>; | ||
| 34 | }; | ||
| 35 | }; | ||
| 36 | |||
| 37 | Example board file: | ||
| 38 | |||
| 39 | / { | ||
| 40 | clocks { | ||
| 41 | compatible = "simple-bus"; | ||
| 42 | #address-cells = <1>; | ||
| 43 | #size-cells = <0>; | ||
| 44 | |||
| 45 | osc: clock@0 { | ||
| 46 | compatible = "fixed-clock"; | ||
| 47 | reg = <0>; | ||
| 48 | #clock-cells = <0>; | ||
| 49 | clock-frequency = <112400000>; | ||
| 50 | }; | ||
| 51 | |||
| 52 | clk_32k: clock@1 { | ||
| 53 | compatible = "fixed-clock"; | ||
| 54 | reg = <1>; | ||
| 55 | #clock-cells = <0>; | ||
| 56 | clock-frequency = <32768>; | ||
| 57 | }; | ||
| 58 | }; | ||
| 59 | |||
| 60 | &tegra_car { | ||
| 61 | clocks = <&clk_32k> <&osc>; | ||
| 62 | }; | ||
| 63 | }; | ||
| @@ -15,6 +15,9 @@ Required properties : · 14 unmodified lines | |||
| 15 | In clock consumers, this cell represents the clock ID exposed by the | 15 | In clock consumers, this cell represents the clock ID exposed by the |
| 16 | CAR. The assignments may be found in header file | 16 | CAR. The assignments may be found in header file |
| 17 | <dt-bindings/clock/tegra20-car.h>. | 17 | <dt-bindings/clock/tegra20-car.h>. |
| 18 | - #reset-cells : Should be 1. | ||
| 19 | In clock consumers, this cell represents the bit number in the CAR's | ||
| 20 | array of CLK_RST_CONTROLLER_RST_DEVICES_* registers. | ||
| 18 | 21 | ||
| 19 | Example SoC include file: | 22 | Example SoC include file: |
| 20 | 23 | ||
| @@ -23,6 +26,7 @@ Example SoC include file: · 2 unmodified lines | |||
| 23 | compatible = "nvidia,tegra20-car"; | 26 | compatible = "nvidia,tegra20-car"; |
| 24 | reg = <0x60006000 0x1000>; | 27 | reg = <0x60006000 0x1000>; |
| 25 | #clock-cells = <1>; | 28 | #clock-cells = <1>; |
| 29 | #reset-cells = <1>; | ||
| 26 | }; | 30 | }; |
| 27 | 31 | ||
| 28 | usb@c5004000 { | 32 | usb@c5004000 { |
| @@ -15,6 +15,9 @@ Required properties : · 14 unmodified lines | |||
| 15 | In clock consumers, this cell represents the clock ID exposed by the | 15 | In clock consumers, this cell represents the clock ID exposed by the |
| 16 | CAR. The assignments may be found in header file | 16 | CAR. The assignments may be found in header file |
| 17 | <dt-bindings/clock/tegra30-car.h>. | 17 | <dt-bindings/clock/tegra30-car.h>. |
| 18 | - #reset-cells : Should be 1. | ||
| 19 | In clock consumers, this cell represents the bit number in the CAR's | ||
| 20 | array of CLK_RST_CONTROLLER_RST_DEVICES_* registers. | ||
| 18 | 21 | ||
| 19 | Example SoC include file: | 22 | Example SoC include file: |
| 20 | 23 | ||
| @@ -23,6 +26,7 @@ Example SoC include file: · 2 unmodified lines | |||
| 23 | compatible = "nvidia,tegra30-car"; | 26 | compatible = "nvidia,tegra30-car"; |
| 24 | reg = <0x60006000 0x1000>; | 27 | reg = <0x60006000 0x1000>; |
| 25 | #clock-cells = <1>; | 28 | #clock-cells = <1>; |
| 29 | #reset-cells = <1>; | ||
| 26 | }; | 30 | }; |
| 27 | 31 | ||
| 28 | usb@c5004000 { | 32 | usb@c5004000 { |
| @@ -0,0 +1,21 @@ | |||
| 1 | Qualcomm Global Clock & Reset Controller Binding | ||
| 2 | ------------------------------------------------ | ||
| 3 | |||
| 4 | Required properties : | ||
| 5 | - compatible : shall contain only one of the following: | ||
| 6 | |||
| 7 | "qcom,gcc-msm8660" | ||
| 8 | "qcom,gcc-msm8960" | ||
| 9 | "qcom,gcc-msm8974" | ||
| 10 | |||
| 11 | - reg : shall contain base register location and length | ||
| 12 | - #clock-cells : shall contain 1 | ||
| 13 | - #reset-cells : shall contain 1 | ||
| 14 | |||
| 15 | Example: | ||
| 16 | clock-controller@900000 { | ||
| 17 | compatible = "qcom,gcc-msm8960"; | ||
| 18 | reg = <0x900000 0x4000>; | ||
| 19 | #clock-cells = <1>; | ||
| 20 | #reset-cells = <1>; | ||
| 21 | }; | ||
| @@ -0,0 +1,21 @@ | |||
| 1 | Qualcomm Multimedia Clock & Reset Controller Binding | ||
| 2 | ---------------------------------------------------- | ||
| 3 | |||
| 4 | Required properties : | ||
| 5 | - compatible : shall contain only one of the following: | ||
| 6 | |||
| 7 | "qcom,mmcc-msm8660" | ||
| 8 | "qcom,mmcc-msm8960" | ||
| 9 | "qcom,mmcc-msm8974" | ||
| 10 | |||
| 11 | - reg : shall contain base register location and length | ||
| 12 | - #clock-cells : shall contain 1 | ||
| 13 | - #reset-cells : shall contain 1 | ||
| 14 | |||
| 15 | Example: | ||
| 16 | clock-controller@4000000 { | ||
| 17 | compatible = "qcom,mmcc-msm8960"; | ||
| 18 | reg = <0x4000000 0x1000>; | ||
| 19 | #clock-cells = <1>; | ||
| 20 | #reset-cells = <1>; | ||
| 21 | }; | ||
| @@ -0,0 +1,28 @@ | |||
| 1 | * Renesas CPG DIV6 Clock | ||
| 2 | |||
| 3 | The CPG DIV6 clocks are variable factor clocks provided by the Clock Pulse | ||
| 4 | Generator (CPG). They clock input is divided by a configurable factor from 1 | ||
| 5 | to 64. | ||
| 6 | |||
| 7 | Required Properties: | ||
| 8 | |||
| 9 | - compatible: Must be one of the following | ||
| 10 | - "renesas,r8a7790-div6-clock" for R8A7790 (R-Car H2) DIV6 clocks | ||
| 11 | - "renesas,r8a7791-div6-clock" for R8A7791 (R-Car M2) DIV6 clocks | ||
| 12 | - "renesas,cpg-div6-clock" for generic DIV6 clocks | ||
| 13 | - reg: Base address and length of the memory resource used by the DIV6 clock | ||
| 14 | - clocks: Reference to the parent clock | ||
| 15 | - #clock-cells: Must be 0 | ||
| 16 | - clock-output-names: The name of the clock as a free-form string | ||
| 17 | |||
| 18 | |||
| 19 | Example | ||
| 20 | ------- | ||
| 21 | |||
| 22 | sd2_clk: sd2_clk@e6150078 { | ||
| 23 | compatible = "renesas,r8a7790-div6-clock", "renesas,cpg-div6-clock"; | ||
| 24 | reg = <0 0xe6150078 0 4>; | ||
| 25 | clocks = <&pll1_div2_clk>; | ||
| 26 | #clock-cells = <0>; | ||
| 27 | clock-output-names = "sd2"; | ||
| 28 | }; | ||
| @@ -0,0 +1,51 @@ | |||
| 1 | * Renesas CPG Module Stop (MSTP) Clocks | ||
| 2 | |||
| 3 | The CPG can gate SoC device clocks. The gates are organized in groups of up to | ||
| 4 | 32 gates. | ||
| 5 | |||
| 6 | This device tree binding describes a single 32 gate clocks group per node. | ||
| 7 | Clocks are referenced by user nodes by the MSTP node phandle and the clock | ||
| 8 | index in the group, from 0 to 31. | ||
| 9 | |||
| 10 | Required Properties: | ||
| 11 | |||
| 12 | - compatible: Must be one of the following | ||
| 13 | - "renesas,r8a7790-mstp-clocks" for R8A7790 (R-Car H2) MSTP gate clocks | ||
| 14 | - "renesas,r8a7791-mstp-clocks" for R8A7791 (R-Car M2) MSTP gate clocks | ||
| 15 | - "renesas,cpg-mstp-clock" for generic MSTP gate clocks | ||
| 16 | - reg: Base address and length of the I/O mapped registers used by the MSTP | ||
| 17 | clocks. The first register is the clock control register and is mandatory. | ||
| 18 | The second register is the clock status register and is optional when not | ||
| 19 | implemented in hardware. | ||
| 20 | - clocks: Reference to the parent clocks, one per output clock. The parents | ||
| 21 | must appear in the same order as the output clocks. | ||
| 22 | - #clock-cells: Must be 1 | ||
| 23 | - clock-output-names: The name of the clocks as free-form strings | ||
| 24 | - renesas,indices: Indices of the gate clocks into the group (0 to 31) | ||
| 25 | |||
| 26 | The clocks, clock-output-names and renesas,indices properties contain one | ||
| 27 | entry per gate clock. The MSTP groups are sparsely populated. Unimplemented | ||
| 28 | gate clocks must not be declared. | ||
| 29 | |||
| 30 | |||
| 31 | Example | ||
| 32 | ------- | ||
| 33 | |||
| 34 | #include <dt-bindings/clock/r8a7790-clock.h> | ||
| 35 | |||
| 36 | mstp3_clks: mstp3_clks@e615013c { | ||
| 37 | compatible = "renesas,r8a7790-mstp-clocks", "renesas,cpg-mstp-clocks"; | ||
| 38 | reg = <0 0xe615013c 0 4>, <0 0xe6150048 0 4>; | ||
| 39 | clocks = <&cp_clk>, <&mmc1_clk>, <&sd3_clk>, <&sd2_clk>, | ||
| 40 | <&cpg_clocks R8A7790_CLK_SD1>, <&cpg_clocks R8A7790_CLK_SD0>, | ||
| 41 | <&mmc0_clk>; | ||
| 42 | #clock-cells = <1>; | ||
| 43 | clock-output-names = | ||
| 44 | "tpu0", "mmcif1", "sdhi3", "sdhi2", | ||
| 45 | "sdhi1", "sdhi0", "mmcif0"; | ||
| 46 | renesas,clock-indices = < | ||
| 47 | R8A7790_CLK_TPU0 R8A7790_CLK_MMCIF1 R8A7790_CLK_SDHI3 | ||
| 48 | R8A7790_CLK_SDHI2 R8A7790_CLK_SDHI1 R8A7790_CLK_SDHI0 | ||
| 49 | R8A7790_CLK_MMCIF0 | ||
| 50 | >; | ||
| 51 | }; | ||
| @@ -0,0 +1,32 @@ | |||
| 1 | * Renesas R-Car Gen2 Clock Pulse Generator (CPG) | ||
| 2 | |||
| 3 | The CPG generates core clocks for the R-Car Gen2 SoCs. It includes three PLLs | ||
| 4 | and several fixed ratio dividers. | ||
| 5 | |||
| 6 | Required Properties: | ||
| 7 | |||
| 8 | - compatible: Must be one of | ||
| 9 | - "renesas,r8a7790-cpg-clocks" for the r8a7790 CPG | ||
| 10 | - "renesas,r8a7791-cpg-clocks" for the r8a7791 CPG | ||
| 11 | - "renesas,rcar-gen2-cpg-clocks" for the generic R-Car Gen2 CPG | ||
| 12 | |||
| 13 | - reg: Base address and length of the memory resource used by the CPG | ||
| 14 | |||
| 15 | - clocks: Reference to the parent clock | ||
| 16 | - #clock-cells: Must be 1 | ||
| 17 | - clock-output-names: The names of the clocks. Supported clocks are "main", | ||
| 18 | "pll0", "pll1", "pll3", "lb", "qspi", "sdh", "sd0", "sd1" and "z" | ||
| 19 | |||
| 20 | |||
| 21 | Example | ||
| 22 | ------- | ||
| 23 | |||
| 24 | cpg_clocks: cpg_clocks@e6150000 { | ||
| 25 | compatible = "renesas,r8a7790-cpg-clocks", | ||
| 26 | "renesas,rcar-gen2-cpg-clocks"; | ||
| 27 | reg = <0 0xe6150000 0 0x1000>; | ||
| 28 | clocks = <&extal_clk>; | ||
| 29 | #clock-cells = <1>; | ||
| 30 | clock-output-names = "main", "pll0, "pll1", "pll3", | ||
| 31 | "lb", "qspi", "sdh", "sd0", "sd1", "z"; | ||
| 32 | }; | ||
| @@ -0,0 +1,39 @@ | |||
| 1 | Binding for Silicon Labs 570, 571, 598 and 599 programmable | ||
| 2 | I2C clock generators. | ||
| 3 | |||
| 4 | Reference | ||
| 5 | This binding uses the common clock binding[1]. Details about the devices can be | ||
| 6 | found in the data sheets[2][3]. | ||
| 7 | |||
| 8 | [1] Documentation/devicetree/bindings/clock/clock-bindings.txt | ||
| 9 | [2] Si570/571 Data Sheet | ||
| 10 | http://www.silabs.com/Support%20Documents/TechnicalDocs/si570.pdf | ||
| 11 | [3] Si598/599 Data Sheet | ||
| 12 | http://www.silabs.com/Support%20Documents/TechnicalDocs/si598-99.pdf | ||
| 13 | |||
| 14 | Required properties: | ||
| 15 | - compatible: Shall be one of "silabs,si570", "silabs,si571", | ||
| 16 | "silabs,si598", "silabs,si599" | ||
| 17 | - reg: I2C device address. | ||
| 18 | - #clock-cells: From common clock bindings: Shall be 0. | ||
| 19 | - factory-fout: Factory set default frequency. This frequency is part specific. | ||
| 20 | The correct frequency for the part used has to be provided in | ||
| 21 | order to generate the correct output frequencies. For more | ||
| 22 | details, please refer to the data sheet. | ||
| 23 | - temperature-stability: Temperature stability of the device in PPM. Should be | ||
| 24 | one of: 7, 20, 50 or 100. | ||
| 25 | |||
| 26 | Optional properties: | ||
| 27 | - clock-output-names: From common clock bindings. Recommended to be "si570". | ||
| 28 | - clock-frequency: Output frequency to generate. This defines the output | ||
| 29 | frequency set during boot. It can be reprogrammed during | ||
| 30 | runtime through the common clock framework. | ||
| 31 | |||
| 32 | Example: | ||
| 33 | si570: clock-generator@5d { | ||
| 34 | #clock-cells = <0>; | ||
| 35 | compatible = "silabs,si570"; | ||
| 36 | temperature-stability = <50>; | ||
| 37 | reg = <0x5d>; | ||
| 38 | factory-fout = <156250000>; | ||
| 39 | }; | ||
| @@ -7,8 +7,10 @@ This binding uses the common clock binding[1]. · 6 unmodified lines | |||
| 7 | Required properties: | 7 | Required properties: |
| 8 | - compatible : shall be one of the following: | 8 | - compatible : shall be one of the following: |
| 9 | "allwinner,sun4i-osc-clk" - for a gatable oscillator | 9 | "allwinner,sun4i-osc-clk" - for a gatable oscillator |
| 10 | "allwinner,sun4i-pll1-clk" - for the main PLL clock | 10 | "allwinner,sun4i-pll1-clk" - for the main PLL clock and PLL4 |
| 11 | "allwinner,sun6i-a31-pll1-clk" - for the main PLL clock on A31 | 11 | "allwinner,sun6i-a31-pll1-clk" - for the main PLL clock on A31 |
| 12 | "allwinner,sun4i-pll5-clk" - for the PLL5 clock | ||
| 13 | "allwinner,sun4i-pll6-clk" - for the PLL6 clock | ||
| 12 | "allwinner,sun4i-cpu-clk" - for the CPU multiplexer clock | 14 | "allwinner,sun4i-cpu-clk" - for the CPU multiplexer clock |
| 13 | "allwinner,sun4i-axi-clk" - for the AXI clock | 15 | "allwinner,sun4i-axi-clk" - for the AXI clock |
| 14 | "allwinner,sun4i-axi-gates-clk" - for the AXI gates | 16 | "allwinner,sun4i-axi-gates-clk" - for the AXI gates |
| @@ -33,10 +35,14 @@ Required properties: · 18 unmodified lines | |||
| 33 | "allwinner,sun7i-a20-apb1-gates-clk" - for the APB1 gates on A20 | 35 | "allwinner,sun7i-a20-apb1-gates-clk" - for the APB1 gates on A20 |
| 34 | "allwinner,sun6i-a31-apb2-div-clk" - for the APB2 gates on A31 | 36 | "allwinner,sun6i-a31-apb2-div-clk" - for the APB2 gates on A31 |
| 35 | "allwinner,sun6i-a31-apb2-gates-clk" - for the APB2 gates on A31 | 37 | "allwinner,sun6i-a31-apb2-gates-clk" - for the APB2 gates on A31 |
| 38 | "allwinner,sun4i-mod0-clk" - for the module 0 family of clocks | ||
| 39 | "allwinner,sun7i-a20-out-clk" - for the external output clocks | ||
| 36 | 40 | ||
| 37 | Required properties for all clocks: | 41 | Required properties for all clocks: |
| 38 | - reg : shall be the control register address for the clock. | 42 | - reg : shall be the control register address for the clock. |
| 39 | - clocks : shall be the input parent clock(s) phandle for the clock | 43 | - clocks : shall be the input parent clock(s) phandle for the clock. For |
| 44 | multiplexed clocks, the list order must match the hardware | ||
| 45 | programming order. | ||
| 40 | - #clock-cells : from common clock binding; shall be set to 0 except for | 46 | - #clock-cells : from common clock binding; shall be set to 0 except for |
| 41 | "allwinner,*-gates-clk" where it shall be set to 1 | 47 | "allwinner,*-gates-clk" where it shall be set to 1 |
| 42 | 48 | ||
| @@ -0,0 +1,31 @@ | |||
| 1 | Binding for Texas Instruments APLL clock. | ||
| 2 | |||
| 3 | Binding status: Unstable - ABI compatibility may be broken in the future | ||
| 4 | |||
| 5 | This binding uses the common clock binding[1]. It assumes a | ||
| 6 | register-mapped APLL with usually two selectable input clocks | ||
| 7 | (reference clock and bypass clock), with analog phase locked | ||
| 8 | loop logic for multiplying the input clock to a desired output | ||
| 9 | clock. This clock also typically supports different operation | ||
| 10 | modes (locked, low power stop etc.) APLL mostly behaves like | ||
| 11 | a subtype of a DPLL [2], although a simplified one at that. | ||
| 12 | |||
| 13 | [1] Documentation/devicetree/bindings/clock/clock-bindings.txt | ||
| 14 | [2] Documentation/devicetree/bindings/clock/ti/dpll.txt | ||
| 15 | |||
| 16 | Required properties: | ||
| 17 | - compatible : shall be "ti,dra7-apll-clock" | ||
| 18 | - #clock-cells : from common clock binding; shall be set to 0. | ||
| 19 | - clocks : link phandles of parent clocks (clk-ref and clk-bypass) | ||
| 20 | - reg : address and length of the register set for controlling the APLL. | ||
| 21 | It contains the information of registers in the following order: | ||
| 22 | "control" - contains the control register base address | ||
| 23 | "idlest" - contains the idlest register base address | ||
| 24 | |||
| 25 | Examples: | ||
| 26 | apll_pcie_ck: apll_pcie_ck@4a008200 { | ||
| 27 | #clock-cells = <0>; | ||
| 28 | clocks = <&apll_pcie_in_clk_mux>, <&dpll_pcie_ref_ck>; | ||
| 29 | reg = <0x4a00821c 0x4>, <0x4a008220 0x4>; | ||
| 30 | compatible = "ti,dra7-apll-clock"; | ||
| 31 | }; | ||
| @@ -0,0 +1,39 @@ | |||
| 1 | Binding for Texas Instruments autoidle clock. | ||
| 2 | |||
| 3 | Binding status: Unstable - ABI compatibility may be broken in the future | ||
| 4 | |||
| 5 | This binding uses the common clock binding[1]. It assumes a register mapped | ||
| 6 | clock which can be put to idle automatically by hardware based on the usage | ||
| 7 | and a configuration bit setting. Autoidle clock is never an individual | ||
| 8 | clock, it is always a derivative of some basic clock like a gate, divider, | ||
| 9 | or fixed-factor. | ||
| 10 | |||
| 11 | [1] Documentation/devicetree/bindings/clock/clock-bindings.txt | ||
| 12 | |||
| 13 | Required properties: | ||
| 14 | - reg : offset for the register controlling the autoidle | ||
| 15 | - ti,autoidle-shift : bit shift of the autoidle enable bit | ||
| 16 | - ti,invert-autoidle-bit : autoidle is enabled by setting the bit to 0 | ||
| 17 | |||
| 18 | Examples: | ||
| 19 | dpll_core_m4_ck: dpll_core_m4_ck { | ||
| 20 | #clock-cells = <0>; | ||
| 21 | compatible = "ti,divider-clock"; | ||
| 22 | clocks = <&dpll_core_x2_ck>; | ||
| 23 | ti,max-div = <31>; | ||
| 24 | ti,autoidle-shift = <8>; | ||
| 25 | reg = <0x2d38>; | ||
| 26 | ti,index-starts-at-one; | ||
| 27 | ti,invert-autoidle-bit; | ||
| 28 | }; | ||
| 29 | |||
| 30 | dpll_usb_clkdcoldo_ck: dpll_usb_clkdcoldo_ck { | ||
| 31 | #clock-cells = <0>; | ||
| 32 | compatible = "ti,fixed-factor-clock"; | ||
| 33 | clocks = <&dpll_usb_ck>; | ||
| 34 | ti,clock-div = <1>; | ||
| 35 | ti,autoidle-shift = <8>; | ||
| 36 | reg = <0x01b4>; | ||
| 37 | ti,clock-mult = <1>; | ||
| 38 | ti,invert-autoidle-bit; | ||
| 39 | }; | ||
| @@ -0,0 +1,24 @@ | |||
| 1 | Binding for Texas Instruments clockdomain. | ||
| 2 | |||
| 3 | Binding status: Unstable - ABI compatibility may be broken in the future | ||
| 4 | |||
| 5 | This binding uses the common clock binding[1] in consumer role. | ||
| 6 | Every clock on TI SoC belongs to one clockdomain, but software | ||
| 7 | only needs this information for specific clocks which require | ||
| 8 | their parent clockdomain to be controlled when the clock is | ||
| 9 | enabled/disabled. This binding doesn't define a new clock | ||
| 10 | binding type, it is used to group existing clock nodes under | ||
| 11 | hardware hierarchy. | ||
| 12 | |||
| 13 | [1] Documentation/devicetree/bindings/clock/clock-bindings.txt | ||
| 14 | |||
| 15 | Required properties: | ||
| 16 | - compatible : shall be "ti,clockdomain" | ||
| 17 | - #clock-cells : from common clock binding; shall be set to 0. | ||
| 18 | - clocks : link phandles of clocks within this domain | ||
| 19 | |||
| 20 | Examples: | ||
| 21 | dss_clkdm: dss_clkdm { | ||
| 22 | compatible = "ti,clockdomain"; | ||
| 23 | clocks = <&dss1_alwon_fck_3430es2>, <&dss_ick_3430es2>; | ||
| 24 | }; | ||
| @@ -0,0 +1,54 @@ | |||
| 1 | Binding for TI composite clock. | ||
| 2 | |||
| 3 | Binding status: Unstable - ABI compatibility may be broken in the future | ||
| 4 | |||
| 5 | This binding uses the common clock binding[1]. It assumes a | ||
| 6 | register-mapped composite clock with multiple different sub-types; | ||
| 7 | |||
| 8 | a multiplexer clock with multiple input clock signals or parents, one | ||
| 9 | of which can be selected as output, this behaves exactly as [2] | ||
| 10 | |||
| 11 | an adjustable clock rate divider, this behaves exactly as [3] | ||
| 12 | |||
| 13 | a gating function which can be used to enable and disable the output | ||
| 14 | clock, this behaves exactly as [4] | ||
| 15 | |||
| 16 | The binding must provide a list of the component clocks that shall be | ||
| 17 | merged to this clock. The component clocks shall be of one of the | ||
| 18 | "ti,*composite*-clock" types. | ||
| 19 | |||
| 20 | [1] Documentation/devicetree/bindings/clock/clock-bindings.txt | ||
| 21 | [2] Documentation/devicetree/bindings/clock/ti/mux.txt | ||
| 22 | [3] Documentation/devicetree/bindings/clock/ti/divider.txt | ||
| 23 | [4] Documentation/devicetree/bindings/clock/ti/gate.txt | ||
| 24 | |||
| 25 | Required properties: | ||
| 26 | - compatible : shall be: "ti,composite-clock" | ||
| 27 | - clocks : link phandles of component clocks | ||
| 28 | - #clock-cells : from common clock binding; shall be set to 0. | ||
| 29 | |||
| 30 | Examples: | ||
| 31 | |||
| 32 | usb_l4_gate_ick: usb_l4_gate_ick { | ||
| 33 | #clock-cells = <0>; | ||
| 34 | compatible = "ti,composite-interface-clock"; | ||
| 35 | clocks = <&l4_ick>; | ||
| 36 | ti,bit-shift = <5>; | ||
| 37 | reg = <0x0a10>; | ||
| 38 | }; | ||
| 39 | |||
| 40 | usb_l4_div_ick: usb_l4_div_ick { | ||
| 41 | #clock-cells = <0>; | ||
| 42 | compatible = "ti,composite-divider-clock"; | ||
| 43 | clocks = <&l4_ick>; | ||
| 44 | ti,bit-shift = <4>; | ||
| 45 | ti,max-div = <1>; | ||
| 46 | reg = <0x0a40>; | ||
| 47 | ti,index-starts-at-one; | ||
| 48 | }; | ||
| 49 | |||
| 50 | usb_l4_ick: usb_l4_ick { | ||
| 51 | #clock-cells = <0>; | ||
| 52 | compatible = "ti,composite-clock"; | ||
| 53 | clocks = <&usb_l4_gate_ick>, <&usb_l4_div_ick>; | ||
| 54 | }; | ||
| @@ -0,0 +1,114 @@ | |||
| 1 | Binding for TI divider clock | ||
| 2 | |||
| 3 | Binding status: Unstable - ABI compatibility may be broken in the future | ||
| 4 | |||
| 5 | This binding uses the common clock binding[1]. It assumes a | ||
| 6 | register-mapped adjustable clock rate divider that does not gate and has | ||
| 7 | only one input clock or parent. By default the value programmed into | ||
| 8 | the register is one less than the actual divisor value. E.g: | ||
| 9 | |||
| 10 | register value actual divisor value | ||
| 11 | 0 1 | ||
| 12 | 1 2 | ||
| 13 | 2 3 | ||
| 14 | |||
| 15 | This assumption may be modified by the following optional properties: | ||
| 16 | |||
| 17 | ti,index-starts-at-one - valid divisor values start at 1, not the default | ||
| 18 | of 0. E.g: | ||
| 19 | register value actual divisor value | ||
| 20 | 1 1 | ||
| 21 | 2 2 | ||
| 22 | 3 3 | ||
| 23 | |||
| 24 | ti,index-power-of-two - valid divisor values are powers of two. E.g: | ||
| 25 | register value actual divisor value | ||
| 26 | 0 1 | ||
| 27 | 1 2 | ||
| 28 | 2 4 | ||
| 29 | |||
| 30 | Additionally an array of valid dividers may be supplied like so: | ||
| 31 | |||
| 32 | ti,dividers = <4>, <8>, <0>, <16>; | ||
| 33 | |||
| 34 | Which will map the resulting values to a divisor table by their index: | ||
| 35 | register value actual divisor value | ||
| 36 | 0 4 | ||
| 37 | 1 8 | ||
| 38 | 2 <invalid divisor, skipped> | ||
| 39 | 3 16 | ||
| 40 | |||
| 41 | Any zero value in this array means the corresponding bit-value is invalid | ||
| 42 | and must not be used. | ||
| 43 | |||
| 44 | The binding must also provide the register to control the divider and | ||
| 45 | unless the divider array is provided, min and max dividers. Optionally | ||
| 46 | the number of bits to shift that mask, if necessary. If the shift value | ||
| 47 | is missing it is the same as supplying a zero shift. | ||
| 48 | |||
| 49 | This binding can also optionally provide support to the hardware autoidle | ||
| 50 | feature, see [2]. | ||
| 51 | |||
| 52 | [1] Documentation/devicetree/bindings/clock/clock-bindings.txt | ||
| 53 | [2] Documentation/devicetree/bindings/clock/ti/autoidle.txt | ||
| 54 | |||
| 55 | Required properties: | ||
| 56 | - compatible : shall be "ti,divider-clock" or "ti,composite-divider-clock". | ||
| 57 | - #clock-cells : from common clock binding; shall be set to 0. | ||
| 58 | - clocks : link to phandle of parent clock | ||
| 59 | - reg : offset for register controlling adjustable divider | ||
| 60 | |||
| 61 | Optional properties: | ||
| 62 | - clock-output-names : from common clock binding. | ||
| 63 | - ti,dividers : array of integers defining divisors | ||
| 64 | - ti,bit-shift : number of bits to shift the divider value, defaults to 0 | ||
| 65 | - ti,min-div : min divisor for dividing the input clock rate, only | ||
| 66 | needed if the first divisor is offset from the default value (1) | ||
| 67 | - ti,max-div : max divisor for dividing the input clock rate, only needed | ||
| 68 | if ti,dividers is not defined. | ||
| 69 | - ti,index-starts-at-one : valid divisor programming starts at 1, not zero, | ||
| 70 | only valid if ti,dividers is not defined. | ||
| 71 | - ti,index-power-of-two : valid divisor programming must be a power of two, | ||
| 72 | only valid if ti,dividers is not defined. | ||
| 73 | - ti,autoidle-shift : bit shift of the autoidle enable bit for the clock, | ||
| 74 | see [2] | ||
| 75 | - ti,invert-autoidle-bit : autoidle is enabled by setting the bit to 0, | ||
| 76 | see [2] | ||
| 77 | - ti,set-rate-parent : clk_set_rate is propagated to parent | ||
| 78 | |||
| 79 | Examples: | ||
| 80 | dpll_usb_m2_ck: dpll_usb_m2_ck@4a008190 { | ||
| 81 | #clock-cells = <0>; | ||
| 82 | compatible = "ti,divider-clock"; | ||
| 83 | clocks = <&dpll_usb_ck>; | ||
| 84 | ti,max-div = <127>; | ||
| 85 | reg = <0x190>; | ||
| 86 | ti,index-starts-at-one; | ||
| 87 | }; | ||
| 88 | |||
| 89 | aess_fclk: aess_fclk@4a004528 { | ||
| 90 | #clock-cells = <0>; | ||
| 91 | compatible = "ti,divider-clock"; | ||
| 92 | clocks = <&abe_clk>; | ||
| 93 | ti,bit-shift = <24>; | ||
| 94 | reg = <0x528>; | ||
| 95 | ti,max-div = <2>; | ||
| 96 | }; | ||
| 97 | |||
| 98 | dpll_core_m3x2_div_ck: dpll_core_m3x2_div_ck { | ||
| 99 | #clock-cells = <0>; | ||
| 100 | compatible = "ti,composite-divider-clock"; | ||
| 101 | clocks = <&dpll_core_x2_ck>; | ||
| 102 | ti,max-div = <31>; | ||
| 103 | reg = <0x0134>; | ||
| 104 | ti,index-starts-at-one; | ||
| 105 | }; | ||
| 106 | |||
| 107 | ssi_ssr_div_fck_3430es2: ssi_ssr_div_fck_3430es2 { | ||
| 108 | #clock-cells = <0>; | ||
| 109 | compatible = "ti,composite-divider-clock"; | ||
| 110 | clocks = <&corex2_fck>; | ||
| 111 | ti,bit-shift = <8>; | ||
| 112 | reg = <0x0a40>; | ||
| 113 | ti,dividers = <0>, <1>, <2>, <3>, <4>, <0>, <6>, <0>, <8>; | ||
| 114 | }; | ||
| @@ -0,0 +1,75 @@ | |||
| 1 | Binding for Texas Instruments DPLL clock. | ||
| 2 | |||
| 3 | Binding status: Unstable - ABI compatibility may be broken in the future | ||
| 4 | |||
| 5 | This binding uses the common clock binding[1]. It assumes a | ||
| 6 | register-mapped DPLL with usually two selectable input clocks | ||
| 7 | (reference clock and bypass clock), with digital phase locked | ||
| 8 | loop logic for multiplying the input clock to a desired output | ||
| 9 | clock. This clock also typically supports different operation | ||
| 10 | modes (locked, low power stop etc.) This binding has several | ||
| 11 | sub-types, which effectively result in slightly different setup | ||
| 12 | for the actual DPLL clock. | ||
| 13 | |||
| 14 | [1] Documentation/devicetree/bindings/clock/clock-bindings.txt | ||
| 15 | |||
| 16 | Required properties: | ||
| 17 | - compatible : shall be one of: | ||
| 18 | "ti,omap3-dpll-clock", | ||
| 19 | "ti,omap3-dpll-core-clock", | ||
| 20 | "ti,omap3-dpll-per-clock", | ||
| 21 | "ti,omap3-dpll-per-j-type-clock", | ||
| 22 | "ti,omap4-dpll-clock", | ||
| 23 | "ti,omap4-dpll-x2-clock", | ||
| 24 | "ti,omap4-dpll-core-clock", | ||
| 25 | "ti,omap4-dpll-m4xen-clock", | ||
| 26 | "ti,omap4-dpll-j-type-clock", | ||
| 27 | "ti,am3-dpll-no-gate-clock", | ||
| 28 | "ti,am3-dpll-j-type-clock", | ||
| 29 | "ti,am3-dpll-no-gate-j-type-clock", | ||
| 30 | "ti,am3-dpll-clock", | ||
| 31 | "ti,am3-dpll-core-clock", | ||
| 32 | "ti,am3-dpll-x2-clock", | ||
| 33 | |||
| 34 | - #clock-cells : from common clock binding; shall be set to 0. | ||
| 35 | - clocks : link phandles of parent clocks, first entry lists reference clock | ||
| 36 | and second entry bypass clock | ||
| 37 | - reg : offsets for the register set for controlling the DPLL. | ||
| 38 | Registers are listed in following order: | ||
| 39 | "control" - contains the control register base address | ||
| 40 | "idlest" - contains the idle status register base address | ||
| 41 | "mult-div1" - contains the multiplier / divider register base address | ||
| 42 | "autoidle" - contains the autoidle register base address (optional) | ||
| 43 | ti,am3-* dpll types do not have autoidle register | ||
| 44 | |||
| 45 | Optional properties: | ||
| 46 | - DPLL mode setting - defining any one or more of the following overrides | ||
| 47 | default setting. | ||
| 48 | - ti,low-power-stop : DPLL supports low power stop mode, gating output | ||
| 49 | - ti,low-power-bypass : DPLL output matches rate of parent bypass clock | ||
| 50 | - ti,lock : DPLL locks in programmed rate | ||
| 51 | |||
| 52 | Examples: | ||
| 53 | dpll_core_ck: dpll_core_ck@44e00490 { | ||
| 54 | #clock-cells = <0>; | ||
| 55 | compatible = "ti,omap4-dpll-core-clock"; | ||
| 56 | clocks = <&sys_clkin_ck>, <&sys_clkin_ck>; | ||
| 57 | reg = <0x490>, <0x45c>, <0x488>, <0x468>; | ||
| 58 | }; | ||
| 59 | |||
| 60 | dpll2_ck: dpll2_ck@48004004 { | ||
| 61 | #clock-cells = <0>; | ||
| 62 | compatible = "ti,omap3-dpll-clock"; | ||
| 63 | clocks = <&sys_ck>, <&dpll2_fck>; | ||
| 64 | ti,low-power-stop; | ||
| 65 | ti,low-power-bypass; | ||
| 66 | ti,lock; | ||
| 67 | reg = <0x4>, <0x24>, <0x34>, <0x40>; | ||
| 68 | }; | ||
| 69 | |||
| 70 | dpll_core_ck: dpll_core_ck@44e00490 { | ||
| 71 | #clock-cells = <0>; | ||
| 72 | compatible = "ti,am3-dpll-core-clock"; | ||
| 73 | clocks = <&sys_clkin_ck>, <&sys_clkin_ck>; | ||
| 74 | reg = <0x90>, <0x5c>, <0x68>; | ||
| 75 | }; | ||
| @@ -0,0 +1,43 @@ | |||
| 1 | Binding for TI fixed factor rate clock sources. | ||
| 2 | |||
| 3 | Binding status: Unstable - ABI compatibility may be broken in the future | ||
| 4 | |||
| 5 | This binding uses the common clock binding[1], and also uses the autoidle | ||
| 6 | support from TI autoidle clock [2]. | ||
| 7 | |||
| 8 | [1] Documentation/devicetree/bindings/clock/clock-bindings.txt | ||
| 9 | [2] Documentation/devicetree/bindings/clock/ti/autoidle.txt | ||
| 10 | |||
| 11 | Required properties: | ||
| 12 | - compatible : shall be "ti,fixed-factor-clock". | ||
| 13 | - #clock-cells : from common clock binding; shall be set to 0. | ||
| 14 | - ti,clock-div: fixed divider. | ||
| 15 | - ti,clock-mult: fixed multiplier. | ||
| 16 | - clocks: parent clock. | ||
| 17 | |||
| 18 | Optional properties: | ||
| 19 | - ti,autoidle-shift: bit shift of the autoidle enable bit for the clock, | ||
| 20 | see [2] | ||
| 21 | - reg: offset for the autoidle register of this clock, see [2] | ||
| 22 | - ti,invert-autoidle-bit: autoidle is enabled by setting the bit to 0, see [2] | ||
| 23 | - ti,set-rate-parent: clk_set_rate is propagated to parent | ||
| 24 | |||
| 25 | Example: | ||
| 26 | clock { | ||
| 27 | compatible = "ti,fixed-factor-clock"; | ||
| 28 | clocks = <&parentclk>; | ||
| 29 | #clock-cells = <0>; | ||
| 30 | ti,clock-div = <2>; | ||
| 31 | ti,clock-mult = <1>; | ||
| 32 | }; | ||
| 33 | |||
| 34 | dpll_usb_clkdcoldo_ck: dpll_usb_clkdcoldo_ck { | ||
| 35 | #clock-cells = <0>; | ||
| 36 | compatible = "ti,fixed-factor-clock"; | ||
| 37 | clocks = <&dpll_usb_ck>; | ||
| 38 | ti,clock-div = <1>; | ||
| 39 | ti,autoidle-shift = <8>; | ||
| 40 | reg = <0x01b4>; | ||
| 41 | ti,clock-mult = <1>; | ||
| 42 | ti,invert-autoidle-bit; | ||
| 43 | }; | ||
| @@ -0,0 +1,85 @@ | |||
| 1 | Binding for Texas Instruments gate clock. | ||
| 2 | |||
| 3 | Binding status: Unstable - ABI compatibility may be broken in the future | ||
| 4 | |||
| 5 | This binding uses the common clock binding[1]. This clock is | ||
| 6 | quite much similar to the basic gate-clock [2], however, | ||
| 7 | it supports a number of additional features. If no register | ||
| 8 | is provided for this clock, the code assumes that a clockdomain | ||
| 9 | will be controlled instead and the corresponding hw-ops for | ||
| 10 | that is used. | ||
| 11 | |||
| 12 | [1] Documentation/devicetree/bindings/clock/clock-bindings.txt | ||
| 13 | [2] Documentation/devicetree/bindings/clock/gate-clock.txt | ||
| 14 | [3] Documentation/devicetree/bindings/clock/ti/clockdomain.txt | ||
| 15 | |||
| 16 | Required properties: | ||
| 17 | - compatible : shall be one of: | ||
| 18 | "ti,gate-clock" - basic gate clock | ||
| 19 | "ti,wait-gate-clock" - gate clock which waits until clock is active before | ||
| 20 | returning from clk_enable() | ||
| 21 | "ti,dss-gate-clock" - gate clock with DSS specific hardware handling | ||
| 22 | "ti,am35xx-gate-clock" - gate clock with AM35xx specific hardware handling | ||
| 23 | "ti,clkdm-gate-clock" - clockdomain gate clock, which derives its functional | ||
| 24 | clock directly from a clockdomain, see [3] how | ||
| 25 | to map clockdomains properly | ||
| 26 | "ti,hsdiv-gate-clock" - gate clock with OMAP36xx specific hardware handling, | ||
| 27 | required for a hardware errata | ||
| 28 | - #clock-cells : from common clock binding; shall be set to 0 | ||
| 29 | - clocks : link to phandle of parent clock | ||
| 30 | - reg : offset for register controlling adjustable gate, not needed for | ||
| 31 | ti,clkdm-gate-clock type | ||
| 32 | |||
| 33 | Optional properties: | ||
| 34 | - ti,bit-shift : bit shift for programming the clock gate, invalid for | ||
| 35 | ti,clkdm-gate-clock type | ||
| 36 | - ti,set-bit-to-disable : inverts default gate programming. Setting the bit | ||
| 37 | gates the clock and clearing the bit ungates the clock. | ||
| 38 | |||
| 39 | Examples: | ||
| 40 | mmchs2_fck: mmchs2_fck@48004a00 { | ||
| 41 | #clock-cells = <0>; | ||
| 42 | compatible = "ti,gate-clock"; | ||
| 43 | clocks = <&core_96m_fck>; | ||
| 44 | reg = <0x48004a00 0x4>; | ||
| 45 | ti,bit-shift = <25>; | ||
| 46 | }; | ||
| 47 | |||
| 48 | uart4_fck_am35xx: uart4_fck_am35xx { | ||
| 49 | #clock-cells = <0>; | ||
| 50 | compatible = "ti,wait-gate-clock"; | ||
| 51 | clocks = <&core_48m_fck>; | ||
| 52 | reg = <0x0a00>; | ||
| 53 | ti,bit-shift = <23>; | ||
| 54 | }; | ||
| 55 | |||
| 56 | dss1_alwon_fck_3430es2: dss1_alwon_fck_3430es2@48004e00 { | ||
| 57 | #clock-cells = <0>; | ||
| 58 | compatible = "ti,dss-gate-clock"; | ||
| 59 | clocks = <&dpll4_m4x2_ck>; | ||
| 60 | reg = <0x48004e00 0x4>; | ||
| 61 | ti,bit-shift = <0>; | ||
| 62 | }; | ||
| 63 | |||
| 64 | emac_ick: emac_ick@4800259c { | ||
| 65 | #clock-cells = <0>; | ||
| 66 | compatible = "ti,am35xx-gate-clock"; | ||
| 67 | clocks = <&ipss_ick>; | ||
| 68 | reg = <0x4800259c 0x4>; | ||
| 69 | ti,bit-shift = <1>; | ||
| 70 | }; | ||
| 71 | |||
| 72 | emu_src_ck: emu_src_ck { | ||
| 73 | #clock-cells = <0>; | ||
| 74 | compatible = "ti,clkdm-gate-clock"; | ||
| 75 | clocks = <&emu_src_mux_ck>; | ||
| 76 | }; | ||
| 77 | |||
| 78 | dpll4_m2x2_ck: dpll4_m2x2_ck@48004d00 { | ||
| 79 | #clock-cells = <0>; | ||
| 80 | compatible = "ti,hsdiv-gate-clock"; | ||
| 81 | clocks = <&dpll4_m2x2_mul_ck>; | ||
| 82 | ti,bit-shift = <0x1b>; | ||
| 83 | reg = <0x48004d00 0x4>; | ||
| 84 | ti,set-bit-to-disable; | ||
| 85 | }; | ||
| @@ -0,0 +1,54 @@ | |||
| 1 | Binding for Texas Instruments interface clock. | ||
| 2 | |||
| 3 | Binding status: Unstable - ABI compatibility may be broken in the future | ||
| 4 | |||
| 5 | This binding uses the common clock binding[1]. This clock is | ||
| 6 | quite much similar to the basic gate-clock [2], however, | ||
| 7 | it supports a number of additional features, including | ||
| 8 | companion clock finding (match corresponding functional gate | ||
| 9 | clock) and hardware autoidle enable / disable. | ||
| 10 | |||
| 11 | [1] Documentation/devicetree/bindings/clock/clock-bindings.txt | ||
| 12 | [2] Documentation/devicetree/bindings/clock/gate-clock.txt | ||
| 13 | |||
| 14 | Required properties: | ||
| 15 | - compatible : shall be one of: | ||
| 16 | "ti,omap3-interface-clock" - basic OMAP3 interface clock | ||
| 17 | "ti,omap3-no-wait-interface-clock" - interface clock which has no hardware | ||
| 18 | capability for waiting clock to be ready | ||
| 19 | "ti,omap3-hsotgusb-interface-clock" - interface clock with USB specific HW | ||
| 20 | handling | ||
| 21 | "ti,omap3-dss-interface-clock" - interface clock with DSS specific HW handling | ||
| 22 | "ti,omap3-ssi-interface-clock" - interface clock with SSI specific HW handling | ||
| 23 | "ti,am35xx-interface-clock" - interface clock with AM35xx specific HW handling | ||
| 24 | - #clock-cells : from common clock binding; shall be set to 0 | ||
| 25 | - clocks : link to phandle of parent clock | ||
| 26 | - reg : base address for the control register | ||
| 27 | |||
| 28 | Optional properties: | ||
| 29 | - ti,bit-shift : bit shift for the bit enabling/disabling the clock (default 0) | ||
| 30 | |||
| 31 | Examples: | ||
| 32 | aes1_ick: aes1_ick@48004a14 { | ||
| 33 | #clock-cells = <0>; | ||
| 34 | compatible = "ti,omap3-interface-clock"; | ||
| 35 | clocks = <&security_l4_ick2>; | ||
| 36 | reg = <0x48004a14 0x4>; | ||
| 37 | ti,bit-shift = <3>; | ||
| 38 | }; | ||
| 39 | |||
| 40 | cam_ick: cam_ick@48004f10 { | ||
| 41 | #clock-cells = <0>; | ||
| 42 | compatible = "ti,omap3-no-wait-interface-clock"; | ||
| 43 | clocks = <&l4_ick>; | ||
| 44 | reg = <0x48004f10 0x4>; | ||
| 45 | ti,bit-shift = <0>; | ||
| 46 | }; | ||
| 47 | |||
| 48 | ssi_ick_3430es2: ssi_ick_3430es2@48004a10 { | ||
| 49 | #clock-cells = <0>; | ||
| 50 | compatible = "ti,omap3-ssi-interface-clock"; | ||
| 51 | clocks = <&ssi_l4_ick>; | ||
| 52 | reg = <0x48004a10 0x4>; | ||
| 53 | ti,bit-shift = <0>; | ||
| 54 | }; | ||
| @@ -0,0 +1,76 @@ | |||
| 1 | Binding for TI mux clock. | ||
| 2 | |||
| 3 | Binding status: Unstable - ABI compatibility may be broken in the future | ||
| 4 | |||
| 5 | This binding uses the common clock binding[1]. It assumes a | ||
| 6 | register-mapped multiplexer with multiple input clock signals or | ||
| 7 | parents, one of which can be selected as output. This clock does not | ||
| 8 | gate or adjust the parent rate via a divider or multiplier. | ||
| 9 | |||
| 10 | By default the "clocks" property lists the parents in the same order | ||
| 11 | as they are programmed into the regster. E.g: | ||
| 12 | |||
| 13 | clocks = <&foo_clock>, <&bar_clock>, <&baz_clock>; | ||
| 14 | |||
| 15 | results in programming the register as follows: | ||
| 16 | |||
| 17 | register value selected parent clock | ||
| 18 | 0 foo_clock | ||
| 19 | 1 bar_clock | ||
| 20 | 2 baz_clock | ||
| 21 | |||
| 22 | Some clock controller IPs do not allow a value of zero to be programmed | ||
| 23 | into the register, instead indexing begins at 1. The optional property | ||
| 24 | "index-starts-at-one" modified the scheme as follows: | ||
| 25 | |||
| 26 | register value selected clock parent | ||
| 27 | 1 foo_clock | ||
| 28 | 2 bar_clock | ||
| 29 | 3 baz_clock | ||
| 30 | |||
| 31 | The binding must provide the register to control the mux. Optionally | ||
| 32 | the number of bits to shift the control field in the register can be | ||
| 33 | supplied. If the shift value is missing it is the same as supplying | ||
| 34 | a zero shift. | ||
| 35 | |||
| 36 | [1] Documentation/devicetree/bindings/clock/clock-bindings.txt | ||
| 37 | |||
| 38 | Required properties: | ||
| 39 | - compatible : shall be "ti,mux-clock" or "ti,composite-mux-clock". | ||
| 40 | - #clock-cells : from common clock binding; shall be set to 0. | ||
| 41 | - clocks : link phandles of parent clocks | ||
| 42 | - reg : register offset for register controlling adjustable mux | ||
| 43 | |||
| 44 | Optional properties: | ||
| 45 | - ti,bit-shift : number of bits to shift the bit-mask, defaults to | ||
| 46 | 0 if not present | ||
| 47 | - ti,index-starts-at-one : valid input select programming starts at 1, not | ||
| 48 | zero | ||
| 49 | - ti,set-rate-parent : clk_set_rate is propagated to parent clock, | ||
| 50 | not supported by the composite-mux-clock subtype | ||
| 51 | |||
| 52 | Examples: | ||
| 53 | |||
| 54 | sys_clkin_ck: sys_clkin_ck@4a306110 { | ||
| 55 | #clock-cells = <0>; | ||
| 56 | compatible = "ti,mux-clock"; | ||
| 57 | clocks = <&virt_12000000_ck>, <&virt_13000000_ck>, <&virt_16800000_ck>, <&virt_19200000_ck>, <&virt_26000000_ck>, <&virt_27000000_ck>, <&virt_38400000_ck>; | ||
| 58 | reg = <0x0110>; | ||
| 59 | ti,index-starts-at-one; | ||
| 60 | }; | ||
| 61 | |||
| 62 | abe_dpll_bypass_clk_mux_ck: abe_dpll_bypass_clk_mux_ck@4a306108 { | ||
| 63 | #clock-cells = <0>; | ||
| 64 | compatible = "ti,mux-clock"; | ||
| 65 | clocks = <&sys_clkin_ck>, <&sys_32k_ck>; | ||
| 66 | ti,bit-shift = <24>; | ||
| 67 | reg = <0x0108>; | ||
| 68 | }; | ||
| 69 | |||
| 70 | mcbsp5_mux_fck: mcbsp5_mux_fck { | ||
| 71 | #clock-cells = <0>; | ||
| 72 | compatible = "ti,composite-mux-clock"; | ||
| 73 | clocks = <&core_96m_fck>, <&mcbsp_clks>; | ||
| 74 | ti,bit-shift = <4>; | ||
| 75 | reg = <0x02d8>; | ||
| 76 | }; | ||
| @@ -22,6 +22,10 @@ Required properties: · 21 unmodified lines | |||
| 22 | Optional properties: | 22 | Optional properties: |
| 23 | - clocks : as described in the clock bindings | 23 | - clocks : as described in the clock bindings |
| 24 | - clock-names : as described in the clock bindings | 24 | - clock-names : as described in the clock bindings |
| 25 | - fclk-enable : Bit mask to enable FCLKs statically at boot time. | ||
| 26 | Bit [0..3] correspond to FCLK0..FCLK3. The corresponding | ||
| 27 | FCLK will only be enabled if it is actually running at | ||
| 28 | boot time. | ||
| 25 | 29 | ||
| 26 | Clock inputs: | 30 | Clock inputs: |
| 27 | The following strings are optional parameters to the 'clock-names' property in | 31 | The following strings are optional parameters to the 'clock-names' property in |
| @@ -15,6 +15,10 @@ Optional properties: · 14 unmodified lines | |||
| 15 | - clock-latency: Specify the possible maximum transition latency for clock, | 15 | - clock-latency: Specify the possible maximum transition latency for clock, |
| 16 | in unit of nanoseconds. | 16 | in unit of nanoseconds. |
| 17 | - voltage-tolerance: Specify the CPU voltage tolerance in percentage. | 17 | - voltage-tolerance: Specify the CPU voltage tolerance in percentage. |
| 18 | - #cooling-cells: | ||
| 19 | - cooling-min-level: | ||
| 20 | - cooling-max-level: | ||
| 21 | Please refer to Documentation/devicetree/bindings/thermal/thermal.txt. | ||
| 18 | 22 | ||
| 19 | Examples: | 23 | Examples: |
| 20 | 24 | ||
| @@ -33,6 +37,9 @@ cpus { · 12 unmodified lines | |||
| 33 | 198000 850000 | 37 | 198000 850000 |
| 34 | >; | 38 | >; |
| 35 | clock-latency = <61036>; /* two CLK32 periods */ | 39 | clock-latency = <61036>; /* two CLK32 periods */ |
| 40 | #cooling-cells = <2>; | ||
| 41 | cooling-min-level = <0>; | ||
| 42 | cooling-max-level = <2>; | ||
| 36 | }; | 43 | }; |
| 37 | 44 | ||
| 38 | cpu@1 { | 45 | cpu@1 { |
| @@ -0,0 +1,68 @@ | |||
| 1 | * Atmel HW cryptographic accelerators | ||
| 2 | |||
| 3 | These are the HW cryptographic accelerators found on some Atmel products. | ||
| 4 | |||
| 5 | * Advanced Encryption Standard (AES) | ||
| 6 | |||
| 7 | Required properties: | ||
| 8 | - compatible : Should be "atmel,at91sam9g46-aes". | ||
| 9 | - reg: Should contain AES registers location and length. | ||
| 10 | - interrupts: Should contain the IRQ line for the AES. | ||
| 11 | - dmas: List of two DMA specifiers as described in | ||
| 12 | atmel-dma.txt and dma.txt files. | ||
| 13 | - dma-names: Contains one identifier string for each DMA specifier | ||
| 14 | in the dmas property. | ||
| 15 | |||
| 16 | Example: | ||
| 17 | aes@f8038000 { | ||
| 18 | compatible = "atmel,at91sam9g46-aes"; | ||
| 19 | reg = <0xf8038000 0x100>; | ||
| 20 | interrupts = <43 4 0>; | ||
| 21 | dmas = <&dma1 2 18>, | ||
| 22 | <&dma1 2 19>; | ||
| 23 | dma-names = "tx", "rx"; | ||
| 24 | |||
| 25 | * Triple Data Encryption Standard (Triple DES) | ||
| 26 | |||
| 27 | Required properties: | ||
| 28 | - compatible : Should be "atmel,at91sam9g46-tdes". | ||
| 29 | - reg: Should contain TDES registers location and length. | ||
| 30 | - interrupts: Should contain the IRQ line for the TDES. | ||
| 31 | |||
| 32 | Optional properties: | ||
| 33 | - dmas: List of two DMA specifiers as described in | ||
| 34 | atmel-dma.txt and dma.txt files. | ||
| 35 | - dma-names: Contains one identifier string for each DMA specifier | ||
| 36 | in the dmas property. | ||
| 37 | |||
| 38 | Example: | ||
| 39 | tdes@f803c000 { | ||
| 40 | compatible = "atmel,at91sam9g46-tdes"; | ||
| 41 | reg = <0xf803c000 0x100>; | ||
| 42 | interrupts = <44 4 0>; | ||
| 43 | dmas = <&dma1 2 20>, | ||
| 44 | <&dma1 2 21>; | ||
| 45 | dma-names = "tx", "rx"; | ||
| 46 | }; | ||
| 47 | |||
| 48 | * Secure Hash Algorithm (SHA) | ||
| 49 | |||
| 50 | Required properties: | ||
| 51 | - compatible : Should be "atmel,at91sam9g46-sha". | ||
| 52 | - reg: Should contain SHA registers location and length. | ||
| 53 | - interrupts: Should contain the IRQ line for the SHA. | ||
| 54 | |||
| 55 | Optional properties: | ||
| 56 | - dmas: One DMA specifiers as described in | ||
| 57 | atmel-dma.txt and dma.txt files. | ||
| 58 | - dma-names: Contains one identifier string for each DMA specifier | ||
| 59 | in the dmas property. Only one "tx" string needed. | ||
| 60 | |||
| 61 | Example: | ||
| 62 | sha@f8034000 { | ||
| 63 | compatible = "atmel,at91sam9g46-sha"; | ||
| 64 | reg = <0xf8034000 0x100>; | ||
| 65 | interrupts = <42 4 0>; | ||
| 66 | dmas = <&dma1 2 17>; | ||
| 67 | dma-names = "tx"; | ||
| 68 | }; | ||
| @@ -0,0 +1,17 @@ | |||
| 1 | Freescale DCP (Data Co-Processor) found on i.MX23/i.MX28 . | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible : Should be "fsl,<soc>-dcp" | ||
| 5 | - reg : Should contain MXS DCP registers location and length | ||
| 6 | - interrupts : Should contain MXS DCP interrupt numbers, VMI IRQ and DCP IRQ | ||
| 7 | must be supplied, optionally Secure IRQ can be present, but | ||
| 8 | is currently not implemented and not used. | ||
| 9 | |||
| 10 | Example: | ||
| 11 | |||
| 12 | dcp@80028000 { | ||
| 13 | compatible = "fsl,imx28-dcp", "fsl,imx23-dcp"; | ||
| 14 | reg = <0x80028000 0x2000>; | ||
| 15 | interrupts = <52 53>; | ||
| 16 | status = "okay"; | ||
| 17 | }; | ||
| @@ -0,0 +1,57 @@ | |||
| 1 | * BCM2835 DMA controller | ||
| 2 | |||
| 3 | The BCM2835 DMA controller has 16 channels in total. | ||
| 4 | Only the lower 13 channels have an associated IRQ. | ||
| 5 | Some arbitrary channels are used by the firmware | ||
| 6 | (1,3,6,7 in the current firmware version). | ||
| 7 | The channels 0,2 and 3 have special functionality | ||
| 8 | and should not be used by the driver. | ||
| 9 | |||
| 10 | Required properties: | ||
| 11 | - compatible: Should be "brcm,bcm2835-dma". | ||
| 12 | - reg: Should contain DMA registers location and length. | ||
| 13 | - interrupts: Should contain the DMA interrupts associated | ||
| 14 | to the DMA channels in ascending order. | ||
| 15 | - #dma-cells: Must be <1>, the cell in the dmas property of the | ||
| 16 | client device represents the DREQ number. | ||
| 17 | - brcm,dma-channel-mask: Bit mask representing the channels | ||
| 18 | not used by the firmware in ascending order, | ||
| 19 | i.e. first channel corresponds to LSB. | ||
| 20 | |||
| 21 | Example: | ||
| 22 | |||
| 23 | dma: dma@7e007000 { | ||
| 24 | compatible = "brcm,bcm2835-dma"; | ||
| 25 | reg = <0x7e007000 0xf00>; | ||
| 26 | interrupts = <1 16>, | ||
| 27 | <1 17>, | ||
| 28 | <1 18>, | ||
| 29 | <1 19>, | ||
| 30 | <1 20>, | ||
| 31 | <1 21>, | ||
| 32 | <1 22>, | ||
| 33 | <1 23>, | ||
| 34 | <1 24>, | ||
| 35 | <1 25>, | ||
| 36 | <1 26>, | ||
| 37 | <1 27>, | ||
| 38 | <1 28>; | ||
| 39 | |||
| 40 | #dma-cells = <1>; | ||
| 41 | brcm,dma-channel-mask = <0x7f35>; | ||
| 42 | }; | ||
| 43 | |||
| 44 | DMA clients connected to the BCM2835 DMA controller must use the format | ||
| 45 | described in the dma.txt file, using a two-cell specifier for each channel. | ||
| 46 | |||
| 47 | Example: | ||
| 48 | |||
| 49 | bcm2835_i2s: i2s@7e203000 { | ||
| 50 | compatible = "brcm,bcm2835-i2s"; | ||
| 51 | reg = < 0x7e203000 0x20>, | ||
| 52 | < 0x7e101098 0x02>; | ||
| 53 | |||
| 54 | dmas = <&dma 2>, | ||
| 55 | <&dma 3>; | ||
| 56 | dma-names = "tx", "rx"; | ||
| 57 | }; | ||
| @@ -42,6 +42,7 @@ The full ID of peripheral types can be found below. · 41 unmodified lines | |||
| 42 | 19 IPU Memory | 42 | 19 IPU Memory |
| 43 | 20 ASRC | 43 | 20 ASRC |
| 44 | 21 ESAI | 44 | 21 ESAI |
| 45 | 22 SSI Dual FIFO (needs firmware ver >= 2) | ||
| 45 | 46 | ||
| 46 | The third cell specifies the transfer priority as below. | 47 | The third cell specifies the transfer priority as below. |
| 47 | 48 | ||
| @@ -0,0 +1,45 @@ | |||
| 1 | MOXA ART DMA Controller | ||
| 2 | |||
| 3 | See dma.txt first | ||
| 4 | |||
| 5 | Required properties: | ||
| 6 | |||
| 7 | - compatible : Must be "moxa,moxart-dma" | ||
| 8 | - reg : Should contain registers location and length | ||
| 9 | - interrupts : Should contain an interrupt-specifier for the sole | ||
| 10 | interrupt generated by the device | ||
| 11 | - #dma-cells : Should be 1, a single cell holding a line request number | ||
| 12 | |||
| 13 | Example: | ||
| 14 | |||
| 15 | dma: dma@90500000 { | ||
| 16 | compatible = "moxa,moxart-dma"; | ||
| 17 | reg = <0x90500080 0x40>; | ||
| 18 | interrupts = <24 0>; | ||
| 19 | #dma-cells = <1>; | ||
| 20 | }; | ||
| 21 | |||
| 22 | |||
| 23 | Clients: | ||
| 24 | |||
| 25 | DMA clients connected to the MOXA ART DMA controller must use the format | ||
| 26 | described in the dma.txt file, using a two-cell specifier for each channel: | ||
| 27 | a phandle plus one integer cells. | ||
| 28 | The two cells in order are: | ||
| 29 | |||
| 30 | 1. A phandle pointing to the DMA controller. | ||
| 31 | 2. Peripheral identifier for the hardware handshaking interface. | ||
| 32 | |||
| 33 | Example: | ||
| 34 | Use specific request line passing from dma | ||
| 35 | For example, MMC request line is 5 | ||
| 36 | |||
| 37 | sdhci: sdhci@98e00000 { | ||
| 38 | compatible = "moxa,moxart-sdhci"; | ||
| 39 | reg = <0x98e00000 0x5C>; | ||
| 40 | interrupts = <5 0>; | ||
| 41 | clocks = <&clk_apb>; | ||
| 42 | dmas = <&dma 5>, | ||
| 43 | <&dma 5>; | ||
| 44 | dma-names = "tx", "rx"; | ||
| 45 | }; | ||
| @@ -50,6 +50,9 @@ Each dmas request consists of 4 cells: · 49 unmodified lines | |||
| 50 | 0x00000008: Use fixed channel: | 50 | 0x00000008: Use fixed channel: |
| 51 | Use automatic channel selection when unset | 51 | Use automatic channel selection when unset |
| 52 | Use DMA request line number when set | 52 | Use DMA request line number when set |
| 53 | 0x00000010: Set channel as high priority: | ||
| 54 | Normal priority when unset | ||
| 55 | High priority when set | ||
| 53 | 56 | ||
| 54 | Example: | 57 | Example: |
| 55 | 58 | ||
| @@ -5,6 +5,16 @@ Required properties: · 4 unmodified lines | |||
| 5 | - reg: Should contain DMA registers location and length. This shuld include | 5 | - reg: Should contain DMA registers location and length. This shuld include |
| 6 | all of the per-channel registers. | 6 | all of the per-channel registers. |
| 7 | - interrupts: Should contain all of the per-channel DMA interrupts. | 7 | - interrupts: Should contain all of the per-channel DMA interrupts. |
| 8 | - clocks: Must contain one entry, for the module clock. | ||
| 9 | See ../clocks/clock-bindings.txt for details. | ||
| 10 | - resets : Must contain an entry for each entry in reset-names. | ||
| 11 | See ../reset/reset.txt for details. | ||
| 12 | - reset-names : Must include the following entries: | ||
| 13 | - dma | ||
| 14 | - #dma-cells : Must be <1>. This dictates the length of DMA specifiers in | ||
| 15 | client nodes' dmas properties. The specifier represents the DMA request | ||
| 16 | select value for the peripheral. For more details, consult the Tegra TRM's | ||
| 17 | documentation of the APB DMA channel control register REQ_SEL field. | ||
| 8 | 18 | ||
| 9 | Examples: | 19 | Examples: |
| 10 | 20 | ||
| @@ -27,4 +37,8 @@ apbdma: dma@6000a000 { · 16 unmodified lines | |||
| 27 | 0 149 0x04 | 37 | 0 149 0x04 |
| 28 | 0 150 0x04 | 38 | 0 150 0x04 |
| 29 | 0 151 0x04 >; | 39 | 0 151 0x04 >; |
| 40 | clocks = <&tegra_car 34>; | ||
| 41 | resets = <&tegra_car 34>; | ||
| 42 | reset-names = "dma"; | ||
| 43 | #dma-cells = <1>; | ||
| 30 | }; | 44 | }; |
| @@ -2,7 +2,11 @@ EXTCON FOR PALMAS/TWL CHIPS · 1 unmodified line | |||
| 2 | 2 | ||
| 3 | PALMAS USB COMPARATOR | 3 | PALMAS USB COMPARATOR |
| 4 | Required Properties: | 4 | Required Properties: |
| 5 | - compatible : Should be "ti,palmas-usb" or "ti,twl6035-usb" | 5 | - compatible: should contain one of: |
| 6 | * "ti,palmas-usb-vid". | ||
| 7 | * "ti,twl6035-usb-vid". | ||
| 8 | * "ti,palmas-usb" (DEPRECATED - use "ti,palmas-usb-vid"). | ||
| 9 | * "ti,twl6035-usb" (DEPRECATED - use "ti,twl6035-usb-vid"). | ||
| 6 | 10 | ||
| 7 | Optional Properties: | 11 | Optional Properties: |
| 8 | - ti,wakeup : To enable the wakeup comparator in probe | 12 | - ti,wakeup : To enable the wakeup comparator in probe |
| @@ -0,0 +1,41 @@ | |||
| 1 | Davinci GPIO controller bindings | ||
| 2 | |||
| 3 | Required Properties: | ||
| 4 | - compatible: should be "ti,dm6441-gpio" | ||
| 5 | |||
| 6 | - reg: Physical base address of the controller and the size of memory mapped | ||
| 7 | registers. | ||
| 8 | |||
| 9 | - gpio-controller : Marks the device node as a gpio controller. | ||
| 10 | |||
| 11 | - interrupt-parent: phandle of the parent interrupt controller. | ||
| 12 | |||
| 13 | - interrupts: Array of GPIO interrupt number. Only banked or unbanked IRQs are | ||
| 14 | supported at a time. | ||
| 15 | |||
| 16 | - ti,ngpio: The number of GPIO pins supported. | ||
| 17 | |||
| 18 | - ti,davinci-gpio-unbanked: The number of GPIOs that have an individual interrupt | ||
| 19 | line to processor. | ||
| 20 | |||
| 21 | The GPIO controller also acts as an interrupt controller. It uses the default | ||
| 22 | two cells specifier as described in Documentation/devicetree/bindings/ | ||
| 23 | interrupt-controller/interrupts.txt. | ||
| 24 | |||
| 25 | Example: | ||
| 26 | |||
| 27 | gpio: gpio@1e26000 { | ||
| 28 | compatible = "ti,dm6441-gpio"; | ||
| 29 | gpio-controller; | ||
| 30 | reg = <0x226000 0x1000>; | ||
| 31 | interrupt-parent = <&intc>; | ||
| 32 | interrupts = <42 IRQ_TYPE_EDGE_BOTH 43 IRQ_TYPE_EDGE_BOTH | ||
| 33 | 44 IRQ_TYPE_EDGE_BOTH 45 IRQ_TYPE_EDGE_BOTH | ||
| 34 | 46 IRQ_TYPE_EDGE_BOTH 47 IRQ_TYPE_EDGE_BOTH | ||
| 35 | 48 IRQ_TYPE_EDGE_BOTH 49 IRQ_TYPE_EDGE_BOTH | ||
| 36 | 50 IRQ_TYPE_EDGE_BOTH>; | ||
| 37 | ti,ngpio = <144>; | ||
| 38 | ti,davinci-gpio-unbanked = <0>; | ||
| 39 | interrupt-controller; | ||
| 40 | #interrupt-cells = <2>; | ||
| 41 | }; | ||
| @@ -0,0 +1,37 @@ | |||
| 1 | TI/National Semiconductor LP3943 GPIO controller | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: "ti,lp3943-gpio" | ||
| 5 | - gpio-controller: Marks the device node as a GPIO controller. | ||
| 6 | - #gpio-cells: Should be 2. See gpio.txt in this directory for a | ||
| 7 | description of the cells format. | ||
| 8 | |||
| 9 | Example: | ||
| 10 | Simple LED controls with LP3943 GPIO controller | ||
| 11 | |||
| 12 | &i2c4 { | ||
| 13 | lp3943@60 { | ||
| 14 | compatible = "ti,lp3943"; | ||
| 15 | reg = <0x60>; | ||
| 16 | |||
| 17 | gpioex: gpio { | ||
| 18 | compatible = "ti,lp3943-gpio"; | ||
| 19 | gpio-controller; | ||
| 20 | #gpio-cells = <2>; | ||
| 21 | }; | ||
| 22 | }; | ||
| 23 | }; | ||
| 24 | |||
| 25 | leds { | ||
| 26 | compatible = "gpio-leds"; | ||
| 27 | indicator1 { | ||
| 28 | label = "indi1"; | ||
| 29 | gpios = <&gpioex 9 GPIO_ACTIVE_LOW>; | ||
| 30 | }; | ||
| 31 | |||
| 32 | indicator2 { | ||
| 33 | label = "indi2"; | ||
| 34 | gpios = <&gpioex 10 GPIO_ACTIVE_LOW>; | ||
| 35 | default-state = "off"; | ||
| 36 | }; | ||
| 37 | }; | ||
| @@ -38,12 +38,38 @@ Required device specific properties (only for SPI chips): · 37 unmodified lines | |||
| 38 | removed. | 38 | removed. |
| 39 | - spi-max-frequency = The maximum frequency this chip is able to handle | 39 | - spi-max-frequency = The maximum frequency this chip is able to handle |
| 40 | 40 | ||
| 41 | Example I2C: | 41 | Optional properties: |
| 42 | - #interrupt-cells : Should be two. | ||
| 43 | - first cell is the pin number | ||
| 44 | - second cell is used to specify flags. | ||
| 45 | - interrupt-controller: Marks the device node as a interrupt controller. | ||
| 46 | NOTE: The interrupt functionality is only supported for i2c versions of the | ||
| 47 | chips. The spi chips can also do the interrupts, but this is not supported by | ||
| 48 | the linux driver yet. | ||
| 49 | |||
| 50 | Optional device specific properties: | ||
| 51 | - microchip,irq-mirror: Sets the mirror flag in the IOCON register. Devices | ||
| 52 | with two interrupt outputs (these are the devices ending with 17 and | ||
| 53 | those that have 16 IOs) have two IO banks: IO 0-7 form bank 1 and | ||
| 54 | IO 8-15 are bank 2. These chips have two different interrupt outputs: | ||
| 55 | One for bank 1 and another for bank 2. If irq-mirror is set, both | ||
| 56 | interrupts are generated regardless of the bank that an input change | ||
| 57 | occured on. If it is not set, the interrupt are only generated for the | ||
| 58 | bank they belong to. | ||
| 59 | On devices with only one interrupt output this property is useless. | ||
| 60 | |||
| 61 | Example I2C (with interrupt): | ||
| 42 | gpiom1: gpio@20 { | 62 | gpiom1: gpio@20 { |
| 43 | compatible = "microchip,mcp23017"; | 63 | compatible = "microchip,mcp23017"; |
| 44 | gpio-controller; | 64 | gpio-controller; |
| 45 | #gpio-cells = <2>; | 65 | #gpio-cells = <2>; |
| 46 | reg = <0x20>; | 66 | reg = <0x20>; |
| 67 | |||
| 68 | interrupt-parent = <&gpio1>; | ||
| 69 | interrupts = <17 IRQ_TYPE_LEVEL_LOW>; | ||
| 70 | interrupt-controller; | ||
| 71 | #interrupt-cells=<2>; | ||
| 72 | microchip,irq-mirror; | ||
| 47 | }; | 73 | }; |
| 48 | 74 | ||
| 49 | Example SPI: | 75 | Example SPI: |
| @@ -0,0 +1,19 @@ | |||
| 1 | MOXA ART GPIO Controller | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | |||
| 5 | - #gpio-cells : Should be 2, The first cell is the pin number, | ||
| 6 | the second cell is used to specify polarity: | ||
| 7 | 0 = active high | ||
| 8 | 1 = active low | ||
| 9 | - compatible : Must be "moxa,moxart-gpio" | ||
| 10 | - reg : Should contain registers location and length | ||
| 11 | |||
| 12 | Example: | ||
| 13 | |||
| 14 | gpio: gpio@98700000 { | ||
| 15 | gpio-controller; | ||
| 16 | #gpio-cells = <2>; | ||
| 17 | compatible = "moxa,moxart-gpio"; | ||
| 18 | reg = <0x98700000 0xC>; | ||
| 19 | }; | ||
| @@ -2,10 +2,11 @@ · 1 unmodified line | |||
| 2 | 2 | ||
| 3 | Required Properties: | 3 | Required Properties: |
| 4 | 4 | ||
| 5 | - compatible: should be one of the following. | 5 | - compatible: should contain one of the following. |
| 6 | - "renesas,gpio-r8a7778": for R8A7778 (R-Mobile M1) compatible GPIO controller. | 6 | - "renesas,gpio-r8a7778": for R8A7778 (R-Mobile M1) compatible GPIO controller. |
| 7 | - "renesas,gpio-r8a7779": for R8A7779 (R-Car H1) compatible GPIO controller. | 7 | - "renesas,gpio-r8a7779": for R8A7779 (R-Car H1) compatible GPIO controller. |
| 8 | - "renesas,gpio-r8a7790": for R8A7790 (R-Car H2) compatible GPIO controller. | 8 | - "renesas,gpio-r8a7790": for R8A7790 (R-Car H2) compatible GPIO controller. |
| 9 | - "renesas,gpio-r8a7791": for R8A7791 (R-Car M2) compatible GPIO controller. | ||
| 9 | - "renesas,gpio-rcar": for generic R-Car GPIO controller. | 10 | - "renesas,gpio-rcar": for generic R-Car GPIO controller. |
| 10 | 11 | ||
| 11 | - reg: Base address and length of each memory resource used by the GPIO | 12 | - reg: Base address and length of each memory resource used by the GPIO |
| @@ -9,6 +9,12 @@ Required properties: · 8 unmodified lines | |||
| 9 | - #size-cells: The number of cells used to represent the size of an address | 9 | - #size-cells: The number of cells used to represent the size of an address |
| 10 | range in the host1x address space. Should be 1. | 10 | range in the host1x address space. Should be 1. |
| 11 | - ranges: The mapping of the host1x address space to the CPU address space. | 11 | - ranges: The mapping of the host1x address space to the CPU address space. |
| 12 | - clocks: Must contain one entry, for the module clock. | ||
| 13 | See ../clocks/clock-bindings.txt for details. | ||
| 14 | - resets: Must contain an entry for each entry in reset-names. | ||
| 15 | See ../reset/reset.txt for details. | ||
| 16 | - reset-names: Must include the following entries: | ||
| 17 | - host1x | ||
| 12 | 18 | ||
| 13 | The host1x top-level node defines a number of children, each representing one | 19 | The host1x top-level node defines a number of children, each representing one |
| 14 | of the following host1x client modules: | 20 | of the following host1x client modules: |
| @@ -19,6 +25,12 @@ of the following host1x client modules: · 4 unmodified lines | |||
| 19 | - compatible: "nvidia,tegra<chip>-mpe" | 25 | - compatible: "nvidia,tegra<chip>-mpe" |
| 20 | - reg: Physical base address and length of the controller's registers. | 26 | - reg: Physical base address and length of the controller's registers. |
| 21 | - interrupts: The interrupt outputs from the controller. | 27 | - interrupts: The interrupt outputs from the controller. |
| 28 | - clocks: Must contain one entry, for the module clock. | ||
| 29 | See ../clocks/clock-bindings.txt for details. | ||
| 30 | - resets: Must contain an entry for each entry in reset-names. | ||
| 31 | See ../reset/reset.txt for details. | ||
| 32 | - reset-names: Must include the following entries: | ||
| 33 | - mpe | ||
| 22 | 34 | ||
| 23 | - vi: video input | 35 | - vi: video input |
| 24 | 36 | ||
| @@ -26,6 +38,12 @@ of the following host1x client modules: · 1 unmodified line | |||
| 26 | - compatible: "nvidia,tegra<chip>-vi" | 38 | - compatible: "nvidia,tegra<chip>-vi" |
| 27 | - reg: Physical base address and length of the controller's registers. | 39 | - reg: Physical base address and length of the controller's registers. |
| 28 | - interrupts: The interrupt outputs from the controller. | 40 | - interrupts: The interrupt outputs from the controller. |
| 41 | - clocks: Must contain one entry, for the module clock. | ||
| 42 | See ../clocks/clock-bindings.txt for details. | ||
| 43 | - resets: Must contain an entry for each entry in reset-names. | ||
| 44 | See ../reset/reset.txt for details. | ||
| 45 | - reset-names: Must include the following entries: | ||
| 46 | - vi | ||
| 29 | 47 | ||
| 30 | - epp: encoder pre-processor | 48 | - epp: encoder pre-processor |
| 31 | 49 | ||
| @@ -33,6 +51,12 @@ of the following host1x client modules: · 1 unmodified line | |||
| 33 | - compatible: "nvidia,tegra<chip>-epp" | 51 | - compatible: "nvidia,tegra<chip>-epp" |
| 34 | - reg: Physical base address and length of the controller's registers. | 52 | - reg: Physical base address and length of the controller's registers. |
| 35 | - interrupts: The interrupt outputs from the controller. | 53 | - interrupts: The interrupt outputs from the controller. |
| 54 | - clocks: Must contain one entry, for the module clock. | ||
| 55 | See ../clocks/clock-bindings.txt for details. | ||
| 56 | - resets: Must contain an entry for each entry in reset-names. | ||
| 57 | See ../reset/reset.txt for details. | ||
| 58 | - reset-names: Must include the following entries: | ||
| 59 | - epp | ||
| 36 | 60 | ||
| 37 | - isp: image signal processor | 61 | - isp: image signal processor |
| 38 | 62 | ||
| @@ -40,6 +64,12 @@ of the following host1x client modules: · 1 unmodified line | |||
| 40 | - compatible: "nvidia,tegra<chip>-isp" | 64 | - compatible: "nvidia,tegra<chip>-isp" |
| 41 | - reg: Physical base address and length of the controller's registers. | 65 | - reg: Physical base address and length of the controller's registers. |
| 42 | - interrupts: The interrupt outputs from the controller. | 66 | - interrupts: The interrupt outputs from the controller. |
| 67 | - clocks: Must contain one entry, for the module clock. | ||
| 68 | See ../clocks/clock-bindings.txt for details. | ||
| 69 | - resets: Must contain an entry for each entry in reset-names. | ||
| 70 | See ../reset/reset.txt for details. | ||
| 71 | - reset-names: Must include the following entries: | ||
| 72 | - isp | ||
| 43 | 73 | ||
| 44 | - gr2d: 2D graphics engine | 74 | - gr2d: 2D graphics engine |
| 45 | 75 | ||
| @@ -47,12 +77,30 @@ of the following host1x client modules: · 1 unmodified line | |||
| 47 | - compatible: "nvidia,tegra<chip>-gr2d" | 77 | - compatible: "nvidia,tegra<chip>-gr2d" |
| 48 | - reg: Physical base address and length of the controller's registers. | 78 | - reg: Physical base address and length of the controller's registers. |
| 49 | - interrupts: The interrupt outputs from the controller. | 79 | - interrupts: The interrupt outputs from the controller. |
| 80 | - clocks: Must contain one entry, for the module clock. | ||
| 81 | See ../clocks/clock-bindings.txt for details. | ||
| 82 | - resets: Must contain an entry for each entry in reset-names. | ||
| 83 | See ../reset/reset.txt for details. | ||
| 84 | - reset-names: Must include the following entries: | ||
| 85 | - 2d | ||
| 50 | 86 | ||
| 51 | - gr3d: 3D graphics engine | 87 | - gr3d: 3D graphics engine |
| 52 | 88 | ||
| 53 | Required properties: | 89 | Required properties: |
| 54 | - compatible: "nvidia,tegra<chip>-gr3d" | 90 | - compatible: "nvidia,tegra<chip>-gr3d" |
| 55 | - reg: Physical base address and length of the controller's registers. | 91 | - reg: Physical base address and length of the controller's registers. |
| 92 | - clocks: Must contain an entry for each entry in clock-names. | ||
| 93 | See ../clocks/clock-bindings.txt for details. | ||
| 94 | - clock-names: Must include the following entries: | ||
| 95 | (This property may be omitted if the only clock in the list is "3d") | ||
| 96 | - 3d | ||
| 97 | This MUST be the first entry. | ||
| 98 | - 3d2 (Only required on SoCs with two 3D clocks) | ||
| 99 | - resets: Must contain an entry for each entry in reset-names. | ||
| 100 | See ../reset/reset.txt for details. | ||
| 101 | - reset-names: Must include the following entries: | ||
| 102 | - 3d | ||
| 103 | - 3d2 (Only required on SoCs with two 3D clocks) | ||
| 56 | 104 | ||
| 57 | - dc: display controller | 105 | - dc: display controller |
| 58 | 106 | ||
| @@ -60,6 +108,19 @@ of the following host1x client modules: · 1 unmodified line | |||
| 60 | - compatible: "nvidia,tegra<chip>-dc" | 108 | - compatible: "nvidia,tegra<chip>-dc" |
| 61 | - reg: Physical base address and length of the controller's registers. | 109 | - reg: Physical base address and length of the controller's registers. |
| 62 | - interrupts: The interrupt outputs from the controller. | 110 | - interrupts: The interrupt outputs from the controller. |
| 111 | - clocks: Must contain an entry for each entry in clock-names. | ||
| 112 | See ../clocks/clock-bindings.txt for details. | ||
| 113 | - clock-names: Must include the following entries: | ||
| 114 | - dc | ||
| 115 | This MUST be the first entry. | ||
| 116 | - parent | ||
| 117 | - resets: Must contain an entry for each entry in reset-names. | ||
| 118 | See ../reset/reset.txt for details. | ||
| 119 | - reset-names: Must include the following entries: | ||
| 120 | - dc | ||
| 121 | - nvidia,head: The number of the display controller head. This is used to | ||
| 122 | setup the various types of output to receive video data from the given | ||
| 123 | head. | ||
| 63 | 124 | ||
| 64 | Each display controller node has a child node, named "rgb", that represents | 125 | Each display controller node has a child node, named "rgb", that represents |
| 65 | the RGB output associated with the controller. It can take the following | 126 | the RGB output associated with the controller. It can take the following |
| @@ -67,6 +128,7 @@ of the following host1x client modules: · 1 unmodified line | |||
| 67 | - nvidia,ddc-i2c-bus: phandle of an I2C controller used for DDC EDID probing | 128 | - nvidia,ddc-i2c-bus: phandle of an I2C controller used for DDC EDID probing |
| 68 | - nvidia,hpd-gpio: specifies a GPIO used for hotplug detection | 129 | - nvidia,hpd-gpio: specifies a GPIO used for hotplug detection |
| 69 | - nvidia,edid: supplies a binary EDID blob | 130 | - nvidia,edid: supplies a binary EDID blob |
| 131 | - nvidia,panel: phandle of a display panel | ||
| 70 | 132 | ||
| 71 | - hdmi: High Definition Multimedia Interface | 133 | - hdmi: High Definition Multimedia Interface |
| 72 | 134 | ||
| @@ -76,11 +138,22 @@ of the following host1x client modules: · 3 unmodified lines | |||
| 76 | - interrupts: The interrupt outputs from the controller. | 138 | - interrupts: The interrupt outputs from the controller. |
| 77 | - vdd-supply: regulator for supply voltage | 139 | - vdd-supply: regulator for supply voltage |
| 78 | - pll-supply: regulator for PLL | 140 | - pll-supply: regulator for PLL |
| 141 | - clocks: Must contain an entry for each entry in clock-names. | ||
| 142 | See ../clocks/clock-bindings.txt for details. | ||
| 143 | - clock-names: Must include the following entries: | ||
| 144 | - hdmi | ||
| 145 | This MUST be the first entry. | ||
| 146 | - parent | ||
| 147 | - resets: Must contain an entry for each entry in reset-names. | ||
| 148 | See ../reset/reset.txt for details. | ||
| 149 | - reset-names: Must include the following entries: | ||
| 150 | - hdmi | ||
| 79 | 151 | ||
| 80 | Optional properties: | 152 | Optional properties: |
| 81 | - nvidia,ddc-i2c-bus: phandle of an I2C controller used for DDC EDID probing | 153 | - nvidia,ddc-i2c-bus: phandle of an I2C controller used for DDC EDID probing |
| 82 | - nvidia,hpd-gpio: specifies a GPIO used for hotplug detection | 154 | - nvidia,hpd-gpio: specifies a GPIO used for hotplug detection |
| 83 | - nvidia,edid: supplies a binary EDID blob | 155 | - nvidia,edid: supplies a binary EDID blob |
| 156 | - nvidia,panel: phandle of a display panel | ||
| 84 | 157 | ||
| 85 | - tvo: TV encoder output | 158 | - tvo: TV encoder output |
| 86 | 159 | ||
| @@ -88,12 +161,34 @@ of the following host1x client modules: · 1 unmodified line | |||
| 88 | - compatible: "nvidia,tegra<chip>-tvo" | 161 | - compatible: "nvidia,tegra<chip>-tvo" |
| 89 | - reg: Physical base address and length of the controller's registers. | 162 | - reg: Physical base address and length of the controller's registers. |
| 90 | - interrupts: The interrupt outputs from the controller. | 163 | - interrupts: The interrupt outputs from the controller. |
| 164 | - clocks: Must contain one entry, for the module clock. | ||
| 165 | See ../clocks/clock-bindings.txt for details. | ||
| 91 | 166 | ||
| 92 | - dsi: display serial interface | 167 | - dsi: display serial interface |
| 93 | 168 | ||
| 94 | Required properties: | 169 | Required properties: |
| 95 | - compatible: "nvidia,tegra<chip>-dsi" | 170 | - compatible: "nvidia,tegra<chip>-dsi" |
| 96 | - reg: Physical base address and length of the controller's registers. | 171 | - reg: Physical base address and length of the controller's registers. |
| 172 | - clocks: Must contain an entry for each entry in clock-names. | ||
| 173 | See ../clocks/clock-bindings.txt for details. | ||
| 174 | - clock-names: Must include the following entries: | ||
| 175 | - dsi | ||
| 176 | This MUST be the first entry. | ||
| 177 | - lp | ||
| 178 | - parent | ||
| 179 | - resets: Must contain an entry for each entry in reset-names. | ||
| 180 | See ../reset/reset.txt for details. | ||
| 181 | - reset-names: Must include the following entries: | ||
| 182 | - dsi | ||
| 183 | - nvidia,mipi-calibrate: Should contain a phandle and a specifier specifying | ||
| 184 | which pads are used by this DSI output and need to be calibrated. See also | ||
| 185 | ../mipi/nvidia,tegra114-mipi.txt. | ||
| 186 | |||
| 187 | Optional properties: | ||
| 188 | - nvidia,ddc-i2c-bus: phandle of an I2C controller used for DDC EDID probing | ||
| 189 | - nvidia,hpd-gpio: specifies a GPIO used for hotplug detection | ||
| 190 | - nvidia,edid: supplies a binary EDID blob | ||
| 191 | - nvidia,panel: phandle of a display panel | ||
| 97 | 192 | ||
| 98 | Example: | 193 | Example: |
| 99 | 194 | ||
| @@ -105,6 +200,9 @@ Example: · 5 unmodified lines | |||
| 105 | reg = <0x50000000 0x00024000>; | 200 | reg = <0x50000000 0x00024000>; |
| 106 | interrupts = <0 65 0x04 /* mpcore syncpt */ | 201 | interrupts = <0 65 0x04 /* mpcore syncpt */ |
| 107 | 0 67 0x04>; /* mpcore general */ | 202 | 0 67 0x04>; /* mpcore general */ |
| 203 | clocks = <&tegra_car TEGRA20_CLK_HOST1X>; | ||
| 204 | resets = <&tegra_car 28>; | ||
| 205 | reset-names = "host1x"; | ||
| 108 | 206 | ||
| 109 | #address-cells = <1>; | 207 | #address-cells = <1>; |
| 110 | #size-cells = <1>; | 208 | #size-cells = <1>; |
| @@ -115,41 +213,64 @@ Example: · 4 unmodified lines | |||
| 115 | compatible = "nvidia,tegra20-mpe"; | 213 | compatible = "nvidia,tegra20-mpe"; |
| 116 | reg = <0x54040000 0x00040000>; | 214 | reg = <0x54040000 0x00040000>; |
| 117 | interrupts = <0 68 0x04>; | 215 | interrupts = <0 68 0x04>; |
| 216 | clocks = <&tegra_car TEGRA20_CLK_MPE>; | ||
| 217 | resets = <&tegra_car 60>; | ||
| 218 | reset-names = "mpe"; | ||
| 118 | }; | 219 | }; |
| 119 | 220 | ||
| 120 | vi { | 221 | vi { |
| 121 | compatible = "nvidia,tegra20-vi"; | 222 | compatible = "nvidia,tegra20-vi"; |
| 122 | reg = <0x54080000 0x00040000>; | 223 | reg = <0x54080000 0x00040000>; |
| 123 | interrupts = <0 69 0x04>; | 224 | interrupts = <0 69 0x04>; |
| 225 | clocks = <&tegra_car TEGRA20_CLK_VI>; | ||
| 226 | resets = <&tegra_car 100>; | ||
| 227 | reset-names = "vi"; | ||
| 124 | }; | 228 | }; |
| 125 | 229 | ||
| 126 | epp { | 230 | epp { |
| 127 | compatible = "nvidia,tegra20-epp"; | 231 | compatible = "nvidia,tegra20-epp"; |
| 128 | reg = <0x540c0000 0x00040000>; | 232 | reg = <0x540c0000 0x00040000>; |
| 129 | interrupts = <0 70 0x04>; | 233 | interrupts = <0 70 0x04>; |
| 234 | clocks = <&tegra_car TEGRA20_CLK_EPP>; | ||
| 235 | resets = <&tegra_car 19>; | ||
| 236 | reset-names = "epp"; | ||
| 130 | }; | 237 | }; |
| 131 | 238 | ||
| 132 | isp { | 239 | isp { |
| 133 | compatible = "nvidia,tegra20-isp"; | 240 | compatible = "nvidia,tegra20-isp"; |
| 134 | reg = <0x54100000 0x00040000>; | 241 | reg = <0x54100000 0x00040000>; |
| 135 | interrupts = <0 71 0x04>; | 242 | interrupts = <0 71 0x04>; |
| 243 | clocks = <&tegra_car TEGRA20_CLK_ISP>; | ||
| 244 | resets = <&tegra_car 23>; | ||
| 245 | reset-names = "isp"; | ||
| 136 | }; | 246 | }; |
| 137 | 247 | ||
| 138 | gr2d { | 248 | gr2d { |
| 139 | compatible = "nvidia,tegra20-gr2d"; | 249 | compatible = "nvidia,tegra20-gr2d"; |
| 140 | reg = <0x54140000 0x00040000>; | 250 | reg = <0x54140000 0x00040000>; |
| 141 | interrupts = <0 72 0x04>; | 251 | interrupts = <0 72 0x04>; |
| 252 | clocks = <&tegra_car TEGRA20_CLK_GR2D>; | ||
| 253 | resets = <&tegra_car 21>; | ||
| 254 | reset-names = "2d"; | ||
| 142 | }; | 255 | }; |
| 143 | 256 | ||
| 144 | gr3d { | 257 | gr3d { |
| 145 | compatible = "nvidia,tegra20-gr3d"; | 258 | compatible = "nvidia,tegra20-gr3d"; |
| 146 | reg = <0x54180000 0x00040000>; | 259 | reg = <0x54180000 0x00040000>; |
| 260 | clocks = <&tegra_car TEGRA20_CLK_GR3D>; | ||
| 261 | resets = <&tegra_car 24>; | ||
| 262 | reset-names = "3d"; | ||
| 147 | }; | 263 | }; |
| 148 | 264 | ||
| 149 | dc@54200000 { | 265 | dc@54200000 { |
| 150 | compatible = "nvidia,tegra20-dc"; | 266 | compatible = "nvidia,tegra20-dc"; |
| 151 | reg = <0x54200000 0x00040000>; | 267 | reg = <0x54200000 0x00040000>; |
| 152 | interrupts = <0 73 0x04>; | 268 | interrupts = <0 73 0x04>; |
| 269 | clocks = <&tegra_car TEGRA20_CLK_DISP1>, | ||
| 270 | <&tegra_car TEGRA20_CLK_PLL_P>; | ||
| 271 | clock-names = "dc", "parent"; | ||
| 272 | resets = <&tegra_car 27>; | ||
| 273 | reset-names = "dc"; | ||
| 153 | 274 | ||
| 154 | rgb { | 275 | rgb { |
| 155 | status = "disabled"; | 276 | status = "disabled"; |
| @@ -160,6 +281,11 @@ Example: · 4 unmodified lines | |||
| 160 | compatible = "nvidia,tegra20-dc"; | 281 | compatible = "nvidia,tegra20-dc"; |
| 161 | reg = <0x54240000 0x00040000>; | 282 | reg = <0x54240000 0x00040000>; |
| 162 | interrupts = <0 74 0x04>; | 283 | interrupts = <0 74 0x04>; |
| 284 | clocks = <&tegra_car TEGRA20_CLK_DISP2>, | ||
| 285 | <&tegra_car TEGRA20_CLK_PLL_P>; | ||
| 286 | clock-names = "dc", "parent"; | ||
| 287 | resets = <&tegra_car 26>; | ||
| 288 | reset-names = "dc"; | ||
| 163 | 289 | ||
| 164 | rgb { | 290 | rgb { |
| 165 | status = "disabled"; | 291 | status = "disabled"; |
| @@ -170,6 +296,11 @@ Example: · 4 unmodified lines | |||
| 170 | compatible = "nvidia,tegra20-hdmi"; | 296 | compatible = "nvidia,tegra20-hdmi"; |
| 171 | reg = <0x54280000 0x00040000>; | 297 | reg = <0x54280000 0x00040000>; |
| 172 | interrupts = <0 75 0x04>; | 298 | interrupts = <0 75 0x04>; |
| 299 | clocks = <&tegra_car TEGRA20_CLK_HDMI>, | ||
| 300 | <&tegra_car TEGRA20_CLK_PLL_D_OUT0>; | ||
| 301 | clock-names = "hdmi", "parent"; | ||
| 302 | resets = <&tegra_car 51>; | ||
| 303 | reset-names = "hdmi"; | ||
| 173 | status = "disabled"; | 304 | status = "disabled"; |
| 174 | }; | 305 | }; |
| 175 | 306 | ||
| @@ -177,12 +308,18 @@ Example: · 1 unmodified line | |||
| 177 | compatible = "nvidia,tegra20-tvo"; | 308 | compatible = "nvidia,tegra20-tvo"; |
| 178 | reg = <0x542c0000 0x00040000>; | 309 | reg = <0x542c0000 0x00040000>; |
| 179 | interrupts = <0 76 0x04>; | 310 | interrupts = <0 76 0x04>; |
| 311 | clocks = <&tegra_car TEGRA20_CLK_TVO>; | ||
| 180 | status = "disabled"; | 312 | status = "disabled"; |
| 181 | }; | 313 | }; |
| 182 | 314 | ||
| 183 | dsi { | 315 | dsi { |
| 184 | compatible = "nvidia,tegra20-dsi"; | 316 | compatible = "nvidia,tegra20-dsi"; |
| 185 | reg = <0x54300000 0x00040000>; | 317 | reg = <0x54300000 0x00040000>; |
| 318 | clocks = <&tegra_car TEGRA20_CLK_DSI>, | ||
| 319 | <&tegra_car TEGRA20_CLK_PLL_D_OUT0>; | ||
| 320 | clock-names = "dsi", "parent"; | ||
| 321 | resets = <&tegra_car 48>; | ||
| 322 | reset-names = "dsi"; | ||
| 186 | status = "disabled"; | 323 | status = "disabled"; |
| 187 | }; | 324 | }; |
| 188 | }; | 325 | }; |
| @@ -9,6 +9,7 @@ Required properties : · 8 unmodified lines | |||
| 9 | - interrupts: interrupt number to the cpu. | 9 | - interrupts: interrupt number to the cpu. |
| 10 | - #address-cells = <1>; | 10 | - #address-cells = <1>; |
| 11 | - #size-cells = <0>; | 11 | - #size-cells = <0>; |
| 12 | - clocks: phandles to input clocks. | ||
| 12 | 13 | ||
| 13 | Optional properties: | 14 | Optional properties: |
| 14 | - Child nodes conforming to i2c bus binding | 15 | - Child nodes conforming to i2c bus binding |
| @@ -21,6 +22,7 @@ i2c0: i2c@fff84000 { · 6 unmodified lines | |||
| 21 | interrupts = <12 4 6>; | 22 | interrupts = <12 4 6>; |
| 22 | #address-cells = <1>; | 23 | #address-cells = <1>; |
| 23 | #size-cells = <0>; | 24 | #size-cells = <0>; |
| 25 | clocks = <&twi0_clk>; | ||
| 24 | 26 | ||
| 25 | 24c512@50 { | 27 | 24c512@50 { |
| 26 | compatible = "24c512"; | 28 | compatible = "24c512"; |
| @@ -0,0 +1,50 @@ | |||
| 1 | * NXP PCA954x I2C bus switch | ||
| 2 | |||
| 3 | Required Properties: | ||
| 4 | |||
| 5 | - compatible: Must contain one of the following. | ||
| 6 | "nxp,pca9540", "nxp,pca9542", "nxp,pca9543", "nxp,pca9544", | ||
| 7 | "nxp,pca9545", "nxp,pca9546", "nxp,pca9547", "nxp,pca9548" | ||
| 8 | |||
| 9 | - reg: The I2C address of the device. | ||
| 10 | |||
| 11 | The following required properties are defined externally: | ||
| 12 | |||
| 13 | - Standard I2C mux properties. See i2c-mux.txt in this directory. | ||
| 14 | - I2C child bus nodes. See i2c-mux.txt in this directory. | ||
| 15 | |||
| 16 | Optional Properties: | ||
| 17 | |||
| 18 | - reset-gpios: Reference to the GPIO connected to the reset input. | ||
| 19 | |||
| 20 | |||
| 21 | Example: | ||
| 22 | |||
| 23 | i2c-switch@74 { | ||
| 24 | compatible = "nxp,pca9548"; | ||
| 25 | #address-cells = <1>; | ||
| 26 | #size-cells = <0>; | ||
| 27 | reg = <0x74>; | ||
| 28 | |||
| 29 | i2c@2 { | ||
| 30 | #address-cells = <1>; | ||
| 31 | #size-cells = <0>; | ||
| 32 | reg = <2>; | ||
| 33 | |||
| 34 | eeprom@54 { | ||
| 35 | compatible = "at,24c08"; | ||
| 36 | reg = <0x54>; | ||
| 37 | }; | ||
| 38 | }; | ||
| 39 | |||
| 40 | i2c@4 { | ||
| 41 | #address-cells = <1>; | ||
| 42 | #size-cells = <0>; | ||
| 43 | reg = <4>; | ||
| 44 | |||
| 45 | rtc@51 { | ||
| 46 | compatible = "nxp,pcf8563"; | ||
| 47 | reg = <0x51>; | ||
| 48 | }; | ||
| 49 | }; | ||
| 50 | }; | ||
| @@ -5,7 +5,11 @@ Required properties : · 4 unmodified lines | |||
| 5 | 5 | ||
| 6 | - reg : Offset and length of the register set for the device | 6 | - reg : Offset and length of the register set for the device |
| 7 | - compatible : Should be "marvell,mv64xxx-i2c" or "allwinner,sun4i-i2c" | 7 | - compatible : Should be "marvell,mv64xxx-i2c" or "allwinner,sun4i-i2c" |
| 8 | or "marvell,mv78230-i2c" | 8 | or "marvell,mv78230-i2c" or "marvell,mv78230-a0-i2c" |
| 9 | Note: Only use "marvell,mv78230-a0-i2c" for a very rare, | ||
| 10 | initial version of the SoC which had broken offload | ||
| 11 | support. Linux auto-detects this and sets it | ||
| 12 | appropriately. | ||
| 9 | - interrupts : The interrupt number | 13 | - interrupts : The interrupt number |
| 10 | 14 | ||
| 11 | Optional properties : | 15 | Optional properties : |
| @@ -0,0 +1,29 @@ | |||
| 1 | Device tree configuration for Renesas RIIC driver | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible : "renesas,riic-<soctype>". "renesas,riic-rz" as fallback | ||
| 5 | - reg : address start and address range size of device | ||
| 6 | - interrupts : 8 interrupts (TEI, RI, TI, SPI, STI, NAKI, ALI, TMOI) | ||
| 7 | - clock-frequency : frequency of bus clock in Hz | ||
| 8 | - #address-cells : should be <1> | ||
| 9 | - #size-cells : should be <0> | ||
| 10 | |||
| 11 | Pinctrl properties might be needed, too. See there. | ||
| 12 | |||
| 13 | Example: | ||
| 14 | |||
| 15 | i2c0: i2c@fcfee000 { | ||
| 16 | compatible = "renesas,riic-r7s72100", "renesas,riic-rz"; | ||
| 17 | reg = <0xfcfee000 0x44>; | ||
| 18 | interrupts = <0 157 IRQ_TYPE_LEVEL_HIGH>, | ||
| 19 | <0 158 IRQ_TYPE_EDGE_RISING>, | ||
| 20 | <0 159 IRQ_TYPE_EDGE_RISING>, | ||
| 21 | <0 160 IRQ_TYPE_LEVEL_HIGH>, | ||
| 22 | <0 161 IRQ_TYPE_LEVEL_HIGH>, | ||
| 23 | <0 162 IRQ_TYPE_LEVEL_HIGH>, | ||
| 24 | <0 163 IRQ_TYPE_LEVEL_HIGH>, | ||
| 25 | <0 164 IRQ_TYPE_LEVEL_HIGH>; | ||
| 26 | clock-frequency = <100000>; | ||
| 27 | #address-cells = <1>; | ||
| 28 | #size-cells = <0>; | ||
| 29 | }; | ||
| @@ -10,6 +10,8 @@ Required properties: · 9 unmodified lines | |||
| 10 | inside HDMIPHY block found on several samsung SoCs | 10 | inside HDMIPHY block found on several samsung SoCs |
| 11 | (d) "samsung, exynos5440-i2c", for s3c2440-like i2c used | 11 | (d) "samsung, exynos5440-i2c", for s3c2440-like i2c used |
| 12 | on EXYNOS5440 which does not need GPIO configuration. | 12 | on EXYNOS5440 which does not need GPIO configuration. |
| 13 | (e) "samsung, exynos5-sata-phy-i2c", for s3c2440-like i2c used as | ||
| 14 | a host to SATA PHY controller on an internal bus. | ||
| 13 | - reg: physical base address of the controller and length of memory mapped | 15 | - reg: physical base address of the controller and length of memory mapped |
| 14 | region. | 16 | region. |
| 15 | - interrupts: interrupt number to the cpu. | 17 | - interrupts: interrupt number to the cpu. |
| @@ -39,12 +39,23 @@ Required properties: · 38 unmodified lines | |||
| 39 | - interrupts: Should contain I2C controller interrupts. | 39 | - interrupts: Should contain I2C controller interrupts. |
| 40 | - address-cells: Address cells for I2C device address. | 40 | - address-cells: Address cells for I2C device address. |
| 41 | - size-cells: Size of the I2C device address. | 41 | - size-cells: Size of the I2C device address. |
| 42 | - clocks: Clock ID as per | 42 | - clocks: Must contain an entry for each entry in clock-names. |
| 43 | Documentation/devicetree/bindings/clock/tegra<chip-id>.txt | 43 | See ../clocks/clock-bindings.txt for details. |
| 44 | for I2C controller. | 44 | - clock-names: Must include the following entries: |
| 45 | - clock-names: Name of the clock: | 45 | Tegra20/Tegra30: |
| 46 | Tegra20/Tegra30 I2C controller: "div-clk and "fast-clk". | 46 | - div-clk |
| 47 | Tegra114 I2C controller: "div-clk". | 47 | - fast-clk |
| 48 | Tegra114: | ||
| 49 | - div-clk | ||
| 50 | - resets: Must contain an entry for each entry in reset-names. | ||
| 51 | See ../reset/reset.txt for details. | ||
| 52 | - reset-names: Must include the following entries: | ||
| 53 | - i2c | ||
| 54 | - dmas: Must contain an entry for each entry in clock-names. | ||
| 55 | See ../dma/dma.txt for details. | ||
| 56 | - dma-names: Must include the following entries: | ||
| 57 | - rx | ||
| 58 | - tx | ||
| 48 | 59 | ||
| 49 | Example: | 60 | Example: |
| 50 | 61 | ||
| @@ -56,5 +67,9 @@ Example: · 5 unmodified lines | |||
| 56 | #size-cells = <0>; | 67 | #size-cells = <0>; |
| 57 | clocks = <&tegra_car 12>, <&tegra_car 124>; | 68 | clocks = <&tegra_car 12>, <&tegra_car 124>; |
| 58 | clock-names = "div-clk", "fast-clk"; | 69 | clock-names = "div-clk", "fast-clk"; |
| 70 | resets = <&tegra_car 12>; | ||
| 71 | reset-names = "i2c"; | ||
| 72 | dmas = <&apbdma 16>, <&apbdma 16>; | ||
| 73 | dma-names = "rx", "tx"; | ||
| 59 | status = "disabled"; | 74 | status = "disabled"; |
| 60 | }; | 75 | }; |
| @@ -16,6 +16,7 @@ adt7461 +/-1C TDM Extended Temp Range I.C · 15 unmodified lines | |||
| 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 | atmel,at97sc3204t i2c trusted platform module (TPM) |
| 19 | capella,cm32181 CM32181: Ambient Light Sensor | ||
| 19 | catalyst,24c32 i2c serial eeprom | 20 | catalyst,24c32 i2c serial eeprom |
| 20 | dallas,ds1307 64 x 8, Serial, I2C Real-Time Clock | 21 | dallas,ds1307 64 x 8, Serial, I2C Real-Time Clock |
| 21 | dallas,ds1338 I2C RTC with 56-Byte NV RAM | 22 | dallas,ds1338 I2C RTC with 56-Byte NV RAM |
| @@ -39,6 +40,7 @@ fsl,sgtl5000 SGTL5000: Ultra Low-Power Audio Codec · 17 unmodified lines | |||
| 39 | gmt,g751 G751: Digital Temperature Sensor and Thermal Watchdog with Two-Wire Interface | 40 | gmt,g751 G751: Digital Temperature Sensor and Thermal Watchdog with Two-Wire Interface |
| 40 | infineon,slb9635tt Infineon SLB9635 (Soft-) I2C TPM (old protocol, max 100khz) | 41 | infineon,slb9635tt Infineon SLB9635 (Soft-) I2C TPM (old protocol, max 100khz) |
| 41 | infineon,slb9645tt Infineon SLB9645 I2C TPM (new protocol, max 400khz) | 42 | infineon,slb9645tt Infineon SLB9645 I2C TPM (new protocol, max 400khz) |
| 43 | isl,isl12057 Intersil ISL12057 I2C RTC Chip | ||
| 42 | maxim,ds1050 5 Bit Programmable, Pulse-Width Modulator | 44 | maxim,ds1050 5 Bit Programmable, Pulse-Width Modulator |
| 43 | maxim,max1237 Low-Power, 4-/12-Channel, 2-Wire Serial, 12-Bit ADCs | 45 | maxim,max1237 Low-Power, 4-/12-Channel, 2-Wire Serial, 12-Bit ADCs |
| 44 | maxim,max6625 9-Bit/12-Bit Temperature Sensors with I²C-Compatible Serial Interface | 46 | maxim,max6625 9-Bit/12-Bit Temperature Sensors with I²C-Compatible Serial Interface |
| @@ -0,0 +1,14 @@ | |||
| 1 | * DHT11 humidity/temperature sensor (and compatibles like DHT22) | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: Should be "dht11" | ||
| 5 | - gpios: Should specify the GPIO connected to the sensor's data | ||
| 6 | line, see "gpios property" in | ||
| 7 | Documentation/devicetree/bindings/gpio/gpio.txt. | ||
| 8 | |||
| 9 | Example: | ||
| 10 | |||
| 11 | humidity_sensor { | ||
| 12 | compatible = "dht11"; | ||
| 13 | gpios = <&gpio0 6 0>; | ||
| 14 | } | ||
| @@ -0,0 +1,19 @@ | |||
| 1 | * AMS TAOS TSL2563 ambient light sensor | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | |||
| 5 | - compatible : should be "amstaos,tsl2563" | ||
| 6 | - reg : the I2C address of the sensor | ||
| 7 | |||
| 8 | Optional properties: | ||
| 9 | |||
| 10 | - amstaos,cover-comp-gain : integer used as multiplier for gain | ||
| 11 | compensation (default = 1) | ||
| 12 | |||
| 13 | Example: | ||
| 14 | |||
| 15 | tsl2563@29 { | ||
| 16 | compatible = "amstaos,tsl2563"; | ||
| 17 | reg = <0x29>; | ||
| 18 | amstaos,cover-comp-gain = <16>; | ||
| 19 | }; | ||
| @@ -0,0 +1,17 @@ | |||
| 1 | * Honeywell HMC5843 magnetometer sensor | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | |||
| 5 | - compatible : should be "honeywell,hmc5843" | ||
| 6 | - reg : the I2C address of the magnetometer - typically 0x1e | ||
| 7 | |||
| 8 | Optional properties: | ||
| 9 | |||
| 10 | - gpios : should be device tree identifier of the magnetometer DRDY pin | ||
| 11 | |||
| 12 | Example: | ||
| 13 | |||
| 14 | hmc5843@1e { | ||
| 15 | compatible = "honeywell,hmc5843" | ||
| 16 | reg = <0x1e>; | ||
| 17 | }; | ||
| @@ -0,0 +1,13 @@ | |||
| 1 | * GPIO beeper device tree bindings | ||
| 2 | |||
| 3 | Register a beeper connected to GPIO pin. | ||
| 4 | |||
| 5 | Required properties: | ||
| 6 | - compatible: Should be "gpio-beeper". | ||
| 7 | - gpios: From common gpio binding; gpio connection to beeper enable pin. | ||
| 8 | |||
| 9 | Example: | ||
| 10 | beeper: beeper { | ||
| 11 | compatible = "gpio-beeper"; | ||
| 12 | gpios = <&gpio3 23 GPIO_ACTIVE_HIGH>; | ||
| 13 | }; | ||
| @@ -13,6 +13,12 @@ Required properties: · 12 unmodified lines | |||
| 13 | array of pin numbers which is used as column. | 13 | array of pin numbers which is used as column. |
| 14 | - linux,keymap: The keymap for keys as described in the binding document | 14 | - linux,keymap: The keymap for keys as described in the binding document |
| 15 | devicetree/bindings/input/matrix-keymap.txt. | 15 | devicetree/bindings/input/matrix-keymap.txt. |
| 16 | - clocks: Must contain one entry, for the module clock. | ||
| 17 | See ../clocks/clock-bindings.txt for details. | ||
| 18 | - resets: Must contain an entry for each entry in reset-names. | ||
| 19 | See ../reset/reset.txt for details. | ||
| 20 | - reset-names: Must include the following entries: | ||
| 21 | - kbc | ||
| 16 | 22 | ||
| 17 | Optional properties, in addition to those specified by the shared | 23 | Optional properties, in addition to those specified by the shared |
| 18 | matrix-keyboard bindings: | 24 | matrix-keyboard bindings: |
| @@ -31,6 +37,9 @@ keyboard: keyboard { · 12 unmodified lines | |||
| 31 | compatible = "nvidia,tegra20-kbc"; | 37 | compatible = "nvidia,tegra20-kbc"; |
| 32 | reg = <0x7000e200 0x100>; | 38 | reg = <0x7000e200 0x100>; |
| 33 | interrupts = <0 85 0x04>; | 39 | interrupts = <0 85 0x04>; |
| 40 | clocks = <&tegra_car 36>; | ||
| 41 | resets = <&tegra_car 36>; | ||
| 42 | reset-names = "kbc"; | ||
| 34 | nvidia,ghost-filter; | 43 | nvidia,ghost-filter; |
| 35 | nvidia,debounce-delay-ms = <640>; | 44 | nvidia,debounce-delay-ms = <640>; |
| 36 | nvidia,kbc-row-pins = <0 1 2>; /* pin 0, 1, 2 as rows */ | 45 | nvidia,kbc-row-pins = <0 1 2>; /* pin 0, 1, 2 as rows */ |
| @@ -0,0 +1,41 @@ | |||
| 1 | * Texas Instruments tsc2007 touchscreen controller | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: must be "ti,tsc2007". | ||
| 5 | - reg: I2C address of the chip. | ||
| 6 | - ti,x-plate-ohms: X-plate resistance in ohms. | ||
| 7 | |||
| 8 | Optional properties: | ||
| 9 | - gpios: the interrupt gpio the chip is connected to (trough the penirq pin). | ||
| 10 | The penirq pin goes to low when the panel is touched. | ||
| 11 | (see GPIO binding[1] for more details). | ||
| 12 | - interrupt-parent: the phandle for the gpio controller | ||
| 13 | (see interrupt binding[0]). | ||
| 14 | - interrupts: (gpio) interrupt to which the chip is connected | ||
| 15 | (see interrupt binding[0]). | ||
| 16 | - ti,max-rt: maximum pressure. | ||
| 17 | - ti,fuzzx: specifies the absolute input fuzz x value. | ||
| 18 | If set, it will permit noise in the data up to +- the value given to the fuzz | ||
| 19 | parameter, that is used to filter noise from the event stream. | ||
| 20 | - ti,fuzzy: specifies the absolute input fuzz y value. | ||
| 21 | - ti,fuzzz: specifies the absolute input fuzz z value. | ||
| 22 | - ti,poll-period: how much time to wait (in milliseconds) before reading again the | ||
| 23 | values from the tsc2007. | ||
| 24 | |||
| 25 | [0]: Documentation/devicetree/bindings/interrupt-controller/interrupts.txt | ||
| 26 | [1]: Documentation/devicetree/bindings/gpio/gpio.txt | ||
| 27 | |||
| 28 | Example: | ||
| 29 | &i2c1 { | ||
| 30 | /* ... */ | ||
| 31 | tsc2007@49 { | ||
| 32 | compatible = "ti,tsc2007"; | ||
| 33 | reg = <0x49>; | ||
| 34 | interrupt-parent = <&gpio4>; | ||
| 35 | interrupts = <0x0 0x8>; | ||
| 36 | gpios = <&gpio4 0 0>; | ||
| 37 | ti,x-plate-ohms = <180>; | ||
| 38 | }; | ||
| 39 | |||
| 40 | /* ... */ | ||
| 41 | }; | ||
| @@ -0,0 +1,27 @@ | |||
| 1 | * TWL4030's Keypad Controller device tree bindings | ||
| 2 | |||
| 3 | TWL4030's Keypad controller is used to interface a SoC with a matrix-type | ||
| 4 | keypad device. The keypad controller supports multiple row and column lines. | ||
| 5 | A key can be placed at each intersection of a unique row and a unique column. | ||
| 6 | The keypad controller can sense a key-press and key-release and report the | ||
| 7 | event using a interrupt to the cpu. | ||
| 8 | |||
| 9 | This binding is based on the matrix-keymap binding with the following | ||
| 10 | changes: | ||
| 11 | |||
| 12 | * keypad,num-rows and keypad,num-columns are required. | ||
| 13 | |||
| 14 | Required SoC Specific Properties: | ||
| 15 | - compatible: should be one of the following | ||
| 16 | - "ti,twl4030-keypad": For controllers compatible with twl4030 keypad | ||
| 17 | controller. | ||
| 18 | - interrupt: should be one of the following | ||
| 19 | - <1>: For controllers compatible with twl4030 keypad controller. | ||
| 20 | |||
| 21 | Example: | ||
| 22 | twl_keypad: keypad { | ||
| 23 | compatible = "ti,twl4030-keypad"; | ||
| 24 | interrupts = <1>; | ||
| 25 | keypad,num-rows = <8>; | ||
| 26 | keypad,num-columns = <8>; | ||
| 27 | }; | ||
| @@ -0,0 +1,21 @@ | |||
| 1 | Texas Instruments TWL family (twl4030) pwrbutton module | ||
| 2 | |||
| 3 | This module is part of the TWL4030. For more details about the whole | ||
| 4 | chip see Documentation/devicetree/bindings/mfd/twl-familly.txt. | ||
| 5 | |||
| 6 | This module provides a simple power button event via an Interrupt. | ||
| 7 | |||
| 8 | Required properties: | ||
| 9 | - compatible: should be one of the following | ||
| 10 | - "ti,twl4030-pwrbutton": For controllers compatible with twl4030 | ||
| 11 | - interrupts: should be one of the following | ||
| 12 | - <8>: For controllers compatible with twl4030 | ||
| 13 | |||
| 14 | Example: | ||
| 15 | |||
| 16 | &twl { | ||
| 17 | twl_pwrbutton: pwrbutton { | ||
| 18 | compatible = "ti,twl4030-pwrbutton"; | ||
| 19 | interrupts = <8>; | ||
| 20 | }; | ||
| 21 | }; | ||
| @@ -14,5 +14,5 @@ intc: interrupt-controller { · 13 unmodified lines | |||
| 14 | compatible = "allwinner,sun4i-ic"; | 14 | compatible = "allwinner,sun4i-ic"; |
| 15 | reg = <0x01c20400 0x400>; | 15 | reg = <0x01c20400 0x400>; |
| 16 | interrupt-controller; | 16 | interrupt-controller; |
| 17 | #interrupt-cells = <2>; | 17 | #interrupt-cells = <1>; |
| 18 | }; | 18 | }; |
| @@ -0,0 +1,32 @@ | |||
| 1 | Synopsys DesignWare APB interrupt controller (dw_apb_ictl) | ||
| 2 | |||
| 3 | Synopsys DesignWare provides interrupt controller IP for APB known as | ||
| 4 | dw_apb_ictl. The IP is used as secondary interrupt controller in some SoCs with | ||
| 5 | APB bus, e.g. Marvell Armada 1500. | ||
| 6 | |||
| 7 | Required properties: | ||
| 8 | - compatible: shall be "snps,dw-apb-ictl" | ||
| 9 | - reg: physical base address of the controller and length of memory mapped | ||
| 10 | region starting with ENABLE_LOW register | ||
| 11 | - interrupt-controller: identifies the node as an interrupt controller | ||
| 12 | - #interrupt-cells: number of cells to encode an interrupt-specifier, shall be 1 | ||
| 13 | - interrupts: interrupt reference to primary interrupt controller | ||
| 14 | - interrupt-parent: (optional) reference specific primary interrupt controller | ||
| 15 | |||
| 16 | The interrupt sources map to the corresponding bits in the interrupt | ||
| 17 | registers, i.e. | ||
| 18 | - 0 maps to bit 0 of low interrupts, | ||
| 19 | - 1 maps to bit 1 of low interrupts, | ||
| 20 | - 32 maps to bit 0 of high interrupts, | ||
| 21 | - 33 maps to bit 1 of high interrupts, | ||
| 22 | - (optional) fast interrupts start at 64. | ||
| 23 | |||
| 24 | Example: | ||
| 25 | aic: interrupt-controller@3000 { | ||
| 26 | compatible = "snps,dw-apb-ictl"; | ||
| 27 | reg = <0x3000 0xc00>; | ||
| 28 | interrupt-controller; | ||
| 29 | #interrupt-cells = <1>; | ||
| 30 | interrupt-parent = <&gic>; | ||
| 31 | interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>; | ||
| 32 | }; | ||
| @@ -2,6 +2,13 @@ LEDs connected to tca6507 · 1 unmodified line | |||
| 2 | 2 | ||
| 3 | Required properties: | 3 | Required properties: |
| 4 | - compatible : should be : "ti,tca6507". | 4 | - compatible : should be : "ti,tca6507". |
| 5 | - #address-cells: must be 1 | ||
| 6 | - #size-cells: must be 0 | ||
| 7 | - reg: typically 0x45. | ||
| 8 | |||
| 9 | Optional properties: | ||
| 10 | - gpio-controller: allows lines to be used as output-only GPIOs. | ||
| 11 | - #gpio-cells: if present, must be 0. | ||
| 5 | 12 | ||
| 6 | Each led is represented as a sub-node of the ti,tca6507 device. | 13 | Each led is represented as a sub-node of the ti,tca6507 device. |
| 7 | 14 | ||
| @@ -10,6 +17,7 @@ LED sub-node properties: · 2 unmodified lines | |||
| 10 | - reg : number of LED line (could be from 0 to 6) | 17 | - reg : number of LED line (could be from 0 to 6) |
| 11 | - linux,default-trigger : (optional) | 18 | - linux,default-trigger : (optional) |
| 12 | see Documentation/devicetree/bindings/leds/common.txt | 19 | see Documentation/devicetree/bindings/leds/common.txt |
| 20 | - compatible: either "led" (the default) or "gpio". | ||
| 13 | 21 | ||
| 14 | Examples: | 22 | Examples: |
| 15 | 23 | ||
| @@ -19,6 +27,9 @@ tca6507@45 { · 3 unmodified lines | |||
| 19 | #size-cells = <0>; | 27 | #size-cells = <0>; |
| 20 | reg = <0x45>; | 28 | reg = <0x45>; |
| 21 | 29 | ||
| 30 | gpio-controller; | ||
| 31 | #gpio-cells = <2>; | ||
| 32 | |||
| 22 | led0: red-aux@0 { | 33 | led0: red-aux@0 { |
| 23 | label = "red:aux"; | 34 | label = "red:aux"; |
| 24 | reg = <0x0>; | 35 | reg = <0x0>; |
| @@ -29,5 +40,10 @@ tca6507@45 { · 4 unmodified lines | |||
| 29 | reg = <0x5>; | 40 | reg = <0x5>; |
| 30 | linux,default-trigger = "default-on"; | 41 | linux,default-trigger = "default-on"; |
| 31 | }; | 42 | }; |
| 43 | |||
| 44 | wifi-reset@6 { | ||
| 45 | reg = <0x6>; | ||
| 46 | compatible = "gpio"; | ||
| 47 | }; | ||
| 32 | }; | 48 | }; |
| 33 | 49 | ||
| @@ -79,7 +79,6 @@ prefixed with the string "marvell,", for Marvell Technology Group Ltd. · 78 unmodified lines | |||
| 79 | Required properties: | 79 | Required properties: |
| 80 | - #address-cells : Should be <1> | 80 | - #address-cells : Should be <1> |
| 81 | - #size-cells : Should be <0> | 81 | - #size-cells : Should be <0> |
| 82 | - device_type : Should be "mdio" | ||
| 83 | - compatible : Should be "marvell,mv64360-mdio" | 82 | - compatible : Should be "marvell,mv64360-mdio" |
| 84 | 83 | ||
| 85 | Example: | 84 | Example: |
| @@ -87,7 +86,6 @@ prefixed with the string "marvell,", for Marvell Technology Group Ltd. · 1 unmodified line | |||
| 87 | mdio { | 86 | mdio { |
| 88 | #address-cells = <1>; | 87 | #address-cells = <1>; |
| 89 | #size-cells = <0>; | 88 | #size-cells = <0>; |
| 90 | device_type = "mdio"; | ||
| 91 | compatible = "marvell,mv64360-mdio"; | 89 | compatible = "marvell,mv64360-mdio"; |
| 92 | 90 | ||
| 93 | ethernet-phy@0 { | 91 | ethernet-phy@0 { |
| @@ -132,7 +130,6 @@ prefixed with the string "marvell,", for Marvell Technology Group Ltd. · 38 unmodified lines | |||
| 132 | Ethernet port node | 130 | Ethernet port node |
| 133 | 131 | ||
| 134 | Required properties: | 132 | Required properties: |
| 135 | - device_type : Should be "network". | ||
| 136 | - compatible : Should be "marvell,mv64360-eth". | 133 | - compatible : Should be "marvell,mv64360-eth". |
| 137 | - reg : Should be <0>, <1>, or <2>, according to which registers | 134 | - reg : Should be <0>, <1>, or <2>, according to which registers |
| 138 | within the silicon block the device uses. | 135 | within the silicon block the device uses. |
| @@ -145,7 +142,6 @@ prefixed with the string "marvell,", for Marvell Technology Group Ltd. · 6 unmodified lines | |||
| 145 | 142 | ||
| 146 | Example Discovery Ethernet port node: | 143 | Example Discovery Ethernet port node: |
| 147 | ethernet@0 { | 144 | ethernet@0 { |
| 148 | device_type = "network"; | ||
| 149 | compatible = "marvell,mv64360-eth"; | 145 | compatible = "marvell,mv64360-eth"; |
| 150 | reg = <0>; | 146 | reg = <0>; |
| 151 | interrupts = <32>; | 147 | interrupts = <32>; |
| @@ -159,7 +155,6 @@ prefixed with the string "marvell,", for Marvell Technology Group Ltd. · 7 unmodified lines | |||
| 159 | c) Marvell Discovery PHY nodes | 155 | c) Marvell Discovery PHY nodes |
| 160 | 156 | ||
| 161 | Required properties: | 157 | Required properties: |
| 162 | - device_type : Should be "ethernet-phy" | ||
| 163 | - interrupts : <a> where a is the interrupt number for this phy. | 158 | - interrupts : <a> where a is the interrupt number for this phy. |
| 164 | - interrupt-parent : the phandle for the interrupt controller that | 159 | - interrupt-parent : the phandle for the interrupt controller that |
| 165 | services interrupts for this device. | 160 | services interrupts for this device. |
| @@ -167,7 +162,6 @@ prefixed with the string "marvell,", for Marvell Technology Group Ltd. · 1 unmodified line | |||
| 167 | 162 | ||
| 168 | Example Discovery PHY node: | 163 | Example Discovery PHY node: |
| 169 | ethernet-phy@1 { | 164 | ethernet-phy@1 { |
| 170 | device_type = "ethernet-phy"; | ||
| 171 | compatible = "broadcom,bcm5421"; | 165 | compatible = "broadcom,bcm5421"; |
| 172 | interrupts = <76>; /* GPP 12 */ | 166 | interrupts = <76>; /* GPP 12 */ |
| 173 | interrupt-parent = <&PIC>; | 167 | interrupt-parent = <&PIC>; |
| @@ -271,7 +265,6 @@ prefixed with the string "marvell,", for Marvell Technology Group Ltd. · 97 unmodified lines | |||
| 271 | serial port. | 265 | serial port. |
| 272 | 266 | ||
| 273 | Required properties: | 267 | Required properties: |
| 274 | - device_type : "serial" | ||
| 275 | - compatible : "marvell,mv64360-mpsc" | 268 | - compatible : "marvell,mv64360-mpsc" |
| 276 | - reg : Offset and length of the register set for this device | 269 | - reg : Offset and length of the register set for this device |
| 277 | - sdma : the phandle for the SDMA node used by this port | 270 | - sdma : the phandle for the SDMA node used by this port |
| @@ -288,7 +281,6 @@ prefixed with the string "marvell,", for Marvell Technology Group Ltd. · 10 unmodified lines | |||
| 288 | 281 | ||
| 289 | Example Discovery MPSCINTR node: | 282 | Example Discovery MPSCINTR node: |
| 290 | mpsc@8000 { | 283 | mpsc@8000 { |
| 291 | device_type = "serial"; | ||
| 292 | compatible = "marvell,mv64360-mpsc"; | 284 | compatible = "marvell,mv64360-mpsc"; |
| 293 | reg = <0x8000 0x38>; | 285 | reg = <0x8000 0x38>; |
| 294 | virtual-reg = <0xf1008000>; | 286 | virtual-reg = <0xf1008000>; |
| @@ -0,0 +1,11 @@ | |||
| 1 | Samsung S5P/EXYNOS SoC series JPEG codec | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | |||
| 5 | - compatible : should be one of: | ||
| 6 | "samsung,s5pv210-jpeg", "samsung,exynos4210-jpeg"; | ||
| 7 | - reg : address and length of the JPEG codec IP register set; | ||
| 8 | - interrupts : specifies the JPEG codec IP interrupt; | ||
| 9 | - clocks : should contain the JPEG codec IP gate clock specifier, from the | ||
| 10 | common clock bindings; | ||
| 11 | - clock-names : should contain "jpeg" entry. | ||
| @@ -0,0 +1,58 @@ | |||
| 1 | Samsung S5K5BAF UXGA 1/5" 2M CMOS Image Sensor with embedded SoC ISP | ||
| 2 | -------------------------------------------------------------------- | ||
| 3 | |||
| 4 | Required properties: | ||
| 5 | |||
| 6 | - compatible : "samsung,s5k5baf"; | ||
| 7 | - reg : I2C slave address of the sensor; | ||
| 8 | - vdda-supply : analog power supply 2.8V (2.6V to 3.0V); | ||
| 9 | - vddreg-supply : regulator input power supply 1.8V (1.7V to 1.9V) | ||
| 10 | or 2.8V (2.6V to 3.0); | ||
| 11 | - vddio-supply : I/O power supply 1.8V (1.65V to 1.95V) | ||
| 12 | or 2.8V (2.5V to 3.1V); | ||
| 13 | - stbyn-gpios : GPIO connected to STDBYN pin; | ||
| 14 | - rstn-gpios : GPIO connected to RSTN pin; | ||
| 15 | - clocks : list of phandle and clock specifier pairs | ||
| 16 | according to common clock bindings for the | ||
| 17 | clocks described in clock-names; | ||
| 18 | - clock-names : should include "mclk" for the sensor's master clock; | ||
| 19 | |||
| 20 | Optional properties: | ||
| 21 | |||
| 22 | - clock-frequency : the frequency at which the "mclk" clock should be | ||
| 23 | configured to operate, in Hz; if this property is not | ||
| 24 | specified default 24 MHz value will be used. | ||
| 25 | |||
| 26 | The device node should contain one 'port' child node with one child 'endpoint' | ||
| 27 | node, according to the bindings defined in Documentation/devicetree/bindings/ | ||
| 28 | media/video-interfaces.txt. The following are properties specific to those | ||
| 29 | nodes. | ||
| 30 | |||
| 31 | endpoint node | ||
| 32 | ------------- | ||
| 33 | |||
| 34 | - data-lanes : (optional) specifies MIPI CSI-2 data lanes as covered in | ||
| 35 | video-interfaces.txt. If present it should be <1> - the device | ||
| 36 | supports only one data lane without re-mapping. | ||
| 37 | |||
| 38 | Example: | ||
| 39 | |||
| 40 | s5k5bafx@2d { | ||
| 41 | compatible = "samsung,s5k5baf"; | ||
| 42 | reg = <0x2d>; | ||
| 43 | vdda-supply = <&cam_io_en_reg>; | ||
| 44 | vddreg-supply = <&vt_core_15v_reg>; | ||
| 45 | vddio-supply = <&vtcam_reg>; | ||
| 46 | stbyn-gpios = <&gpl2 0 1>; | ||
| 47 | rstn-gpios = <&gpl2 1 1>; | ||
| 48 | clock-names = "mclk"; | ||
| 49 | clocks = <&clock_cam 0>; | ||
| 50 | clock-frequency = <24000000>; | ||
| 51 | |||
| 52 | port { | ||
| 53 | s5k5bafx_ep: endpoint { | ||
| 54 | remote-endpoint = <&csis1_ep>; | ||
| 55 | data-lanes = <1>; | ||
| 56 | }; | ||
| 57 | }; | ||
| 58 | }; | ||
| @@ -112,6 +112,15 @@ Following are properties of regulator subnode. · 111 unmodified lines | |||
| 112 | ams,enable-tracking: Enable tracking with SD1, only supported | 112 | ams,enable-tracking: Enable tracking with SD1, only supported |
| 113 | by LDO3. | 113 | by LDO3. |
| 114 | 114 | ||
| 115 | Power-off: | ||
| 116 | ========= | ||
| 117 | AS3722 supports the system power off by turning off all its rail. This | ||
| 118 | is provided through pm_power_off. | ||
| 119 | The device node should have the following properties to enable this | ||
| 120 | functionality | ||
| 121 | ams,system-power-controller: Boolean, to enable the power off functionality | ||
| 122 | through this device. | ||
| 123 | |||
| 115 | Example: | 124 | Example: |
| 116 | -------- | 125 | -------- |
| 117 | #include <dt-bindings/mfd/as3722.h> | 126 | #include <dt-bindings/mfd/as3722.h> |
| @@ -120,6 +129,8 @@ ams3722 { · 2 unmodified lines | |||
| 120 | compatible = "ams,as3722"; | 129 | compatible = "ams,as3722"; |
| 121 | reg = <0x48>; | 130 | reg = <0x48>; |
| 122 | 131 | ||
| 132 | ams,system-power-controller; | ||
| 133 | |||
| 123 | interrupt-parent = <&intc>; | 134 | interrupt-parent = <&intc>; |
| 124 | interrupt-controller; | 135 | interrupt-controller; |
| 125 | #interrupt-cells = <2>; | 136 | #interrupt-cells = <2>; |
| @@ -17,6 +17,15 @@ Required properties (SPI): · 16 unmodified lines | |||
| 17 | - compatible: "google,cros-ec-spi" | 17 | - compatible: "google,cros-ec-spi" |
| 18 | - reg: SPI chip select | 18 | - reg: SPI chip select |
| 19 | 19 | ||
| 20 | Optional properties (SPI): | ||
| 21 | - google,cros-ec-spi-msg-delay: Some implementations of the EC require some | ||
| 22 | additional processing time in order to accept new transactions. If the delay | ||
| 23 | between transactions is not long enough the EC may not be able to respond | ||
| 24 | properly to subsequent transactions and cause them to hang. This property | ||
| 25 | specifies the delay, in usecs, introduced between transactions to account | ||
| 26 | for the time required by the EC to get back into a state in which new data | ||
| 27 | can be accepted. | ||
| 28 | |||
| 20 | Required properties (LPC): | 29 | Required properties (LPC): |
| 21 | - compatible: "google,cros-ec-lpc" | 30 | - compatible: "google,cros-ec-lpc" |
| 22 | - reg: List of (IO address, size) pairs defining the interface uses | 31 | - reg: List of (IO address, size) pairs defining the interface uses |
| @@ -0,0 +1,33 @@ | |||
| 1 | TI/National Semiconductor LP3943 MFD driver | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: "ti,lp3943" | ||
| 5 | - reg: I2C slave address. From 0x60 to 0x67. | ||
| 6 | |||
| 7 | LP3943 consists of two sub-devices, lp3943-gpio and lp3943-pwm. | ||
| 8 | |||
| 9 | For the LP3943 GPIO properties please refer to: | ||
| 10 | Documentation/devicetree/bindings/gpio/gpio-lp3943.txt | ||
| 11 | |||
| 12 | For the LP3943 PWM properties please refer to: | ||
| 13 | Documentation/devicetree/bindings/pwm/pwm-lp3943.txt | ||
| 14 | |||
| 15 | Example: | ||
| 16 | |||
| 17 | lp3943@60 { | ||
| 18 | compatible = "ti,lp3943"; | ||
| 19 | reg = <0x60>; | ||
| 20 | |||
| 21 | gpioex: gpio { | ||
| 22 | compatible = "ti,lp3943-gpio"; | ||
| 23 | gpio-controller; | ||
| 24 | #gpio-cells = <2>; | ||
| 25 | }; | ||
| 26 | |||
| 27 | pwm3943: pwm { | ||
| 28 | compatible = "ti,lp3943-pwm"; | ||
| 29 | #pwm-cells = <2>; | ||
| 30 | ti,pwm0 = <8 9 10>; | ||
| 31 | ti,pwm1 = <15>; | ||
| 32 | }; | ||
| 33 | }; | ||
| @@ -7,6 +7,9 @@ different i2c slave address,presently for which we are statically creating i2c · 6 unmodified lines | |||
| 7 | client while probing.This document describes the binding for mfd device and | 7 | client while probing.This document describes the binding for mfd device and |
| 8 | PMIC submodule. | 8 | PMIC submodule. |
| 9 | 9 | ||
| 10 | Binding for the built-in 32k clock generator block is defined separately | ||
| 11 | in bindings/clk/maxim,max77686.txt file. | ||
| 12 | |||
| 10 | Required properties: | 13 | Required properties: |
| 11 | - compatible : Must be "maxim,max77686"; | 14 | - compatible : Must be "maxim,max77686"; |
| 12 | - reg : Specifies the i2c slave address of PMIC block. | 15 | - reg : Specifies the i2c slave address of PMIC block. |
| @@ -60,7 +60,7 @@ as per the datasheet of s2mps11. · 59 unmodified lines | |||
| 60 | 60 | ||
| 61 | - LDOn | 61 | - LDOn |
| 62 | - valid values for n are 1 to 38 | 62 | - valid values for n are 1 to 38 |
| 63 | - Example: LDO0, LD01, LDO28 | 63 | - Example: LDO1, LD02, LDO28 |
| 64 | - BUCKn | 64 | - BUCKn |
| 65 | - valid values for n are 1 to 10. | 65 | - valid values for n are 1 to 10. |
| 66 | - Example: BUCK1, BUCK2, BUCK9 | 66 | - Example: BUCK1, BUCK2, BUCK9 |
| @@ -21,7 +21,7 @@ Required properties: · 20 unmodified lines | |||
| 21 | 21 | ||
| 22 | The valid regulator-compatible values are: | 22 | The valid regulator-compatible values are: |
| 23 | tps65910: vrtc, vio, vdd1, vdd2, vdd3, vdig1, vdig2, vpll, vdac, vaux1, | 23 | tps65910: vrtc, vio, vdd1, vdd2, vdd3, vdig1, vdig2, vpll, vdac, vaux1, |
| 24 | vaux2, vaux33, vmmc | 24 | vaux2, vaux33, vmmc, vbb |
| 25 | tps65911: vrtc, vio, vdd1, vdd3, vddctrl, ldo1, ldo2, ldo3, ldo4, ldo5, | 25 | tps65911: vrtc, vio, vdd1, vdd3, vddctrl, ldo1, ldo2, ldo3, ldo4, ldo5, |
| 26 | ldo6, ldo7, ldo8 | 26 | ldo6, ldo7, ldo8 |
| 27 | 27 | ||
| @@ -38,7 +38,7 @@ Required properties: · 10 unmodified lines | |||
| 38 | vcc4-supply: VAUX1 and VAUX2 input. | 38 | vcc4-supply: VAUX1 and VAUX2 input. |
| 39 | vcc5-supply: VPLL and VDAC input. | 39 | vcc5-supply: VPLL and VDAC input. |
| 40 | vcc6-supply: VDIG1 and VDIG2 input. | 40 | vcc6-supply: VDIG1 and VDIG2 input. |
| 41 | vcc7-supply: VRTC input. | 41 | vcc7-supply: VRTC and VBB input. |
| 42 | vccio-supply: VIO input. | 42 | vccio-supply: VIO input. |
| 43 | tps65911: | 43 | tps65911: |
| 44 | vcc1-supply: VDD1 input. | 44 | vcc1-supply: VDD1 input. |
| @@ -0,0 +1,98 @@ | |||
| 1 | MIPI DSI (Display Serial Interface) busses | ||
| 2 | ========================================== | ||
| 3 | |||
| 4 | The MIPI Display Serial Interface specifies a serial bus and a protocol for | ||
| 5 | communication between a host and up to four peripherals. This document will | ||
| 6 | define the syntax used to represent a DSI bus in a device tree. | ||
| 7 | |||
| 8 | This document describes DSI bus-specific properties only or defines existing | ||
| 9 | standard properties in the context of the DSI bus. | ||
| 10 | |||
| 11 | Each DSI host provides a DSI bus. The DSI host controller's node contains a | ||
| 12 | set of properties that characterize the bus. Child nodes describe individual | ||
| 13 | peripherals on that bus. | ||
| 14 | |||
| 15 | The following assumes that only a single peripheral is connected to a DSI | ||
| 16 | host. Experience shows that this is true for the large majority of setups. | ||
| 17 | |||
| 18 | DSI host | ||
| 19 | -------- | ||
| 20 | |||
| 21 | In addition to the standard properties and those defined by the parent bus of | ||
| 22 | a DSI host, the following properties apply to a node representing a DSI host. | ||
| 23 | |||
| 24 | Required properties: | ||
| 25 | - #address-cells: The number of cells required to represent an address on the | ||
| 26 | bus. DSI peripherals are addressed using a 2-bit virtual channel number, so | ||
| 27 | a maximum of 4 devices can be addressed on a single bus. Hence the value of | ||
| 28 | this property should be 1. | ||
| 29 | - #size-cells: Should be 0. There are cases where it makes sense to use a | ||
| 30 | different value here. See below. | ||
| 31 | |||
| 32 | DSI peripheral | ||
| 33 | -------------- | ||
| 34 | |||
| 35 | Peripherals are represented as child nodes of the DSI host's node. Properties | ||
| 36 | described here apply to all DSI peripherals, but individual bindings may want | ||
| 37 | to define additional, device-specific properties. | ||
| 38 | |||
| 39 | Required properties: | ||
| 40 | - reg: The virtual channel number of a DSI peripheral. Must be in the range | ||
| 41 | from 0 to 3. | ||
| 42 | |||
| 43 | Some DSI peripherals respond to more than a single virtual channel. In that | ||
| 44 | case two alternative representations can be chosen: | ||
| 45 | - The reg property can take multiple entries, one for each virtual channel | ||
| 46 | that the peripheral responds to. | ||
| 47 | - If the virtual channels that a peripheral responds to are consecutive, the | ||
| 48 | #size-cells can be set to 1. The first cell of each entry in the reg | ||
| 49 | property is the number of the first virtual channel and the second cell is | ||
| 50 | the number of consecutive virtual channels. | ||
| 51 | |||
| 52 | Example | ||
| 53 | ------- | ||
| 54 | |||
| 55 | dsi-host { | ||
| 56 | ... | ||
| 57 | |||
| 58 | #address-cells = <1>; | ||
| 59 | #size-cells = <0>; | ||
| 60 | |||
| 61 | /* peripheral responds to virtual channel 0 */ | ||
| 62 | peripheral@0 { | ||
| 63 | compatible = "..."; | ||
| 64 | reg = <0>; | ||
| 65 | }; | ||
| 66 | |||
| 67 | ... | ||
| 68 | }; | ||
| 69 | |||
| 70 | dsi-host { | ||
| 71 | ... | ||
| 72 | |||
| 73 | #address-cells = <1>; | ||
| 74 | #size-cells = <0>; | ||
| 75 | |||
| 76 | /* peripheral responds to virtual channels 0 and 2 */ | ||
| 77 | peripheral@0 { | ||
| 78 | compatible = "..."; | ||
| 79 | reg = <0, 2>; | ||
| 80 | }; | ||
| 81 | |||
| 82 | ... | ||
| 83 | }; | ||
| 84 | |||
| 85 | dsi-host { | ||
| 86 | ... | ||
| 87 | |||
| 88 | #address-cells = <1>; | ||
| 89 | #size-cells = <1>; | ||
| 90 | |||
| 91 | /* peripheral responds to virtual channels 1, 2 and 3 */ | ||
| 92 | peripheral@1 { | ||
| 93 | compatible = "..."; | ||
| 94 | reg = <1 3>; | ||
| 95 | }; | ||
| 96 | |||
| 97 | ... | ||
| 98 | }; | ||
| @@ -0,0 +1,41 @@ | |||
| 1 | NVIDIA Tegra MIPI pad calibration controller | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: "nvidia,tegra<chip>-mipi" | ||
| 5 | - reg: Physical base address and length of the controller's registers. | ||
| 6 | - clocks: Must contain an entry for each entry in clock-names. | ||
| 7 | See ../clocks/clock-bindings.txt for details. | ||
| 8 | - clock-names: Must include the following entries: | ||
| 9 | - mipi-cal | ||
| 10 | - #nvidia,mipi-calibrate-cells: Should be 1. The cell is a bitmask of the pads | ||
| 11 | that need to be calibrated for a given device. | ||
| 12 | |||
| 13 | User nodes need to contain an nvidia,mipi-calibrate property that has a | ||
| 14 | phandle to refer to the calibration controller node and a bitmask of the pads | ||
| 15 | that need to be calibrated. | ||
| 16 | |||
| 17 | Example: | ||
| 18 | |||
| 19 | mipi: mipi@700e3000 { | ||
| 20 | compatible = "nvidia,tegra114-mipi"; | ||
| 21 | reg = <0x700e3000 0x100>; | ||
| 22 | clocks = <&tegra_car TEGRA114_CLK_MIPI_CAL>; | ||
| 23 | clock-names = "mipi-cal"; | ||
| 24 | #nvidia,mipi-calibrate-cells = <1>; | ||
| 25 | }; | ||
| 26 | |||
| 27 | ... | ||
| 28 | |||
| 29 | host1x@50000000 { | ||
| 30 | ... | ||
| 31 | |||
| 32 | dsi@54300000 { | ||
| 33 | ... | ||
| 34 | |||
| 35 | nvidia,mipi-calibrate = <&mipi 0x060>; | ||
| 36 | |||
| 37 | ... | ||
| 38 | }; | ||
| 39 | |||
| 40 | ... | ||
| 41 | }; | ||
| @@ -6,6 +6,9 @@ Required properties: · 5 unmodified lines | |||
| 6 | - atmel,at91sam9g45-ssc: support dma transfer | 6 | - atmel,at91sam9g45-ssc: support dma transfer |
| 7 | - reg: Should contain SSC registers location and length | 7 | - reg: Should contain SSC registers location and length |
| 8 | - interrupts: Should contain SSC interrupt | 8 | - interrupts: Should contain SSC interrupt |
| 9 | - clock-names: tuple listing input clock names. | ||
| 10 | Required elements: "pclk" | ||
| 11 | - clocks: phandles to input clocks. | ||
| 9 | 12 | ||
| 10 | 13 | ||
| 11 | Required properties for devices compatible with "atmel,at91sam9g45-ssc": | 14 | Required properties for devices compatible with "atmel,at91sam9g45-ssc": |
| @@ -20,6 +23,8 @@ ssc0: ssc@fffbc000 { · 8 unmodified lines | |||
| 20 | compatible = "atmel,at91rm9200-ssc"; | 23 | compatible = "atmel,at91rm9200-ssc"; |
| 21 | reg = <0xfffbc000 0x4000>; | 24 | reg = <0xfffbc000 0x4000>; |
| 22 | interrupts = <14 4 5>; | 25 | interrupts = <14 4 5>; |
| 26 | clocks = <&ssc0_clk>; | ||
| 27 | clock-names = "pclk"; | ||
| 23 | }; | 28 | }; |
| 24 | 29 | ||
| 25 | - DMA transfer: | 30 | - DMA transfer: |
| @@ -8,6 +8,8 @@ Optional properties: · 7 unmodified lines | |||
| 8 | - temp-measurement-period: temperature measurement period (milliseconds) | 8 | - temp-measurement-period: temperature measurement period (milliseconds) |
| 9 | - default-oversampling: default oversampling value to be used at startup, | 9 | - default-oversampling: default oversampling value to be used at startup, |
| 10 | value range is 0-3 with rising sensitivity. | 10 | value range is 0-3 with rising sensitivity. |
| 11 | - interrupt-parent: should be the phandle for the interrupt controller | ||
| 12 | - interrupts: interrupt mapping for IRQ | ||
| 11 | 13 | ||
| 12 | Example: | 14 | Example: |
| 13 | 15 | ||
| @@ -17,4 +19,6 @@ pressure@77 { · 3 unmodified lines | |||
| 17 | chip-id = <10>; | 19 | chip-id = <10>; |
| 18 | temp-measurement-period = <100>; | 20 | temp-measurement-period = <100>; |
| 19 | default-oversampling = <2>; | 21 | default-oversampling = <2>; |
| 22 | interrupt-parent = <&gpio0>; | ||
| 23 | interrupts = <25 IRQ_TYPE_EDGE_RISING>; | ||
| 20 | }; | 24 | }; |
| @@ -0,0 +1,27 @@ | |||
| 1 | Device Tree Bindings for the Arasan SDHCI Controller | ||
| 2 | |||
| 3 | The bindings follow the mmc[1], clock[2] and interrupt[3] bindings. Only | ||
| 4 | deviations are documented here. | ||
| 5 | |||
| 6 | [1] Documentation/devicetree/bindings/mmc/mmc.txt | ||
| 7 | [2] Documentation/devicetree/bindings/clock/clock-bindings.txt | ||
| 8 | [3] Documentation/devicetree/bindings/interrupt-controller/interrupts.txt | ||
| 9 | |||
| 10 | Required Properties: | ||
| 11 | - compatible: Compatibility string. Must be 'arasan,sdhci-8.9a' | ||
| 12 | - reg: From mmc bindings: Register location and length. | ||
| 13 | - clocks: From clock bindings: Handles to clock inputs. | ||
| 14 | - clock-names: From clock bindings: Tuple including "clk_xin" and "clk_ahb" | ||
| 15 | - interrupts: Interrupt specifier | ||
| 16 | - interrupt-parent: Phandle for the interrupt controller that services | ||
| 17 | interrupts for this device. | ||
| 18 | |||
| 19 | Example: | ||
| 20 | sdhci@e0100000 { | ||
| 21 | compatible = "arasan,sdhci-8.9a"; | ||
| 22 | reg = <0xe0100000 0x1000>; | ||
| 23 | clock-names = "clk_xin", "clk_ahb"; | ||
| 24 | clocks = <&clkc 21>, <&clkc 32>; | ||
| 25 | interrupt-parent = <&gic>; | ||
| 26 | interrupts = <0 24 4>; | ||
| 27 | } ; | ||
| @@ -16,6 +16,8 @@ Required Properties: · 15 unmodified lines | |||
| 16 | specific extensions. | 16 | specific extensions. |
| 17 | - "samsung,exynos5250-dw-mshc": for controllers with Samsung Exynos5250 | 17 | - "samsung,exynos5250-dw-mshc": for controllers with Samsung Exynos5250 |
| 18 | specific extensions. | 18 | specific extensions. |
| 19 | - "samsung,exynos5420-dw-mshc": for controllers with Samsung Exynos5420 | ||
| 20 | specific extensions. | ||
| 19 | 21 | ||
| 20 | * samsung,dw-mshc-ciu-div: Specifies the divider value for the card interface | 22 | * samsung,dw-mshc-ciu-div: Specifies the divider value for the card interface |
| 21 | unit (ciu) clock. This property is applicable only for Exynos5 SoC's and | 23 | unit (ciu) clock. This property is applicable only for Exynos5 SoC's and |
| @@ -0,0 +1,46 @@ | |||
| 1 | * Hisilicon specific extensions to the Synopsys Designware Mobile | ||
| 2 | Storage Host Controller | ||
| 3 | |||
| 4 | Read synopsys-dw-mshc.txt for more details | ||
| 5 | |||
| 6 | The Synopsys designware mobile storage host controller is used to interface | ||
| 7 | a SoC with storage medium such as eMMC or SD/MMC cards. This file documents | ||
| 8 | differences between the core Synopsys dw mshc controller properties described | ||
| 9 | by synopsys-dw-mshc.txt and the properties used by the Hisilicon specific | ||
| 10 | extensions to the Synopsys Designware Mobile Storage Host Controller. | ||
| 11 | |||
| 12 | Required Properties: | ||
| 13 | |||
| 14 | * compatible: should be one of the following. | ||
| 15 | - "hisilicon,hi4511-dw-mshc": for controllers with hi4511 specific extentions. | ||
| 16 | |||
| 17 | Example: | ||
| 18 | |||
| 19 | /* for Hi3620 */ | ||
| 20 | |||
| 21 | /* SoC portion */ | ||
| 22 | dwmmc_0: dwmmc0@fcd03000 { | ||
| 23 | compatible = "hisilicon,hi4511-dw-mshc"; | ||
| 24 | reg = <0xfcd03000 0x1000>; | ||
| 25 | interrupts = <0 16 4>; | ||
| 26 | #address-cells = <1>; | ||
| 27 | #size-cells = <0>; | ||
| 28 | clocks = <&mmc_clock HI3620_SD_CIUCLK>, <&clock HI3620_DDRC_PER_CLK>; | ||
| 29 | clock-names = "ciu", "biu"; | ||
| 30 | }; | ||
| 31 | |||
| 32 | /* Board portion */ | ||
| 33 | dwmmc0@fcd03000 { | ||
| 34 | num-slots = <1>; | ||
| 35 | vmmc-supply = <&ldo12>; | ||
| 36 | fifo-depth = <0x100>; | ||
| 37 | supports-highspeed; | ||
| 38 | pinctrl-names = "default"; | ||
| 39 | pinctrl-0 = <&sd_pmx_pins &sd_cfg_func1 &sd_cfg_func2>; | ||
| 40 | slot@0 { | ||
| 41 | reg = <0>; | ||
| 42 | bus-width = <4>; | ||
| 43 | disable-wp; | ||
| 44 | cd-gpios = <&gpio10 3 0>; | ||
| 45 | }; | ||
| 46 | }; | ||
| @@ -6,12 +6,16 @@ and the properties present in the bcm281xx SDHCI · 5 unmodified lines | |||
| 6 | Required properties: | 6 | Required properties: |
| 7 | - compatible : Should be "brcm,kona-sdhci" | 7 | - compatible : Should be "brcm,kona-sdhci" |
| 8 | - DEPRECATED: compatible : Should be "bcm,kona-sdhci" | 8 | - DEPRECATED: compatible : Should be "bcm,kona-sdhci" |
| 9 | - clocks: phandle + clock specifier pair of the external clock | ||
| 10 | |||
| 11 | Refer to clocks/clock-bindings.txt for generic clock consumer properties. | ||
| 9 | 12 | ||
| 10 | Example: | 13 | Example: |
| 11 | 14 | ||
| 12 | sdio2: sdio@0x3f1a0000 { | 15 | sdio2: sdio@0x3f1a0000 { |
| 13 | compatible = "brcm,kona-sdhci"; | 16 | compatible = "brcm,kona-sdhci"; |
| 14 | reg = <0x3f1a0000 0x10000>; | 17 | reg = <0x3f1a0000 0x10000>; |
| 18 | clocks = <&sdio3_clk>; | ||
| 15 | interrupts = <0x0 74 0x4>; | 19 | interrupts = <0x0 74 0x4>; |
| 16 | }; | 20 | }; |
| 17 | 21 | ||
| @@ -8,6 +8,12 @@ by mmc.txt and the properties used by the sdhci-tegra driver. · 7 unmodified lines | |||
| 8 | 8 | ||
| 9 | Required properties: | 9 | Required properties: |
| 10 | - compatible : Should be "nvidia,<chip>-sdhci" | 10 | - compatible : Should be "nvidia,<chip>-sdhci" |
| 11 | - clocks : Must contain one entry, for the module clock. | ||
| 12 | See ../clocks/clock-bindings.txt for details. | ||
| 13 | - resets : Must contain an entry for each entry in reset-names. | ||
| 14 | See ../reset/reset.txt for details. | ||
| 15 | - reset-names : Must include the following entries: | ||
| 16 | - sdhci | ||
| 11 | 17 | ||
| 12 | Optional properties: | 18 | Optional properties: |
| 13 | - power-gpios : Specify GPIOs for power control | 19 | - power-gpios : Specify GPIOs for power control |
| @@ -18,6 +24,9 @@ sdhci@c8000200 { · 4 unmodified lines | |||
| 18 | compatible = "nvidia,tegra20-sdhci"; | 24 | compatible = "nvidia,tegra20-sdhci"; |
| 19 | reg = <0xc8000200 0x200>; | 25 | reg = <0xc8000200 0x200>; |
| 20 | interrupts = <47>; | 26 | interrupts = <47>; |
| 27 | clocks = <&tegra_car 14>; | ||
| 28 | resets = <&tegra_car 14>; | ||
| 29 | reset-names = "sdhci"; | ||
| 21 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ | 30 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ |
| 22 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ | 31 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ |
| 23 | power-gpios = <&gpio 155 0>; /* gpio PT3 */ | 32 | power-gpios = <&gpio 155 0>; /* gpio PT3 */ |
| @@ -0,0 +1,94 @@ | |||
| 1 | Device tree bindings for Texas instruments Davinci/Keystone NAND controller | ||
| 2 | |||
| 3 | This file provides information, what the device node for the davinci/keystone | ||
| 4 | NAND interface contains. | ||
| 5 | |||
| 6 | Documentation: | ||
| 7 | Davinci DM646x - http://www.ti.com/lit/ug/sprueq7c/sprueq7c.pdf | ||
| 8 | Kestone - http://www.ti.com/lit/ug/sprugz3a/sprugz3a.pdf | ||
| 9 | |||
| 10 | Required properties: | ||
| 11 | |||
| 12 | - compatible: "ti,davinci-nand" | ||
| 13 | "ti,keystone-nand" | ||
| 14 | |||
| 15 | - reg: Contains 2 offset/length values: | ||
| 16 | - offset and length for the access window. | ||
| 17 | - offset and length for accessing the AEMIF | ||
| 18 | control registers. | ||
| 19 | |||
| 20 | - ti,davinci-chipselect: number of chipselect. Indicates on the | ||
| 21 | davinci_nand driver which chipselect is used | ||
| 22 | for accessing the nand. | ||
| 23 | Can be in the range [0-3]. | ||
| 24 | |||
| 25 | Recommended properties : | ||
| 26 | |||
| 27 | - ti,davinci-mask-ale: mask for ALE. Needed for executing address | ||
| 28 | phase. These offset will be added to the base | ||
| 29 | address for the chip select space the NAND Flash | ||
| 30 | device is connected to. | ||
| 31 | If not set equal to 0x08. | ||
| 32 | |||
| 33 | - ti,davinci-mask-cle: mask for CLE. Needed for executing command | ||
| 34 | phase. These offset will be added to the base | ||
| 35 | address for the chip select space the NAND Flash | ||
| 36 | device is connected to. | ||
| 37 | If not set equal to 0x10. | ||
| 38 | |||
| 39 | - ti,davinci-mask-chipsel: mask for chipselect address. Needed to mask | ||
| 40 | addresses for given chipselect. | ||
| 41 | |||
| 42 | - nand-ecc-mode: operation mode of the NAND ecc mode. ECC mode | ||
| 43 | valid values for davinci driver: | ||
| 44 | - "none" | ||
| 45 | - "soft" | ||
| 46 | - "hw" | ||
| 47 | |||
| 48 | - ti,davinci-ecc-bits: used ECC bits, currently supported 1 or 4. | ||
| 49 | |||
| 50 | - nand-bus-width: buswidth 8 or 16. If not present 8. | ||
| 51 | |||
| 52 | - nand-on-flash-bbt: use flash based bad block table support. OOB | ||
| 53 | identifier is saved in OOB area. If not present | ||
| 54 | false. | ||
| 55 | |||
| 56 | Deprecated properties: | ||
| 57 | |||
| 58 | - ti,davinci-ecc-mode: operation mode of the NAND ecc mode. ECC mode | ||
| 59 | valid values for davinci driver: | ||
| 60 | - "none" | ||
| 61 | - "soft" | ||
| 62 | - "hw" | ||
| 63 | |||
| 64 | - ti,davinci-nand-buswidth: buswidth 8 or 16. If not present 8. | ||
| 65 | |||
| 66 | - ti,davinci-nand-use-bbt: use flash based bad block table support. OOB | ||
| 67 | identifier is saved in OOB area. If not present | ||
| 68 | false. | ||
| 69 | |||
| 70 | Nand device bindings may contain additional sub-nodes describing partitions of | ||
| 71 | the address space. See partition.txt for more detail. The NAND Flash timing | ||
| 72 | values must be programmed in the chip select’s node of AEMIF | ||
| 73 | memory-controller (see Documentation/devicetree/bindings/memory-controllers/ | ||
| 74 | davinci-aemif.txt). | ||
| 75 | |||
| 76 | Example(da850 EVM ): | ||
| 77 | |||
| 78 | nand_cs3@62000000 { | ||
| 79 | compatible = "ti,davinci-nand"; | ||
| 80 | reg = <0x62000000 0x807ff | ||
| 81 | 0x68000000 0x8000>; | ||
| 82 | ti,davinci-chipselect = <1>; | ||
| 83 | ti,davinci-mask-ale = <0>; | ||
| 84 | ti,davinci-mask-cle = <0>; | ||
| 85 | ti,davinci-mask-chipsel = <0>; | ||
| 86 | nand-ecc-mode = "hw"; | ||
| 87 | ti,davinci-ecc-bits = <4>; | ||
| 88 | nand-on-flash-bbt; | ||
| 89 | |||
| 90 | partition@180000 { | ||
| 91 | label = "ubifs"; | ||
| 92 | reg = <0x180000 0x7e80000>; | ||
| 93 | }; | ||
| 94 | }; | ||
| @@ -17,6 +17,14 @@ Required properties: · 16 unmodified lines | |||
| 17 | Optional properties: | 17 | Optional properties: |
| 18 | - nand-on-flash-bbt: boolean to enable on flash bbt option if not | 18 | - nand-on-flash-bbt: boolean to enable on flash bbt option if not |
| 19 | present false | 19 | present false |
| 20 | - fsl,use-minimum-ecc: Protect this NAND flash with the minimum ECC | ||
| 21 | strength required. The required ECC strength is | ||
| 22 | automatically discoverable for some flash | ||
| 23 | (e.g., according to the ONFI standard). | ||
| 24 | However, note that if this strength is not | ||
| 25 | discoverable or this property is not enabled, | ||
| 26 | the software may chooses an implementation-defined | ||
| 27 | ECC scheme. | ||
| 20 | 28 | ||
| 21 | The device tree may optionally contain sub-nodes describing partitions of the | 29 | The device tree may optionally contain sub-nodes describing partitions of the |
| 22 | address space. See partition.txt for more detail. | 30 | address space. See partition.txt for more detail. |
| @@ -2,7 +2,9 @@ PXA3xx NAND DT bindings · 1 unmodified line | |||
| 2 | 2 | ||
| 3 | Required properties: | 3 | Required properties: |
| 4 | 4 | ||
| 5 | - compatible: Should be "marvell,pxa3xx-nand" | 5 | - compatible: Should be set to one of the following: |
| 6 | marvell,pxa3xx-nand | ||
| 7 | marvell,armada370-nand | ||
| 6 | - reg: The register base for the controller | 8 | - reg: The register base for the controller |
| 7 | - interrupts: The interrupt to map | 9 | - interrupts: The interrupt to map |
| 8 | - #address-cells: Set to <1> if the node includes partitions | 10 | - #address-cells: Set to <1> if the node includes partitions |
| @@ -13,6 +15,8 @@ Optional properties: · 4 unmodified lines | |||
| 13 | - marvell,nand-keep-config: Set to keep the NAND controller config as set | 15 | - marvell,nand-keep-config: Set to keep the NAND controller config as set |
| 14 | by the bootloader | 16 | by the bootloader |
| 15 | - num-cs: Number of chipselect lines to usw | 17 | - num-cs: Number of chipselect lines to usw |
| 18 | - nand-on-flash-bbt: boolean to enable on flash bbt option if | ||
| 19 | not present false | ||
| 16 | 20 | ||
| 17 | Example: | 21 | Example: |
| 18 | 22 | ||
| @@ -0,0 +1,27 @@ | |||
| 1 | * Allwinner GMAC ethernet controller | ||
| 2 | |||
| 3 | This device is a platform glue layer for stmmac. | ||
| 4 | Please see stmmac.txt for the other unchanged properties. | ||
| 5 | |||
| 6 | Required properties: | ||
| 7 | - compatible: Should be "allwinner,sun7i-a20-gmac" | ||
| 8 | - clocks: Should contain the GMAC main clock, and tx clock | ||
| 9 | The tx clock type should be "allwinner,sun7i-a20-gmac-clk" | ||
| 10 | - clock-names: Should contain the clock names "stmmaceth", | ||
| 11 | and "allwinner_gmac_tx" | ||
| 12 | |||
| 13 | Optional properties: | ||
| 14 | - phy-supply: phandle to a regulator if the PHY needs one | ||
| 15 | |||
| 16 | Examples: | ||
| 17 | |||
| 18 | gmac: ethernet@01c50000 { | ||
| 19 | compatible = "allwinner,sun7i-a20-gmac"; | ||
| 20 | reg = <0x01c50000 0x10000>, | ||
| 21 | <0x01c20164 0x4>; | ||
| 22 | interrupts = <0 85 1>; | ||
| 23 | interrupt-names = "macirq"; | ||
| 24 | clocks = <&ahb_gates 49>, <&gmac_tx>; | ||
| 25 | clock-names = "stmmaceth", "allwinner_gmac_tx"; | ||
| 26 | phy-mode = "mii"; | ||
| 27 | }; | ||
| @@ -0,0 +1,25 @@ | |||
| 1 | * Microchip MCP251X stand-alone CAN controller device tree bindings | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: Should be one of the following: | ||
| 5 | - "microchip,mcp2510" for MCP2510. | ||
| 6 | - "microchip,mcp2515" for MCP2515. | ||
| 7 | - reg: SPI chip select. | ||
| 8 | - clocks: The clock feeding the CAN controller. | ||
| 9 | - interrupt-parent: The parent interrupt controller. | ||
| 10 | - interrupts: Should contain IRQ line for the CAN controller. | ||
| 11 | |||
| 12 | Optional properties: | ||
| 13 | - vdd-supply: Regulator that powers the CAN controller. | ||
| 14 | - xceiver-supply: Regulator that powers the CAN transceiver. | ||
| 15 | |||
| 16 | Example: | ||
| 17 | can0: can@1 { | ||
| 18 | compatible = "microchip,mcp2515"; | ||
| 19 | reg = <1>; | ||
| 20 | clocks = <&clk24m>; | ||
| 21 | interrupt-parent = <&gpio4>; | ||
| 22 | interrupts = <13 0x2>; | ||
| 23 | vdd-supply = <®5v0>; | ||
| 24 | xceiver-supply = <®5v0>; | ||
| 25 | }; | ||
| @@ -10,10 +10,6 @@ Required properties: · 9 unmodified lines | |||
| 10 | - ti,davinci-ctrl-mod-reg-offset: offset to control module register | 10 | - ti,davinci-ctrl-mod-reg-offset: offset to control module register |
| 11 | - ti,davinci-ctrl-ram-offset: offset to control module ram | 11 | - ti,davinci-ctrl-ram-offset: offset to control module ram |
| 12 | - ti,davinci-ctrl-ram-size: size of control module ram | 12 | - ti,davinci-ctrl-ram-size: size of control module ram |
| 13 | - ti,davinci-rmii-en: use RMII | ||
| 14 | - ti,davinci-no-bd-ram: has the emac controller BD RAM | ||
| 15 | - phy-handle: Contains a phandle to an Ethernet PHY. | ||
| 16 | if not, davinci_emac driver defaults to 100/FULL | ||
| 17 | - interrupts: interrupt mapping for the davinci emac interrupts sources: | 13 | - interrupts: interrupt mapping for the davinci emac interrupts sources: |
| 18 | 4 sources: <Receive Threshold Interrupt | 14 | 4 sources: <Receive Threshold Interrupt |
| 19 | Receive Interrupt | 15 | Receive Interrupt |
| @@ -21,7 +17,11 @@ Required properties: · 1 unmodified line | |||
| 21 | Miscellaneous Interrupt> | 17 | Miscellaneous Interrupt> |
| 22 | 18 | ||
| 23 | Optional properties: | 19 | Optional properties: |
| 20 | - phy-handle: Contains a phandle to an Ethernet PHY. | ||
| 21 | If absent, davinci_emac driver defaults to 100/FULL. | ||
| 24 | - local-mac-address : 6 bytes, mac address | 22 | - local-mac-address : 6 bytes, mac address |
| 23 | - ti,davinci-rmii-en: 1 byte, 1 means use RMII | ||
| 24 | - ti,davinci-no-bd-ram: boolean, does EMAC have BD RAM? | ||
| 25 | 25 | ||
| 26 | Example (enbw_cmc board): | 26 | Example (enbw_cmc board): |
| 27 | eth0: emac@1e20000 { | 27 | eth0: emac@1e20000 { |
| @@ -10,6 +10,10 @@ Required properties: · 9 unmodified lines | |||
| 10 | - interrupts: Should contain macb interrupt | 10 | - interrupts: Should contain macb interrupt |
| 11 | - phy-mode: String, operation mode of the PHY interface. | 11 | - phy-mode: String, operation mode of the PHY interface. |
| 12 | Supported values are: "mii", "rmii", "gmii", "rgmii". | 12 | Supported values are: "mii", "rmii", "gmii", "rgmii". |
| 13 | - clock-names: Tuple listing input clock names. | ||
| 14 | Required elements: 'pclk', 'hclk' | ||
| 15 | Optional elements: 'tx_clk' | ||
| 16 | - clocks: Phandles to input clocks. | ||
| 13 | 17 | ||
| 14 | Optional properties: | 18 | Optional properties: |
| 15 | - local-mac-address: 6 bytes, mac address | 19 | - local-mac-address: 6 bytes, mac address |
| @@ -22,4 +26,6 @@ Examples: · 6 unmodified lines | |||
| 22 | interrupts = <21>; | 26 | interrupts = <21>; |
| 23 | phy-mode = "rmii"; | 27 | phy-mode = "rmii"; |
| 24 | local-mac-address = [3a 0e 03 04 05 06]; | 28 | local-mac-address = [3a 0e 03 04 05 06]; |
| 29 | clock-names = "pclk", "hclk", "tx_clk"; | ||
| 30 | clocks = <&clkc 30>, <&clkc 30>, <&clkc 13>; | ||
| 25 | }; | 31 | }; |
| @@ -32,7 +32,6 @@ Optional controller properties: · 31 unmodified lines | |||
| 32 | * Ethernet port node | 32 | * Ethernet port node |
| 33 | 33 | ||
| 34 | Required port properties: | 34 | Required port properties: |
| 35 | - device_type: shall be "network". | ||
| 36 | - compatible: shall be one of "marvell,orion-eth-port", | 35 | - compatible: shall be one of "marvell,orion-eth-port", |
| 37 | "marvell,kirkwood-eth-port". | 36 | "marvell,kirkwood-eth-port". |
| 38 | - reg: port number relative to ethernet controller, shall be 0, 1, or 2. | 37 | - reg: port number relative to ethernet controller, shall be 0, 1, or 2. |
| @@ -61,7 +60,6 @@ or · 22 unmodified lines | |||
| 61 | mdio-bus { | 60 | mdio-bus { |
| 62 | ... | 61 | ... |
| 63 | ethphy: ethernet-phy@8 { | 62 | ethphy: ethernet-phy@8 { |
| 64 | device_type = "ethernet-phy"; | ||
| 65 | ... | 63 | ... |
| 66 | }; | 64 | }; |
| 67 | }; | 65 | }; |
| @@ -75,7 +73,6 @@ eth: ethernet-controller@72000 { · 7 unmodified lines | |||
| 75 | marvell,tx-checksum-limit = <1600>; | 73 | marvell,tx-checksum-limit = <1600>; |
| 76 | 74 | ||
| 77 | ethernet@0 { | 75 | ethernet@0 { |
| 78 | device_type = "network"; | ||
| 79 | compatible = "marvell,orion-eth-port"; | 76 | compatible = "marvell,orion-eth-port"; |
| 80 | reg = <0>; | 77 | reg = <0>; |
| 81 | interrupts = <29>; | 78 | interrupts = <29>; |
| @@ -2,7 +2,6 @@ PHY nodes · 1 unmodified line | |||
| 2 | 2 | ||
| 3 | Required properties: | 3 | Required properties: |
| 4 | 4 | ||
| 5 | - device_type : Should be "ethernet-phy" | ||
| 6 | - interrupts : <a b> where a is the interrupt number and b is a | 5 | - interrupts : <a b> where a is the interrupt number and b is a |
| 7 | field that represents an encoding of the sense and level | 6 | field that represents an encoding of the sense and level |
| 8 | information for the interrupt. This should be encoded based on | 7 | information for the interrupt. This should be encoded based on |
| @@ -11,8 +10,6 @@ Required properties: · 2 unmodified lines | |||
| 11 | - interrupt-parent : the phandle for the interrupt controller that | 10 | - interrupt-parent : the phandle for the interrupt controller that |
| 12 | services interrupts for this device. | 11 | services interrupts for this device. |
| 13 | - reg : The ID number for the phy, usually a small integer | 12 | - reg : The ID number for the phy, usually a small integer |
| 14 | - linux,phandle : phandle for this node; likely referenced by an | ||
| 15 | ethernet controller node. | ||
| 16 | 13 | ||
| 17 | Optional Properties: | 14 | Optional Properties: |
| 18 | 15 | ||
| @@ -22,14 +19,13 @@ Optional Properties: · 3 unmodified lines | |||
| 22 | specifications. If neither of these are specified, the default is to | 19 | specifications. If neither of these are specified, the default is to |
| 23 | assume clause 22. The compatible list may also contain other | 20 | assume clause 22. The compatible list may also contain other |
| 24 | elements. | 21 | elements. |
| 22 | - max-speed: Maximum PHY supported speed (10, 100, 1000...) | ||
| 25 | 23 | ||
| 26 | Example: | 24 | Example: |
| 27 | 25 | ||
| 28 | ethernet-phy@0 { | 26 | ethernet-phy@0 { |
| 29 | compatible = "ethernet-phy-ieee802.3-c22"; | 27 | compatible = "ethernet-phy-ieee802.3-c22"; |
| 30 | linux,phandle = <2452000>; | ||
| 31 | interrupt-parent = <40000>; | 28 | interrupt-parent = <40000>; |
| 32 | interrupts = <35 1>; | 29 | interrupts = <35 1>; |
| 33 | reg = <0>; | 30 | reg = <0>; |
| 34 | device_type = "ethernet-phy"; | ||
| 35 | }; | 31 | }; |
| @@ -12,7 +12,6 @@ Required properties: · 11 unmodified lines | |||
| 12 | property | 12 | property |
| 13 | - phy-mode: String, operation mode of the PHY interface. | 13 | - phy-mode: String, operation mode of the PHY interface. |
| 14 | Supported values are: "mii", "rmii", "gmii", "rgmii". | 14 | Supported values are: "mii", "rmii", "gmii", "rgmii". |
| 15 | - snps,phy-addr phy address to connect to. | ||
| 16 | - snps,reset-gpio gpio number for phy reset. | 15 | - snps,reset-gpio gpio number for phy reset. |
| 17 | - snps,reset-active-low boolean flag to indicate if phy reset is active low. | 16 | - snps,reset-active-low boolean flag to indicate if phy reset is active low. |
| 18 | - snps,reset-delays-us is triplet of delays | 17 | - snps,reset-delays-us is triplet of delays |
| @@ -30,6 +29,11 @@ Required properties: · 11 unmodified lines | |||
| 30 | 29 | ||
| 31 | Optional properties: | 30 | Optional properties: |
| 32 | - mac-address: 6 bytes, mac address | 31 | - mac-address: 6 bytes, mac address |
| 32 | - resets: Should contain a phandle to the STMMAC reset signal, if any | ||
| 33 | - reset-names: Should contain the reset signal name "stmmaceth", if a | ||
| 34 | reset phandle is given | ||
| 35 | - max-frame-size: Maximum Transfer Unit (IEEE defined MTU), rather | ||
| 36 | than the maximum frame size. | ||
| 33 | 37 | ||
| 34 | Examples: | 38 | Examples: |
| 35 | 39 | ||
| @@ -40,5 +44,6 @@ Examples: · 4 unmodified lines | |||
| 40 | interrupts = <24 23>; | 44 | interrupts = <24 23>; |
| 41 | interrupt-names = "macirq", "eth_wake_irq"; | 45 | interrupt-names = "macirq", "eth_wake_irq"; |
| 42 | mac-address = [000000000000]; /* Filled in by U-Boot */ | 46 | mac-address = [000000000000]; /* Filled in by U-Boot */ |
| 47 | max-frame-size = <3800>; | ||
| 43 | phy-mode = "gmii"; | 48 | phy-mode = "gmii"; |
| 44 | }; | 49 | }; |
| @@ -7,3 +7,15 @@ Required properties: · 6 unmodified lines | |||
| 7 | - clock-frequency : the frequency of the i2c bus | 7 | - clock-frequency : the frequency of the i2c bus |
| 8 | - gpios : the gpio used for ec request | 8 | - gpios : the gpio used for ec request |
| 9 | - slave-addr: the i2c address of the slave controller | 9 | - slave-addr: the i2c address of the slave controller |
| 10 | - clocks : Must contain an entry for each entry in clock-names. | ||
| 11 | See ../clocks/clock-bindings.txt for details. | ||
| 12 | - clock-names : Must include the following entries: | ||
| 13 | Tegra20/Tegra30: | ||
| 14 | - div-clk | ||
| 15 | - fast-clk | ||
| 16 | Tegra114: | ||
| 17 | - div-clk | ||
| 18 | - resets : Must contain an entry for each entry in reset-names. | ||
| 19 | See ../reset/reset.txt for details. | ||
| 20 | - reset-names : Must include the following entries: | ||
| 21 | - i2c | ||
| @@ -0,0 +1,7 @@ | |||
| 1 | AU Optronics Corporation 10.1" WSVGA TFT LCD panel | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: should be "auo,b101aw03" | ||
| 5 | |||
| 6 | This binding is compatible with the simple-panel binding, which is specified | ||
| 7 | in simple-panel.txt in this directory. | ||
| @@ -0,0 +1,7 @@ | |||
| 1 | Chunghwa Picture Tubes Ltd. 10.1" WXGA TFT LCD panel | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: should be "chunghwa,claa101wa01a" | ||
| 5 | |||
| 6 | This binding is compatible with the simple-panel binding, which is specified | ||
| 7 | in simple-panel.txt in this directory. | ||
| @@ -0,0 +1,7 @@ | |||
| 1 | Chunghwa Picture Tubes Ltd. 10.1" WXGA TFT LCD panel | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: should be "chunghwa,claa101wb03" | ||
| 5 | |||
| 6 | This binding is compatible with the simple-panel binding, which is specified | ||
| 7 | in simple-panel.txt in this directory. | ||
| @@ -0,0 +1,7 @@ | |||
| 1 | Panasonic Corporation 10.1" WUXGA TFT LCD panel | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: should be "panasonic,vvx10f004b00" | ||
| 5 | |||
| 6 | This binding is compatible with the simple-panel binding, which is specified | ||
| 7 | in simple-panel.txt in this directory. | ||
| @@ -0,0 +1,7 @@ | |||
| 1 | Samsung Electronics 10.1" WSVGA TFT LCD panel | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: should be "samsung,ltn101nt05" | ||
| 5 | |||
| 6 | This binding is compatible with the simple-panel binding, which is specified | ||
| 7 | in simple-panel.txt in this directory. | ||
| @@ -0,0 +1,21 @@ | |||
| 1 | Simple display panel | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - power-supply: regulator to provide the supply voltage | ||
| 5 | |||
| 6 | Optional properties: | ||
| 7 | - ddc-i2c-bus: phandle of an I2C controller used for DDC EDID probing | ||
| 8 | - enable-gpios: GPIO pin to enable or disable the panel | ||
| 9 | - backlight: phandle of the backlight device attached to the panel | ||
| 10 | |||
| 11 | Example: | ||
| 12 | |||
| 13 | panel: panel { | ||
| 14 | compatible = "cptt,claa101wb01"; | ||
| 15 | ddc-i2c-bus = <&panelddc>; | ||
| 16 | |||
| 17 | power-supply = <&vdd_pnl_reg>; | ||
| 18 | enable-gpios = <&gpio 90 0>; | ||
| 19 | |||
| 20 | backlight = <&backlight>; | ||
| 21 | }; | ||
| @@ -19,6 +19,8 @@ Required properties: · 18 unmodified lines | |||
| 19 | to define the mapping of the PCIe interface to interrupt | 19 | to define the mapping of the PCIe interface to interrupt |
| 20 | numbers. | 20 | numbers. |
| 21 | - num-lanes: number of lanes to use | 21 | - num-lanes: number of lanes to use |
| 22 | |||
| 23 | Optional properties: | ||
| 22 | - reset-gpio: gpio pin number of power good signal | 24 | - reset-gpio: gpio pin number of power good signal |
| 23 | 25 | ||
| 24 | Optional properties for fsl,imx6q-pcie | 26 | Optional properties for fsl,imx6q-pcie |
| @@ -42,14 +42,19 @@ Required properties: · 41 unmodified lines | |||
| 42 | - 0xc2000000: prefetchable memory region | 42 | - 0xc2000000: prefetchable memory region |
| 43 | Please refer to the standard PCI bus binding document for a more detailed | 43 | Please refer to the standard PCI bus binding document for a more detailed |
| 44 | explanation. | 44 | explanation. |
| 45 | - clocks: List of clock inputs of the controller. Must contain an entry for | 45 | - clocks: Must contain an entry for each entry in clock-names. |
| 46 | each entry in the clock-names property. | 46 | See ../clocks/clock-bindings.txt for details. |
| 47 | - clock-names: Must include the following entries: | 47 | - clock-names: Must include the following entries: |
| 48 | "pex": The Tegra clock of that name | 48 | - pex |
| 49 | "afi": The Tegra clock of that name | 49 | - afi |
| 50 | "pcie_xclk": The Tegra clock of that name | 50 | - pll_e |
| 51 | "pll_e": The Tegra clock of that name | 51 | - cml (not required for Tegra20) |
| 52 | "cml": The Tegra clock of that name (not required for Tegra20) | 52 | - resets: Must contain an entry for each entry in reset-names. |
| 53 | See ../reset/reset.txt for details. | ||
| 54 | - reset-names: Must include the following entries: | ||
| 55 | - pex | ||
| 56 | - afi | ||
| 57 | - pcie_x | ||
| 53 | 58 | ||
| 54 | Root ports are defined as subnodes of the PCIe controller node. | 59 | Root ports are defined as subnodes of the PCIe controller node. |
| 55 | 60 | ||
| @@ -91,9 +96,10 @@ SoC DTSI: · 35 unmodified lines | |||
| 91 | 0x82000000 0 0xa0000000 0xa0000000 0 0x10000000 /* non-prefetchable memory */ | 96 | 0x82000000 0 0xa0000000 0xa0000000 0 0x10000000 /* non-prefetchable memory */ |
| 92 | 0xc2000000 0 0xb0000000 0xb0000000 0 0x10000000>; /* prefetchable memory */ | 97 | 0xc2000000 0 0xb0000000 0xb0000000 0 0x10000000>; /* prefetchable memory */ |
| 93 | 98 | ||
| 94 | clocks = <&tegra_car 70>, <&tegra_car 72>, <&tegra_car 74>, | 99 | clocks = <&tegra_car 70>, <&tegra_car 72>, <&tegra_car 118>; |
| 95 | <&tegra_car 118>; | 100 | clock-names = "pex", "afi", "pll_e"; |
| 96 | clock-names = "pex", "afi", "pcie_xclk", "pll_e"; | 101 | resets = <&tegra_car 70>, <&tegra_car 72>, <&tegra_car 74>; |
| 102 | reset-names = "pex", "afi", "pcie_x"; | ||
| 97 | status = "disabled"; | 103 | status = "disabled"; |
| 98 | 104 | ||
| 99 | pci@1,0 { | 105 | pci@1,0 { |
| @@ -0,0 +1,15 @@ | |||
| 1 | BROADCOM KONA USB2 PHY | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: brcm,kona-usb2-phy | ||
| 5 | - reg: offset and length of the PHY registers | ||
| 6 | - #phy-cells: must be 0 | ||
| 7 | Refer to phy/phy-bindings.txt for the generic PHY binding properties | ||
| 8 | |||
| 9 | Example: | ||
| 10 | |||
| 11 | usbphy: usb-phy@3f130000 { | ||
| 12 | compatible = "brcm,kona-usb2-phy"; | ||
| 13 | reg = <0x3f130000 0x28>; | ||
| 14 | #phy-cells = <0>; | ||
| 15 | }; | ||
| @@ -0,0 +1,461 @@ | |||
| 1 | Broadcom Capri Pin Controller | ||
| 2 | |||
| 3 | This is a pin controller for the Broadcom BCM281xx SoC family, which includes | ||
| 4 | BCM11130, BCM11140, BCM11351, BCM28145, and BCM28155 SoCs. | ||
| 5 | |||
| 6 | === Pin Controller Node === | ||
| 7 | |||
| 8 | Required Properties: | ||
| 9 | |||
| 10 | - compatible: Must be "brcm,capri-pinctrl". | ||
| 11 | - reg: Base address of the PAD Controller register block and the size | ||
| 12 | of the block. | ||
| 13 | |||
| 14 | For example, the following is the bare minimum node: | ||
| 15 | |||
| 16 | pinctrl@35004800 { | ||
| 17 | compatible = "brcm,capri-pinctrl"; | ||
| 18 | reg = <0x35004800 0x430>; | ||
| 19 | }; | ||
| 20 | |||
| 21 | As a pin controller device, in addition to the required properties, this node | ||
| 22 | should also contain the pin configuration nodes that client devices reference, | ||
| 23 | if any. | ||
| 24 | |||
| 25 | === Pin Configuration Node === | ||
| 26 | |||
| 27 | Each pin configuration node is a sub-node of the pin controller node and is a | ||
| 28 | container of an arbitrary number of subnodes, called pin group nodes in this | ||
| 29 | document. | ||
| 30 | |||
| 31 | Please refer to the pinctrl-bindings.txt in this directory for details of the | ||
| 32 | common pinctrl bindings used by client devices, including the definition of a | ||
| 33 | "pin configuration node". | ||
| 34 | |||
| 35 | === Pin Group Node === | ||
| 36 | |||
| 37 | A pin group node specifies the desired pin mux and/or pin configuration for an | ||
| 38 | arbitrary number of pins. The name of the pin group node is optional and not | ||
| 39 | used. | ||
| 40 | |||
| 41 | A pin group node only affects the properties specified in the node, and has no | ||
| 42 | effect on any properties that are omitted. | ||
| 43 | |||
| 44 | The pin group node accepts a subset of the generic pin config properties. For | ||
| 45 | details generic pin config properties, please refer to pinctrl-bindings.txt | ||
| 46 | and <include/linux/pinctrl/pinconfig-generic.h>. | ||
| 47 | |||
| 48 | Each pin controlled by this pin controller belong to one of three types: | ||
| 49 | Standard, I2C, and HDMI. Each type accepts a different set of pin config | ||
| 50 | properties. A list of pins and their types is provided below. | ||
| 51 | |||
| 52 | Required Properties (applicable to all pins): | ||
| 53 | |||
| 54 | - pins: Multiple strings. Specifies the name(s) of one or more pins to | ||
| 55 | be configured by this node. | ||
| 56 | |||
| 57 | Optional Properties (for standard pins): | ||
| 58 | |||
| 59 | - function: String. Specifies the pin mux selection. Values | ||
| 60 | must be one of: "alt1", "alt2", "alt3", "alt4" | ||
| 61 | - input-schmitt-enable: No arguments. Enable schmitt-trigger mode. | ||
| 62 | - input-schmitt-disable: No arguments. Disable schmitt-trigger mode. | ||
| 63 | - bias-pull-up: No arguments. Pull up on pin. | ||
| 64 | - bias-pull-down: No arguments. Pull down on pin. | ||
| 65 | - bias-disable: No arguments. Disable pin bias. | ||
| 66 | - slew-rate: Integer. Meaning depends on configured pin mux: | ||
| 67 | *_SCL or *_SDA: | ||
| 68 | 0: Standard(100kbps)& Fast(400kbps) mode | ||
| 69 | 1: Highspeed (3.4Mbps) mode | ||
| 70 | IC_DM or IC_DP: | ||
| 71 | 0: normal slew rate | ||
| 72 | 1: fast slew rate | ||
| 73 | Otherwise: | ||
| 74 | 0: fast slew rate | ||
| 75 | 1: normal slew rate | ||
| 76 | - input-enable: No arguements. Enable input (does not affect | ||
| 77 | output.) | ||
| 78 | - input-disable: No arguements. Disable input (does not affect | ||
| 79 | output.) | ||
| 80 | - drive-strength: Integer. Drive strength in mA. Valid values are | ||
| 81 | 2, 4, 6, 8, 10, 12, 14, 16 mA. | ||
| 82 | |||
| 83 | Optional Properties (for I2C pins): | ||
| 84 | |||
| 85 | - function: String. Specifies the pin mux selection. Values | ||
| 86 | must be one of: "alt1", "alt2", "alt3", "alt4" | ||
| 87 | - bias-pull-up: Integer. Pull up strength in Ohm. There are 3 | ||
| 88 | pull-up resisitors (1.2k, 1.8k, 2.7k) available | ||
| 89 | in parallel for I2C pins, so the valid values | ||
| 90 | are: 568, 720, 831, 1080, 1200, 1800, 2700 Ohm. | ||
| 91 | - bias-disable: No arguments. Disable pin bias. | ||
| 92 | - slew-rate: Integer. Meaning depends on configured pin mux: | ||
| 93 | *_SCL or *_SDA: | ||
| 94 | 0: Standard(100kbps)& Fast(400kbps) mode | ||
| 95 | 1: Highspeed (3.4Mbps) mode | ||
| 96 | IC_DM or IC_DP: | ||
| 97 | 0: normal slew rate | ||
| 98 | 1: fast slew rate | ||
| 99 | Otherwise: | ||
| 100 | 0: fast slew rate | ||
| 101 | 1: normal slew rate | ||
| 102 | - input-enable: No arguements. Enable input (does not affect | ||
| 103 | output.) | ||
| 104 | - input-disable: No arguements. Disable input (does not affect | ||
| 105 | output.) | ||
| 106 | |||
| 107 | Optional Properties (for HDMI pins): | ||
| 108 | |||
| 109 | - function: String. Specifies the pin mux selection. Values | ||
| 110 | must be one of: "alt1", "alt2", "alt3", "alt4" | ||
| 111 | - slew-rate: Integer. Controls slew rate. | ||
| 112 | 0: Standard(100kbps)& Fast(400kbps) mode | ||
| 113 | 1: Highspeed (3.4Mbps) mode | ||
| 114 | - input-enable: No arguements. Enable input (does not affect | ||
| 115 | output.) | ||
| 116 | - input-disable: No arguements. Disable input (does not affect | ||
| 117 | output.) | ||
| 118 | |||
| 119 | Example: | ||
| 120 | // pin controller node | ||
| 121 | pinctrl@35004800 { | ||
| 122 | compatible = "brcm,capri-pinctrl"; | ||
| 123 | reg = <0x35004800 0x430>; | ||
| 124 | |||
| 125 | // pin configuration node | ||
| 126 | dev_a_default: dev_a_active { | ||
| 127 | //group node defining 1 standard pin | ||
| 128 | grp_1 { | ||
| 129 | pins = "std_pin1"; | ||
| 130 | function = "alt1"; | ||
| 131 | input-schmitt-enable; | ||
| 132 | bias-disable; | ||
| 133 | slew-rate = <1>; | ||
| 134 | drive-strength = <4>; | ||
| 135 | }; | ||
| 136 | |||
| 137 | // group node defining 2 I2C pins | ||
| 138 | grp_2 { | ||
| 139 | pins = "i2c_pin1", "i2c_pin2"; | ||
| 140 | function = "alt2"; | ||
| 141 | bias-pull-up = <720>; | ||
| 142 | input-enable; | ||
| 143 | }; | ||
| 144 | |||
| 145 | // group node defining 2 HDMI pins | ||
| 146 | grp_3 { | ||
| 147 | pins = "hdmi_pin1", "hdmi_pin2"; | ||
| 148 | function = "alt3"; | ||
| 149 | slew-rate = <1>; | ||
| 150 | }; | ||
| 151 | |||
| 152 | // other pin group nodes | ||
| 153 | ... | ||
| 154 | }; | ||
| 155 | |||
| 156 | // other pin configuration nodes | ||
| 157 | ... | ||
| 158 | }; | ||
| 159 | |||
| 160 | In the example above, "dev_a_active" is a pin configuration node with a number | ||
| 161 | of sub-nodes. In the pin group node "grp_1", one pin, "std_pin1", is defined in | ||
| 162 | the "pins" property. Thus, the remaining properties in the "grp_1" node applies | ||
| 163 | only to this pin, including the following settings: | ||
| 164 | - setting pinmux to "alt1" | ||
| 165 | - enabling schmitt-trigger (hystersis) mode | ||
| 166 | - disabling pin bias | ||
| 167 | - setting the slew-rate to 1 | ||
| 168 | - setting the drive strength to 4 mA | ||
| 169 | Note that neither "input-enable" nor "input-disable" was specified - the pinctrl | ||
| 170 | subsystem will therefore leave this property unchanged from whatever state it | ||
| 171 | was in before applying these changes. | ||
| 172 | |||
| 173 | The "pins" property in the pin group node "grp_2" specifies two pins - | ||
| 174 | "i2c_pin1" and "i2c_pin2"; the remaining properties in this pin group node, | ||
| 175 | therefore, applies to both of these pins. The properties include: | ||
| 176 | - setting pinmux to "alt2" | ||
| 177 | - setting pull-up resistance to 720 Ohm (ie. enabling 1.2k and 1.8k resistors | ||
| 178 | in parallel) | ||
| 179 | - enabling both pins' input | ||
| 180 | "slew-rate" is not specified in this pin group node, so the slew-rate for these | ||
| 181 | pins are left as-is. | ||
| 182 | |||
| 183 | Finally, "grp_3" defines two HDMI pins. The following properties are applied to | ||
| 184 | both pins: | ||
| 185 | - setting pinmux to "alt3" | ||
| 186 | - setting slew-rate to 1; for HDMI pins, this corresponds to the 3.4 Mbps | ||
| 187 | Highspeed mode | ||
| 188 | The input is neither enabled or disabled, and is left untouched. | ||
| 189 | |||
| 190 | === Pin Names and Type === | ||
| 191 | |||
| 192 | The following are valid pin names and their pin types: | ||
| 193 | |||
| 194 | "adcsync", Standard | ||
| 195 | "bat_rm", Standard | ||
| 196 | "bsc1_scl", I2C | ||
| 197 | "bsc1_sda", I2C | ||
| 198 | "bsc2_scl", I2C | ||
| 199 | "bsc2_sda", I2C | ||
| 200 | "classgpwr", Standard | ||
| 201 | "clk_cx8", Standard | ||
| 202 | "clkout_0", Standard | ||
| 203 | "clkout_1", Standard | ||
| 204 | "clkout_2", Standard | ||
| 205 | "clkout_3", Standard | ||
| 206 | "clkreq_in_0", Standard | ||
| 207 | "clkreq_in_1", Standard | ||
| 208 | "cws_sys_req1", Standard | ||
| 209 | "cws_sys_req2", Standard | ||
| 210 | "cws_sys_req3", Standard | ||
| 211 | "digmic1_clk", Standard | ||
| 212 | "digmic1_dq", Standard | ||
| 213 | "digmic2_clk", Standard | ||
| 214 | "digmic2_dq", Standard | ||
| 215 | "gpen13", Standard | ||
| 216 | "gpen14", Standard | ||
| 217 | "gpen15", Standard | ||
| 218 | "gpio00", Standard | ||
| 219 | "gpio01", Standard | ||
| 220 | "gpio02", Standard | ||
| 221 | "gpio03", Standard | ||
| 222 | "gpio04", Standard | ||
| 223 | "gpio05", Standard | ||
| 224 | "gpio06", Standard | ||
| 225 | "gpio07", Standard | ||
| 226 | "gpio08", Standard | ||
| 227 | "gpio09", Standard | ||
| 228 | "gpio10", Standard | ||
| 229 | "gpio11", Standard | ||
| 230 | "gpio12", Standard | ||
| 231 | "gpio13", Standard | ||
| 232 | "gpio14", Standard | ||
| 233 | "gps_pablank", Standard | ||
| 234 | "gps_tmark", Standard | ||
| 235 | "hdmi_scl", HDMI | ||
| 236 | "hdmi_sda", HDMI | ||
| 237 | "ic_dm", Standard | ||
| 238 | "ic_dp", Standard | ||
| 239 | "kp_col_ip_0", Standard | ||
| 240 | "kp_col_ip_1", Standard | ||
| 241 | "kp_col_ip_2", Standard | ||
| 242 | "kp_col_ip_3", Standard | ||
| 243 | "kp_row_op_0", Standard | ||
| 244 | "kp_row_op_1", Standard | ||
| 245 | "kp_row_op_2", Standard | ||
| 246 | "kp_row_op_3", Standard | ||
| 247 | "lcd_b_0", Standard | ||
| 248 | "lcd_b_1", Standard | ||
| 249 | "lcd_b_2", Standard | ||
| 250 | "lcd_b_3", Standard | ||
| 251 | "lcd_b_4", Standard | ||
| 252 | "lcd_b_5", Standard | ||
| 253 | "lcd_b_6", Standard | ||
| 254 | "lcd_b_7", Standard | ||
| 255 | "lcd_g_0", Standard | ||
| 256 | "lcd_g_1", Standard | ||
| 257 | "lcd_g_2", Standard | ||
| 258 | "lcd_g_3", Standard | ||
| 259 | "lcd_g_4", Standard | ||
| 260 | "lcd_g_5", Standard | ||
| 261 | "lcd_g_6", Standard | ||
| 262 | "lcd_g_7", Standard | ||
| 263 | "lcd_hsync", Standard | ||
| 264 | "lcd_oe", Standard | ||
| 265 | "lcd_pclk", Standard | ||
| 266 | "lcd_r_0", Standard | ||
| 267 | "lcd_r_1", Standard | ||
| 268 | "lcd_r_2", Standard | ||
| 269 | "lcd_r_3", Standard | ||
| 270 | "lcd_r_4", Standard | ||
| 271 | "lcd_r_5", Standard | ||
| 272 | "lcd_r_6", Standard | ||
| 273 | "lcd_r_7", Standard | ||
| 274 | "lcd_vsync", Standard | ||
| 275 | "mdmgpio0", Standard | ||
| 276 | "mdmgpio1", Standard | ||
| 277 | "mdmgpio2", Standard | ||
| 278 | "mdmgpio3", Standard | ||
| 279 | "mdmgpio4", Standard | ||
| 280 | "mdmgpio5", Standard | ||
| 281 | "mdmgpio6", Standard | ||
| 282 | "mdmgpio7", Standard | ||
| 283 | "mdmgpio8", Standard | ||
| 284 | "mphi_data_0", Standard | ||
| 285 | "mphi_data_1", Standard | ||
| 286 | "mphi_data_2", Standard | ||
| 287 | "mphi_data_3", Standard | ||
| 288 | "mphi_data_4", Standard | ||
| 289 | "mphi_data_5", Standard | ||
| 290 | "mphi_data_6", Standard | ||
| 291 | "mphi_data_7", Standard | ||
| 292 | "mphi_data_8", Standard | ||
| 293 | "mphi_data_9", Standard | ||
| 294 | "mphi_data_10", Standard | ||
| 295 | "mphi_data_11", Standard | ||
| 296 | "mphi_data_12", Standard | ||
| 297 | "mphi_data_13", Standard | ||
| 298 | "mphi_data_14", Standard | ||
| 299 | "mphi_data_15", Standard | ||
| 300 | "mphi_ha0", Standard | ||
| 301 | "mphi_hat0", Standard | ||
| 302 | "mphi_hat1", Standard | ||
| 303 | "mphi_hce0_n", Standard | ||
| 304 | "mphi_hce1_n", Standard | ||
| 305 | "mphi_hrd_n", Standard | ||
| 306 | "mphi_hwr_n", Standard | ||
| 307 | "mphi_run0", Standard | ||
| 308 | "mphi_run1", Standard | ||
| 309 | "mtx_scan_clk", Standard | ||
| 310 | "mtx_scan_data", Standard | ||
| 311 | "nand_ad_0", Standard | ||
| 312 | "nand_ad_1", Standard | ||
| 313 | "nand_ad_2", Standard | ||
| 314 | "nand_ad_3", Standard | ||
| 315 | "nand_ad_4", Standard | ||
| 316 | "nand_ad_5", Standard | ||
| 317 | "nand_ad_6", Standard | ||
| 318 | "nand_ad_7", Standard | ||
| 319 | "nand_ale", Standard | ||
| 320 | "nand_cen_0", Standard | ||
| 321 | "nand_cen_1", Standard | ||
| 322 | "nand_cle", Standard | ||
| 323 | "nand_oen", Standard | ||
| 324 | "nand_rdy_0", Standard | ||
| 325 | "nand_rdy_1", Standard | ||
| 326 | "nand_wen", Standard | ||
| 327 | "nand_wp", Standard | ||
| 328 | "pc1", Standard | ||
| 329 | "pc2", Standard | ||
| 330 | "pmu_int", Standard | ||
| 331 | "pmu_scl", I2C | ||
| 332 | "pmu_sda", I2C | ||
| 333 | "rfst2g_mtsloten3g", Standard | ||
| 334 | "rgmii_0_rx_ctl", Standard | ||
| 335 | "rgmii_0_rxc", Standard | ||
| 336 | "rgmii_0_rxd_0", Standard | ||
| 337 | "rgmii_0_rxd_1", Standard | ||
| 338 | "rgmii_0_rxd_2", Standard | ||
| 339 | "rgmii_0_rxd_3", Standard | ||
| 340 | "rgmii_0_tx_ctl", Standard | ||
| 341 | "rgmii_0_txc", Standard | ||
| 342 | "rgmii_0_txd_0", Standard | ||
| 343 | "rgmii_0_txd_1", Standard | ||
| 344 | "rgmii_0_txd_2", Standard | ||
| 345 | "rgmii_0_txd_3", Standard | ||
| 346 | "rgmii_1_rx_ctl", Standard | ||
| 347 | "rgmii_1_rxc", Standard | ||
| 348 | "rgmii_1_rxd_0", Standard | ||
| 349 | "rgmii_1_rxd_1", Standard | ||
| 350 | "rgmii_1_rxd_2", Standard | ||
| 351 | "rgmii_1_rxd_3", Standard | ||
| 352 | "rgmii_1_tx_ctl", Standard | ||
| 353 | "rgmii_1_txc", Standard | ||
| 354 | "rgmii_1_txd_0", Standard | ||
| 355 | "rgmii_1_txd_1", Standard | ||
| 356 | "rgmii_1_txd_2", Standard | ||
| 357 | "rgmii_1_txd_3", Standard | ||
| 358 | "rgmii_gpio_0", Standard | ||
| 359 | "rgmii_gpio_1", Standard | ||
| 360 | "rgmii_gpio_2", Standard | ||
| 361 | "rgmii_gpio_3", Standard | ||
| 362 | "rtxdata2g_txdata3g1", Standard | ||
| 363 | "rtxen2g_txdata3g2", Standard | ||
| 364 | "rxdata3g0", Standard | ||
| 365 | "rxdata3g1", Standard | ||
| 366 | "rxdata3g2", Standard | ||
| 367 | "sdio1_clk", Standard | ||
| 368 | "sdio1_cmd", Standard | ||
| 369 | "sdio1_data_0", Standard | ||
| 370 | "sdio1_data_1", Standard | ||
| 371 | "sdio1_data_2", Standard | ||
| 372 | "sdio1_data_3", Standard | ||
| 373 | "sdio4_clk", Standard | ||
| 374 | "sdio4_cmd", Standard | ||
| 375 | "sdio4_data_0", Standard | ||
| 376 | "sdio4_data_1", Standard | ||
| 377 | "sdio4_data_2", Standard | ||
| 378 | "sdio4_data_3", Standard | ||
| 379 | "sim_clk", Standard | ||
| 380 | "sim_data", Standard | ||
| 381 | "sim_det", Standard | ||
| 382 | "sim_resetn", Standard | ||
| 383 | "sim2_clk", Standard | ||
| 384 | "sim2_data", Standard | ||
| 385 | "sim2_det", Standard | ||
| 386 | "sim2_resetn", Standard | ||
| 387 | "sri_c", Standard | ||
| 388 | "sri_d", Standard | ||
| 389 | "sri_e", Standard | ||
| 390 | "ssp_extclk", Standard | ||
| 391 | "ssp0_clk", Standard | ||
| 392 | "ssp0_fs", Standard | ||
| 393 | "ssp0_rxd", Standard | ||
| 394 | "ssp0_txd", Standard | ||
| 395 | "ssp2_clk", Standard | ||
| 396 | "ssp2_fs_0", Standard | ||
| 397 | "ssp2_fs_1", Standard | ||
| 398 | "ssp2_fs_2", Standard | ||
| 399 | "ssp2_fs_3", Standard | ||
| 400 | "ssp2_rxd_0", Standard | ||
| 401 | "ssp2_rxd_1", Standard | ||
| 402 | "ssp2_txd_0", Standard | ||
| 403 | "ssp2_txd_1", Standard | ||
| 404 | "ssp3_clk", Standard | ||
| 405 | "ssp3_fs", Standard | ||
| 406 | "ssp3_rxd", Standard | ||
| 407 | "ssp3_txd", Standard | ||
| 408 | "ssp4_clk", Standard | ||
| 409 | "ssp4_fs", Standard | ||
| 410 | "ssp4_rxd", Standard | ||
| 411 | "ssp4_txd", Standard | ||
| 412 | "ssp5_clk", Standard | ||
| 413 | "ssp5_fs", Standard | ||
| 414 | "ssp5_rxd", Standard | ||
| 415 | "ssp5_txd", Standard | ||
| 416 | "ssp6_clk", Standard | ||
| 417 | "ssp6_fs", Standard | ||
| 418 | "ssp6_rxd", Standard | ||
| 419 | "ssp6_txd", Standard | ||
| 420 | "stat_1", Standard | ||
| 421 | "stat_2", Standard | ||
| 422 | "sysclken", Standard | ||
| 423 | "traceclk", Standard | ||
| 424 | "tracedt00", Standard | ||
| 425 | "tracedt01", Standard | ||
| 426 | "tracedt02", Standard | ||
| 427 | "tracedt03", Standard | ||
| 428 | "tracedt04", Standard | ||
| 429 | "tracedt05", Standard | ||
| 430 | "tracedt06", Standard | ||
| 431 | "tracedt07", Standard | ||
| 432 | "tracedt08", Standard | ||
| 433 | "tracedt09", Standard | ||
| 434 | "tracedt10", Standard | ||
| 435 | "tracedt11", Standard | ||
| 436 | "tracedt12", Standard | ||
| 437 | "tracedt13", Standard | ||
| 438 | "tracedt14", Standard | ||
| 439 | "tracedt15", Standard | ||
| 440 | "txdata3g0", Standard | ||
| 441 | "txpwrind", Standard | ||
| 442 | "uartb1_ucts", Standard | ||
| 443 | "uartb1_urts", Standard | ||
| 444 | "uartb1_urxd", Standard | ||
| 445 | "uartb1_utxd", Standard | ||
| 446 | "uartb2_urxd", Standard | ||
| 447 | "uartb2_utxd", Standard | ||
| 448 | "uartb3_ucts", Standard | ||
| 449 | "uartb3_urts", Standard | ||
| 450 | "uartb3_urxd", Standard | ||
| 451 | "uartb3_utxd", Standard | ||
| 452 | "uartb4_ucts", Standard | ||
| 453 | "uartb4_urts", Standard | ||
| 454 | "uartb4_urxd", Standard | ||
| 455 | "uartb4_utxd", Standard | ||
| 456 | "vc_cam1_scl", I2C | ||
| 457 | "vc_cam1_sda", I2C | ||
| 458 | "vc_cam2_scl", I2C | ||
| 459 | "vc_cam2_sda", I2C | ||
| 460 | "vc_cam3_scl", I2C | ||
| 461 | "vc_cam3_sda", I2C | ||
| @@ -0,0 +1,23 @@ | |||
| 1 | * Freescale IMX25 IOMUX Controller | ||
| 2 | |||
| 3 | Please refer to fsl,imx-pinctrl.txt in this directory for common binding part | ||
| 4 | and usage. | ||
| 5 | |||
| 6 | CONFIG bits definition: | ||
| 7 | PAD_CTL_HYS (1 << 8) | ||
| 8 | PAD_CTL_PKE (1 << 7) | ||
| 9 | PAD_CTL_PUE (1 << 6) | ||
| 10 | PAD_CTL_PUS_100K_DOWN (0 << 4) | ||
| 11 | PAD_CTL_PUS_47K_UP (1 << 4) | ||
| 12 | PAD_CTL_PUS_100K_UP (2 << 4) | ||
| 13 | PAD_CTL_PUS_22K_UP (3 << 4) | ||
| 14 | PAD_CTL_ODE_CMOS (0 << 3) | ||
| 15 | PAD_CTL_ODE_OPENDRAIN (1 << 3) | ||
| 16 | PAD_CTL_DSE_NOMINAL (0 << 1) | ||
| 17 | PAD_CTL_DSE_HIGH (1 << 1) | ||
| 18 | PAD_CTL_DSE_MAX (2 << 1) | ||
| 19 | PAD_CTL_SRE_FAST (1 << 0) | ||
| 20 | PAD_CTL_SRE_SLOW (0 << 0) | ||
| 21 | |||
| 22 | Refer to imx25-pinfunc.h in device tree source folder for all available | ||
| 23 | imx25 PIN_FUNC_ID. | ||
| @@ -52,12 +52,25 @@ Required properties for pin configuration node: · 51 unmodified lines | |||
| 52 | CONFIG can be 0 or 1, meaning Pullup disable/enable. | 52 | CONFIG can be 0 or 1, meaning Pullup disable/enable. |
| 53 | 53 | ||
| 54 | 54 | ||
| 55 | The iomux controller has gpio child nodes which are embedded in the iomux | ||
| 56 | control registers. They have to be defined as child nodes of the iomux device | ||
| 57 | node. If gpio subnodes are defined "#address-cells", "#size-cells" and "ranges" | ||
| 58 | properties for the iomux device node are required. | ||
| 55 | 59 | ||
| 56 | Example: | 60 | Example: |
| 57 | 61 | ||
| 58 | iomuxc: iomuxc@10015000 { | 62 | iomuxc: iomuxc@10015000 { |
| 59 | compatible = "fsl,imx27-iomuxc"; | 63 | compatible = "fsl,imx27-iomuxc"; |
| 60 | reg = <0x10015000 0x600>; | 64 | reg = <0x10015000 0x600>; |
| 65 | #address-cells = <1>; | ||
| 66 | #size-cells = <1>; | ||
| 67 | ranges; | ||
| 68 | |||
| 69 | gpio1: gpio@10015000 { | ||
| 70 | ... | ||
| 71 | }; | ||
| 72 | |||
| 73 | ... | ||
| 61 | 74 | ||
| 62 | uart { | 75 | uart { |
| 63 | pinctrl_uart1: uart-1 { | 76 | pinctrl_uart1: uart-1 { |
| @@ -83,6 +96,15 @@ The above example using macros: · 19 unmodified lines | |||
| 83 | iomuxc: iomuxc@10015000 { | 96 | iomuxc: iomuxc@10015000 { |
| 84 | compatible = "fsl,imx27-iomuxc"; | 97 | compatible = "fsl,imx27-iomuxc"; |
| 85 | reg = <0x10015000 0x600>; | 98 | reg = <0x10015000 0x600>; |
| 99 | #address-cells = <1>; | ||
| 100 | #size-cells = <1>; | ||
| 101 | ranges; | ||
| 102 | |||
| 103 | gpio1: gpio@10015000 { | ||
| 104 | ... | ||
| 105 | }; | ||
| 106 | |||
| 107 | ... | ||
| 86 | 108 | ||
| 87 | uart { | 109 | uart { |
| 88 | pinctrl_uart1: uart-1 { | 110 | pinctrl_uart1: uart-1 { |
| @@ -0,0 +1,144 @@ | |||
| 1 | NVIDIA Tegra124 pinmux controller | ||
| 2 | |||
| 3 | The Tegra124 pinctrl binding is very similar to the Tegra20 and Tegra30 | ||
| 4 | pinctrl binding, as described in nvidia,tegra20-pinmux.txt and | ||
| 5 | nvidia,tegra30-pinmux.txt. In fact, this document assumes that binding as | ||
| 6 | a baseline, and only documents the differences between the two bindings. | ||
| 7 | |||
| 8 | Required properties: | ||
| 9 | - compatible: "nvidia,tegra124-pinmux" | ||
| 10 | - reg: Should contain a list of base address and size pairs for: | ||
| 11 | -- first entry - the drive strength and pad control registers. | ||
| 12 | -- second entry - the pinmux registers | ||
| 13 | |||
| 14 | Tegra124 adds the following optional properties for pin configuration subnodes. | ||
| 15 | The macros for options are defined in the | ||
| 16 | include/dt-binding/pinctrl/pinctrl-tegra.h. | ||
| 17 | - nvidia,enable-input: Integer. Enable the pin's input path. | ||
| 18 | enable :TEGRA_PIN_ENABLE0 and | ||
| 19 | disable or output only: TEGRA_PIN_DISABLE. | ||
| 20 | - nvidia,open-drain: Integer. | ||
| 21 | enable: TEGRA_PIN_ENABLE. | ||
| 22 | disable: TEGRA_PIN_DISABLE. | ||
| 23 | - nvidia,lock: Integer. Lock the pin configuration against further changes | ||
| 24 | until reset. | ||
| 25 | enable: TEGRA_PIN_ENABLE. | ||
| 26 | disable: TEGRA_PIN_DISABLE. | ||
| 27 | - nvidia,io-reset: Integer. Reset the IO path. | ||
| 28 | enable: TEGRA_PIN_ENABLE. | ||
| 29 | disable: TEGRA_PIN_DISABLE. | ||
| 30 | - nvidia,rcv-sel: Integer. Select VIL/VIH receivers. | ||
| 31 | normal: TEGRA_PIN_DISABLE | ||
| 32 | high: TEGRA_PIN_ENABLE | ||
| 33 | |||
| 34 | Please refer the Tegra TRM for complete details regarding which groups | ||
| 35 | support which functionality. | ||
| 36 | |||
| 37 | Valid values for pin and group names are: | ||
| 38 | |||
| 39 | per-pin mux groups: | ||
| 40 | |||
| 41 | These all support nvidia,function, nvidia,tristate, nvidia,pull, | ||
| 42 | nvidia,enable-input. Some support nvidia,lock nvidia,open-drain, | ||
| 43 | nvidia,io-reset and nvidia,rcv-sel. | ||
| 44 | |||
| 45 | ulpi_data0_po1, ulpi_data1_po2, ulpi_data2_po3, ulpi_data3_po4, | ||
| 46 | ulpi_data4_po5, ulpi_data5_po6, ulpi_data6_po7, ulpi_data7_po0, | ||
| 47 | ulpi_clk_py0, ulpi_dir_py1, ulpi_nxt_py2, ulpi_stp_py3, dap3_fs_pp0, | ||
| 48 | dap3_din_pp1, dap3_dout_pp2, dap3_sclk_pp3, pv0, pv1, sdmmc1_clk_pz0, | ||
| 49 | sdmmc1_cmd_pz1, sdmmc1_dat3_py4, sdmmc1_dat2_py5, sdmmc1_dat1_py6, | ||
| 50 | sdmmc1_dat0_py7, clk2_out_pw5, clk2_req_pcc5, hdmi_int_pn7, ddc_scl_pv4, | ||
| 51 | ddc_sda_pv5, uart2_rxd_pc3, uart2_txd_pc2, uart2_rts_n_pj6, | ||
| 52 | uart2_cts_n_pj5, uart3_txd_pw6, uart3_rxd_pw7, uart3_cts_n_pa1, | ||
| 53 | uart3_rts_n_pc0, pu0, pu1, pu2, pu3, pu4, pu5, pu6, gen1_i2c_scl_pc4, | ||
| 54 | gen1_i2c_sda_pc5, dap4_fs_pp4, dap4_din_pp5, dap4_dout_pp6, | ||
| 55 | dap4_sclk_pp7, clk3_out_pee0, clk3_req_pee1, pc7, pi5, pi7, pk0, pk1, | ||
| 56 | pj0, pj2, pk3, pk4, pk2, pi3, pi6, pg0, pg1, pg2, pg3, pg4, pg5, pg6, | ||
| 57 | pg7, ph0, ph1, ph2, ph3, ph4, ph5, ph6, ph7, pj7, pb0, pb1, pk7, pi0, | ||
| 58 | pi1, pi2, pi4, gen2_i2c_scl_pt5, gen2_i2c_sda_pt6, sdmmc4_clk_pcc4, | ||
| 59 | sdmmc4_cmd_pt7, sdmmc4_dat0_paa0, sdmmc4_dat1_paa1, sdmmc4_dat2_paa2, | ||
| 60 | sdmmc4_dat3_paa3, sdmmc4_dat4_paa4, sdmmc4_dat5_paa5, sdmmc4_dat6_paa6, | ||
| 61 | sdmmc4_dat7_paa7, cam_mclk_pcc0, pcc1, pbb0, cam_i2c_scl_pbb1, | ||
| 62 | cam_i2c_sda_pbb2, pbb3, pbb4, pbb5, pbb6, pbb7, pcc2, jtag_rtck, | ||
| 63 | pwr_i2c_scl_pz6, pwr_i2c_sda_pz7, kb_row0_pr0, kb_row1_pr1, kb_row2_pr2, | ||
| 64 | kb_row3_pr3, kb_row4_pr4, kb_row5_pr5, kb_row6_pr6, kb_row7_pr7, | ||
| 65 | kb_row8_ps0, kb_row9_ps1, kb_row10_ps2, kb_row11_ps3, kb_row12_ps4, | ||
| 66 | kb_row13_ps5, kb_row14_ps6, kb_row15_ps7, kb_col0_pq0, kb_col1_pq1, | ||
| 67 | kb_col2_pq2, kb_col3_pq3, kb_col4_pq4, kb_col5_pq5, kb_col6_pq6, | ||
| 68 | kb_col7_pq7, clk_32k_out_pa0, core_pwr_req, cpu_pwr_req, pwr_int_n, | ||
| 69 | clk_32k_in, owr, dap1_fs_pn0, dap1_din_pn1, dap1_dout_pn2, | ||
| 70 | dap1_sclk_pn3, dap_mclk1_req_pee2, dap_mclk1_pw4, spdif_in_pk6, | ||
| 71 | spdif_out_pk5, dap2_fs_pa2, dap2_din_pa4, dap2_dout_pa5, dap2_sclk_pa3, | ||
| 72 | dvfs_pwm_px0, gpio_x1_aud_px1, gpio_x3_aud_px3, dvfs_clk_px2, | ||
| 73 | gpio_x4_aud_px4, gpio_x5_aud_px5, gpio_x6_aud_px6, gpio_x7_aud_px7, | ||
| 74 | sdmmc3_clk_pa6, sdmmc3_cmd_pa7, sdmmc3_dat0_pb7, sdmmc3_dat1_pb6, | ||
| 75 | sdmmc3_dat2_pb5, sdmmc3_dat3_pb4, pex_l0_rst_n_pdd1, | ||
| 76 | pex_l0_clkreq_n_pdd2, pex_wake_n_pdd3, pex_l1_rst_n_pdd5, | ||
| 77 | pex_l1_clkreq_n_pdd6, hdmi_cec_pee3, sdmmc1_wp_n_pv3, | ||
| 78 | sdmmc3_cd_n_pv2, gpio_w2_aud_pw2, gpio_w3_aud_pw3, usb_vbus_en0_pn4, | ||
| 79 | usb_vbus_en1_pn5, sdmmc3_clk_lb_out_pee4, sdmmc3_clk_lb_in_pee5, | ||
| 80 | gmi_clk_lb, reset_out_n, kb_row16_pt0, kb_row17_pt1, usb_vbus_en2_pff1, | ||
| 81 | pff2, dp_hpd_pff0, | ||
| 82 | |||
| 83 | drive groups: | ||
| 84 | |||
| 85 | These all support nvidia,pull-down-strength, nvidia,pull-up-strength, | ||
| 86 | nvidia,slew-rate-rising, nvidia,slew-rate-falling. Most but not all | ||
| 87 | support nvidia,high-speed-mode, nvidia,schmitt, nvidia,low-power-mode | ||
| 88 | and nvidia,drive-type. | ||
| 89 | |||
| 90 | ao1, ao2, at1, at2, at3, at4, at5, cdev1, cdev2, dap1, dap2, dap3, dap4, | ||
| 91 | dbg, sdio3, spi, uaa, uab, uart2, uart3, sdio1, ddc, gma, gme, gmf, gmg, | ||
| 92 | gmh, owr, uda, gpv, dev3, cec, usb_vbus_en, ao3, ao0, hv0, sdio4, ao4. | ||
| 93 | |||
| 94 | Valid values for nvidia,functions are: | ||
| 95 | |||
| 96 | blink, cec, cldvfs, clk12, cpu, dap, dap1, dap2, dev3, displaya, | ||
| 97 | displaya_alt, displayb, dtv, extperiph1, extperiph2, extperiph3, | ||
| 98 | gmi, gmi_alt, hda, hsi, i2c1, i2c2, i2c3, i2c4, i2cpwr, i2s0, | ||
| 99 | i2s1, i2s2, i2s3, i2s4, irda, kbc, owr, pmi, pwm0, pwm1, pwm2, pwm3, | ||
| 100 | pwron, reset_out_n, rsvd1, rsvd2, rsvd3, rsvd4, sdmmc1, sdmmc2, sdmmc3, | ||
| 101 | sdmmc4, soc, spdif, spi1, spi2, spi3, spi4, spi5, spi6, trace, uarta, | ||
| 102 | uartb, uartc, uartd, ulpi, usb, vgp1, vgp2, vgp3, vgp4, vgp5, vgp6, | ||
| 103 | vi, vi_alt1, vi_alt3, vimclk2, vimclk2_alt, sata, ccla, pe0, pe, pe1, | ||
| 104 | dp, rtck, sys, clk tmds. | ||
| 105 | |||
| 106 | Example: | ||
| 107 | |||
| 108 | pinmux: pinmux { | ||
| 109 | compatible = "nvidia,tegra124-pinmux"; | ||
| 110 | reg = <0x70000868 0x164 /* Pad control registers */ | ||
| 111 | 0x70003000 0x434>; /* PinMux registers */ | ||
| 112 | }; | ||
| 113 | |||
| 114 | Example pinmux entries: | ||
| 115 | |||
| 116 | pinctrl { | ||
| 117 | sdmmc4_default: pinmux { | ||
| 118 | sdmmc4_clk_pcc4 { | ||
| 119 | nvidia,pins = "sdmmc4_clk_pcc4", | ||
| 120 | nvidia,function = "sdmmc4"; | ||
| 121 | nvidia,pull = <TEGRA_PIN_PULL_NONE>; | ||
| 122 | nvidia,tristate = <TEGRA_PIN_DISABLE>; | ||
| 123 | }; | ||
| 124 | |||
| 125 | sdmmc4_dat0_paa0 { | ||
| 126 | nvidia,pins = "sdmmc4_dat0_paa0", | ||
| 127 | "sdmmc4_dat1_paa1", | ||
| 128 | "sdmmc4_dat2_paa2", | ||
| 129 | "sdmmc4_dat3_paa3", | ||
| 130 | "sdmmc4_dat4_paa4", | ||
| 131 | "sdmmc4_dat5_paa5", | ||
| 132 | "sdmmc4_dat6_paa6", | ||
| 133 | "sdmmc4_dat7_paa7"; | ||
| 134 | nvidia,function = "sdmmc4"; | ||
| 135 | nvidia,pull = <TEGRA_PIN_PULL_UP>; | ||
| 136 | nvidia,tristate = <TEGRA_PIN_DISABLE>; | ||
| 137 | }; | ||
| 138 | }; | ||
| 139 | }; | ||
| 140 | |||
| 141 | sdhci@78000400 { | ||
| 142 | pinctrl-names = "default"; | ||
| 143 | pinctrl-0 = <&sdmmc4_default>; | ||
| 144 | }; | ||
| @@ -151,6 +151,8 @@ drive-push-pull - drive actively high and low · 150 unmodified lines | |||
| 151 | drive-open-drain - drive with open drain | 151 | drive-open-drain - drive with open drain |
| 152 | drive-open-source - drive with open source | 152 | drive-open-source - drive with open source |
| 153 | drive-strength - sink or source at most X mA | 153 | drive-strength - sink or source at most X mA |
| 154 | input-enable - enable input on pin (no effect on output) | ||
| 155 | input-disable - disable input on pin (no effect on output) | ||
| 154 | input-schmitt-enable - enable schmitt-trigger mode | 156 | input-schmitt-enable - enable schmitt-trigger mode |
| 155 | input-schmitt-disable - disable schmitt-trigger mode | 157 | input-schmitt-disable - disable schmitt-trigger mode |
| 156 | input-debounce - debounce mode with debound time X | 158 | input-debounce - debounce mode with debound time X |
| @@ -158,6 +160,7 @@ low-power-enable - enable low power mode · 1 unmodified line | |||
| 158 | low-power-disable - disable low power mode | 160 | low-power-disable - disable low power mode |
| 159 | output-low - set the pin to output mode with low level | 161 | output-low - set the pin to output mode with low level |
| 160 | output-high - set the pin to output mode with high level | 162 | output-high - set the pin to output mode with high level |
| 163 | slew-rate - set the slew rate | ||
| 161 | 164 | ||
| 162 | Some of the generic properties take arguments. For those that do, the | 165 | Some of the generic properties take arguments. For those that do, the |
| 163 | arguments are described below. | 166 | arguments are described below. |
| @@ -98,7 +98,7 @@ below for more information. · 97 unmodified lines | |||
| 98 | In case when one register changes more than one pin's mux the | 98 | In case when one register changes more than one pin's mux the |
| 99 | pinctrl-single,bits need to be used which takes three parameters: | 99 | pinctrl-single,bits need to be used which takes three parameters: |
| 100 | 100 | ||
| 101 | pinctrl-single,bits = <0xdc 0x18, 0xff>; | 101 | pinctrl-single,bits = <0xdc 0x18 0xff>; |
| 102 | 102 | ||
| 103 | Where 0xdc is the offset from the pinctrl register base address for the | 103 | Where 0xdc is the offset from the pinctrl register base address for the |
| 104 | device pinctrl register, 0x18 is the desired value, and 0xff is the sub mask to | 104 | device pinctrl register, 0x18 is the desired value, and 0xff is the sub mask to |
| @@ -0,0 +1,92 @@ | |||
| 1 | Qualcomm MSM8974 TLMM block | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: "qcom,msm8x74-pinctrl" | ||
| 5 | - reg: Should be the base address and length of the TLMM block. | ||
| 6 | - interrupts: Should be the parent IRQ of the TLMM block. | ||
| 7 | - interrupt-controller: Marks the device node as an interrupt controller. | ||
| 8 | - #interrupt-cells: Should be two. | ||
| 9 | - gpio-controller: Marks the device node as a GPIO controller. | ||
| 10 | - #gpio-cells : Should be two. | ||
| 11 | The first cell is the gpio pin number and the | ||
| 12 | second cell is used for optional parameters. | ||
| 13 | |||
| 14 | Please refer to ../gpio/gpio.txt and ../interrupt-controller/interrupts.txt for | ||
| 15 | a general description of GPIO and interrupt bindings. | ||
| 16 | |||
| 17 | Please refer to pinctrl-bindings.txt in this directory for details of the | ||
| 18 | common pinctrl bindings used by client devices, including the meaning of the | ||
| 19 | phrase "pin configuration node". | ||
| 20 | |||
| 21 | Qualcomm's pin configuration nodes act as a container for an abitrary number of | ||
| 22 | subnodes. Each of these subnodes represents some desired configuration for a | ||
| 23 | pin, a group, or a list of pins or groups. This configuration can include the | ||
| 24 | mux function to select on those pin(s)/group(s), and various pin configuration | ||
| 25 | parameters, such as pull-up, drive strength, etc. | ||
| 26 | |||
| 27 | The name of each subnode is not important; all subnodes should be enumerated | ||
| 28 | and processed purely based on their content. | ||
| 29 | |||
| 30 | Each subnode only affects those parameters that are explicitly listed. In | ||
| 31 | other words, a subnode that lists a mux function but no pin configuration | ||
| 32 | parameters implies no information about any pin configuration parameters. | ||
| 33 | Similarly, a pin subnode that describes a pullup parameter implies no | ||
| 34 | information about e.g. the mux function. | ||
| 35 | |||
| 36 | |||
| 37 | The following generic properties as defined in pinctrl-bindings.txt are valid | ||
| 38 | to specify in a pin configuration subnode: | ||
| 39 | pins, function, bias-disable, bias-pull-down, bias-pull,up, drive-strength. | ||
| 40 | |||
| 41 | Non-empty subnodes must specify the 'pins' property. | ||
| 42 | Note that not all properties are valid for all pins. | ||
| 43 | |||
| 44 | |||
| 45 | Valid values for qcom,pins are: | ||
| 46 | gpio0-gpio145 | ||
| 47 | Supports mux, bias and drive-strength | ||
| 48 | |||
| 49 | sdc1_clk, sdc1_cmd, sdc1_data, sdc2_clk, sdc2_cmd, sdc2_data | ||
| 50 | Supports bias and drive-strength | ||
| 51 | |||
| 52 | Valid values for qcom,function are: | ||
| 53 | blsp_i2c2, blsp_i2c6, blsp_i2c11, blsp_spi1, blsp_uart2, blsp_uart8, slimbus | ||
| 54 | |||
| 55 | (Note that this is not yet the complete list of functions) | ||
| 56 | |||
| 57 | |||
| 58 | |||
| 59 | Example: | ||
| 60 | |||
| 61 | msmgpio: pinctrl@fd510000 { | ||
| 62 | compatible = "qcom,msm8974-pinctrl"; | ||
| 63 | reg = <0xfd510000 0x4000>; | ||
| 64 | |||
| 65 | gpio-controller; | ||
| 66 | #gpio-cells = <2>; | ||
| 67 | interrupt-controller; | ||
| 68 | #interrupt-cells = <2>; | ||
| 69 | interrupts = <0 208 0>; | ||
| 70 | |||
| 71 | pinctrl-names = "default"; | ||
| 72 | pinctrl-0 = <&uart2_default>; | ||
| 73 | |||
| 74 | uart2_default: uart2_default { | ||
| 75 | mux { | ||
| 76 | qcom,pins = "gpio4", "gpio5"; | ||
| 77 | qcom,function = "blsp_uart2"; | ||
| 78 | }; | ||
| 79 | |||
| 80 | tx { | ||
| 81 | qcom,pins = "gpio4"; | ||
| 82 | drive-strength = <4>; | ||
| 83 | bias-disable; | ||
| 84 | }; | ||
| 85 | |||
| 86 | rx { | ||
| 87 | qcom,pins = "gpio5"; | ||
| 88 | drive-strength = <2>; | ||
| 89 | bias-pull-up; | ||
| 90 | }; | ||
| 91 | }; | ||
| 92 | }; | ||
| @@ -26,6 +26,11 @@ Optional properties: · 25 unmodified lines | |||
| 26 | - #gpio-range-cells: Mandatory when the PFC doesn't handle GPIO, forbidden | 26 | - #gpio-range-cells: Mandatory when the PFC doesn't handle GPIO, forbidden |
| 27 | otherwise. Should be 3. | 27 | otherwise. Should be 3. |
| 28 | 28 | ||
| 29 | - interrupts-extended: Specify the interrupts associated with external | ||
| 30 | IRQ pins. This property is mandatory when the PFC handles GPIOs and | ||
| 31 | forbidden otherwise. When specified, it must contain one interrupt per | ||
| 32 | external IRQ, sorted by external IRQ number. | ||
| 33 | |||
| 29 | The PFC node also acts as a container for pin configuration nodes. Please refer | 34 | The PFC node also acts as a container for pin configuration nodes. Please refer |
| 30 | to pinctrl-bindings.txt in this directory for the definition of the term "pin | 35 | to pinctrl-bindings.txt in this directory for the definition of the term "pin |
| 31 | configuration node" and for the common pinctrl bindings used by client devices. | 36 | configuration node" and for the common pinctrl bindings used by client devices. |
| @@ -103,6 +108,15 @@ Example 1: SH73A0 (SH-Mobile AG5) pin controller node · 71 unmodified lines | |||
| 103 | <0xe605801c 0x1c>; | 108 | <0xe605801c 0x1c>; |
| 104 | gpio-controller; | 109 | gpio-controller; |
| 105 | #gpio-cells = <2>; | 110 | #gpio-cells = <2>; |
| 111 | interrupts-extended = | ||
| 112 | <&irqpin0 0 0>, <&irqpin0 1 0>, <&irqpin0 2 0>, <&irqpin0 3 0>, | ||
| 113 | <&irqpin0 4 0>, <&irqpin0 5 0>, <&irqpin0 6 0>, <&irqpin0 7 0>, | ||
| 114 | <&irqpin1 0 0>, <&irqpin1 1 0>, <&irqpin1 2 0>, <&irqpin1 3 0>, | ||
| 115 | <&irqpin1 4 0>, <&irqpin1 5 0>, <&irqpin1 6 0>, <&irqpin1 7 0>, | ||
| 116 | <&irqpin2 0 0>, <&irqpin2 1 0>, <&irqpin2 2 0>, <&irqpin2 3 0>, | ||
| 117 | <&irqpin2 4 0>, <&irqpin2 5 0>, <&irqpin2 6 0>, <&irqpin2 7 0>, | ||
| 118 | <&irqpin3 0 0>, <&irqpin3 1 0>, <&irqpin3 2 0>, <&irqpin3 3 0>, | ||
| 119 | <&irqpin3 4 0>, <&irqpin3 5 0>, <&irqpin3 6 0>, <&irqpin3 7 0>; | ||
| 106 | }; | 120 | }; |
| 107 | 121 | ||
| 108 | Example 2: A GPIO LED node that references a GPIO | 122 | Example 2: A GPIO LED node that references a GPIO |
| @@ -0,0 +1,17 @@ | |||
| 1 | Binding for NXP ISP1704 USB Charger Detection | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: Should contain one of the following: | ||
| 5 | * "nxp,isp1704" | ||
| 6 | - nxp,enable-gpio: Should contain a phandle + gpio-specifier | ||
| 7 | to the GPIO pin connected to the chip's enable pin. | ||
| 8 | - usb-phy: Should contain a phandle to the USB PHY | ||
| 9 | the ISP1704 is connected to. | ||
| 10 | |||
| 11 | Example: | ||
| 12 | |||
| 13 | isp1704 { | ||
| 14 | compatible = "nxp,isp1704"; | ||
| 15 | nxp,enable-gpio = <&gpio3 3 GPIO_ACTIVE_LOW>; | ||
| 16 | usb-phy = <&usb2_phy>; | ||
| 17 | }; | ||
| @@ -0,0 +1,81 @@ | |||
| 1 | charger-manager bindings | ||
| 2 | ~~~~~~~~~~~~~~~~~~~~~~~~ | ||
| 3 | |||
| 4 | Required properties : | ||
| 5 | - compatible : "charger-manager" | ||
| 6 | - <>-supply : for regulator consumer | ||
| 7 | - cm-num-chargers : number of chargers | ||
| 8 | - cm-chargers : name of chargers | ||
| 9 | - cm-fuel-gauge : name of battery fuel gauge | ||
| 10 | - subnode <regulator> : | ||
| 11 | - cm-regulator-name : name of charger regulator | ||
| 12 | - subnode <cable> : | ||
| 13 | - cm-cable-name : name of charger cable | ||
| 14 | - cm-cable-extcon : name of extcon dev | ||
| 15 | (optional) - cm-cable-min : minimum current of cable | ||
| 16 | (optional) - cm-cable-max : maximum current of cable | ||
| 17 | |||
| 18 | Optional properties : | ||
| 19 | - cm-name : charger manager's name (default : "battery") | ||
| 20 | - cm-poll-mode : polling mode (enum polling_modes) | ||
| 21 | - cm-poll-interval : polling interval | ||
| 22 | - cm-battery-stat : battery status (enum data_source) | ||
| 23 | - cm-fullbatt-* : data for full battery checking | ||
| 24 | - cm-thermal-zone : name of external thermometer's thermal zone | ||
| 25 | - cm-battery-* : threshold battery temperature for charging | ||
| 26 | -cold : critical cold temperature of battery for charging | ||
| 27 | -cold-in-minus : flag that cold temerature is in minus degree | ||
| 28 | -hot : critical hot temperature of battery for charging | ||
| 29 | -temp-diff : temperature difference to allow recharging | ||
| 30 | - cm-dis/charging-max = limits of charging duration | ||
| 31 | |||
| 32 | Example : | ||
| 33 | charger-manager@0 { | ||
| 34 | compatible = "charger-manager"; | ||
| 35 | chg-reg-supply = <&charger_regulator>; | ||
| 36 | |||
| 37 | cm-name = "battery"; | ||
| 38 | /* Always polling ON : 30s */ | ||
| 39 | cm-poll-mode = <1>; | ||
| 40 | cm-poll-interval = <30000>; | ||
| 41 | |||
| 42 | cm-fullbatt-vchkdrop-ms = <30000>; | ||
| 43 | cm-fullbatt-vchkdrop-volt = <150000>; | ||
| 44 | cm-fullbatt-soc = <100>; | ||
| 45 | |||
| 46 | cm-battery-stat = <3>; | ||
| 47 | |||
| 48 | cm-num-chargers = <3>; | ||
| 49 | cm-chargers = "charger0", "charger1", "charger2"; | ||
| 50 | |||
| 51 | cm-fuel-gauge = "fuelgauge0"; | ||
| 52 | |||
| 53 | cm-thermal-zone = "thermal_zone.1" | ||
| 54 | /* in deci centigrade */ | ||
| 55 | cm-battery-cold = <50>; | ||
| 56 | cm-battery-cold-in-minus; | ||
| 57 | cm-battery-hot = <800>; | ||
| 58 | cm-battery-temp-diff = <100>; | ||
| 59 | |||
| 60 | /* Allow charging for 5hr */ | ||
| 61 | cm-charging-max = <18000000>; | ||
| 62 | /* Allow discharging for 2hr */ | ||
| 63 | cm-discharging-max = <7200000>; | ||
| 64 | |||
| 65 | regulator@0 { | ||
| 66 | cm-regulator-name = "chg-reg"; | ||
| 67 | cable@0 { | ||
| 68 | cm-cable-name = "USB"; | ||
| 69 | cm-cable-extcon = "extcon-dev.0"; | ||
| 70 | cm-cable-min = <475000>; | ||
| 71 | cm-cable-max = <500000>; | ||
| 72 | }; | ||
| 73 | cable@1 { | ||
| 74 | cm-cable-name = "TA"; | ||
| 75 | cm-cable-extcon = "extcon-dev.0"; | ||
| 76 | cm-cable-min = <650000>; | ||
| 77 | cm-cable-max = <675000>; | ||
| 78 | }; | ||
| 79 | }; | ||
| 80 | |||
| 81 | }; | ||
| @@ -10,7 +10,6 @@ Currently defined compatibles: · 9 unmodified lines | |||
| 10 | Example: | 10 | Example: |
| 11 | 11 | ||
| 12 | ethernet@11300 { | 12 | ethernet@11300 { |
| 13 | device_type = "network"; | ||
| 14 | compatible = "fsl,mpc8272-fcc-enet", | 13 | compatible = "fsl,mpc8272-fcc-enet", |
| 15 | "fsl,cpm2-fcc-enet"; | 14 | "fsl,cpm2-fcc-enet"; |
| 16 | reg = <11300 20 8400 100 11390 1>; | 15 | reg = <11300 20 8400 100 11390 1>; |
| @@ -33,7 +32,6 @@ fsl,mdc-pin : pin of port C controlling mdio clock · 16 unmodified lines | |||
| 33 | 32 | ||
| 34 | Example: | 33 | Example: |
| 35 | mdio@10d40 { | 34 | mdio@10d40 { |
| 36 | device_type = "mdio"; | ||
| 37 | compatible = "fsl,mpc8272ads-mdio-bitbang", | 35 | compatible = "fsl,mpc8272ads-mdio-bitbang", |
| 38 | "fsl,mpc8272-mdio-bitbang", | 36 | "fsl,mpc8272-mdio-bitbang", |
| 39 | "fsl,cpm2-mdio-bitbang"; | 37 | "fsl,cpm2-mdio-bitbang"; |
| @@ -1,8 +1,6 @@ | |||
| 1 | * Pin configuration nodes | 1 | * Pin configuration nodes |
| 2 | 2 | ||
| 3 | Required properties: | 3 | Required properties: |
| 4 | - linux,phandle : phandle of this node; likely referenced by a QE | ||
| 5 | device. | ||
| 6 | - pio-map : array of pin configurations. Each pin is defined by 6 | 4 | - pio-map : array of pin configurations. Each pin is defined by 6 |
| 7 | integers. The six numbers are respectively: port, pin, dir, | 5 | integers. The six numbers are respectively: port, pin, dir, |
| 8 | open_drain, assignment, has_irq. | 6 | open_drain, assignment, has_irq. |
| @@ -29,7 +27,6 @@ Required properties: · 20 unmodified lines | |||
| 29 | 27 | ||
| 30 | Example: | 28 | Example: |
| 31 | ucc_pin@01 { | 29 | ucc_pin@01 { |
| 32 | linux,phandle = <140001>; | ||
| 33 | pio-map = < | 30 | pio-map = < |
| 34 | /* port pin dir open_drain assignment has_irq */ | 31 | /* port pin dir open_drain assignment has_irq */ |
| 35 | 0 3 1 0 1 0 /* TxD0 */ | 32 | 0 3 1 0 1 0 /* TxD0 */ |
| @@ -0,0 +1,33 @@ | |||
| 1 | Atmel PWM controller | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: should be one of: | ||
| 5 | - "atmel,at91sam9rl-pwm" | ||
| 6 | - "atmel,sama5d3-pwm" | ||
| 7 | - reg: physical base address and length of the controller's registers | ||
| 8 | - #pwm-cells: Should be 3. See pwm.txt in this directory for a | ||
| 9 | description of the cells format. | ||
| 10 | |||
| 11 | Example: | ||
| 12 | |||
| 13 | pwm0: pwm@f8034000 { | ||
| 14 | compatible = "atmel,at91sam9rl-pwm"; | ||
| 15 | reg = <0xf8034000 0x400>; | ||
| 16 | #pwm-cells = <3>; | ||
| 17 | }; | ||
| 18 | |||
| 19 | pwmleds { | ||
| 20 | compatible = "pwm-leds"; | ||
| 21 | |||
| 22 | d1 { | ||
| 23 | label = "d1"; | ||
| 24 | pwms = <&pwm0 3 5000 0> | ||
| 25 | max-brightness = <255>; | ||
| 26 | }; | ||
| 27 | |||
| 28 | d2 { | ||
| 29 | label = "d2"; | ||
| 30 | pwms = <&pwm0 1 5000 1> | ||
| 31 | max-brightness = <255>; | ||
| 32 | }; | ||
| 33 | }; | ||
| @@ -7,6 +7,12 @@ Required properties: · 6 unmodified lines | |||
| 7 | - reg: physical base address and length of the controller's registers | 7 | - reg: physical base address and length of the controller's registers |
| 8 | - #pwm-cells: should be 2. See pwm.txt in this directory for a description of | 8 | - #pwm-cells: should be 2. See pwm.txt in this directory for a description of |
| 9 | the cells format. | 9 | the cells format. |
| 10 | - clocks: Must contain one entry, for the module clock. | ||
| 11 | See ../clocks/clock-bindings.txt for details. | ||
| 12 | - resets: Must contain an entry for each entry in reset-names. | ||
| 13 | See ../reset/reset.txt for details. | ||
| 14 | - reset-names: Must include the following entries: | ||
| 15 | - pwm | ||
| 10 | 16 | ||
| 11 | Example: | 17 | Example: |
| 12 | 18 | ||
| @@ -14,4 +20,7 @@ Example: · 1 unmodified line | |||
| 14 | compatible = "nvidia,tegra20-pwm"; | 20 | compatible = "nvidia,tegra20-pwm"; |
| 15 | reg = <0x7000a000 0x100>; | 21 | reg = <0x7000a000 0x100>; |
| 16 | #pwm-cells = <2>; | 22 | #pwm-cells = <2>; |
| 23 | clocks = <&tegra_car 17>; | ||
| 24 | resets = <&tegra_car 17>; | ||
| 25 | reset-names = "pwm"; | ||
| 17 | }; | 26 | }; |
| @@ -0,0 +1,58 @@ | |||
| 1 | TI/National Semiconductor LP3943 PWM controller | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: "ti,lp3943-pwm" | ||
| 5 | - #pwm-cells: Should be 2. See pwm.txt in this directory for a | ||
| 6 | description of the cells format. | ||
| 7 | Note that this hardware limits the period length to the | ||
| 8 | range 6250~1600000. | ||
| 9 | - ti,pwm0 or ti,pwm1: Output pin number(s) for PWM channel 0 or 1. | ||
| 10 | 0 = output 0 | ||
| 11 | 1 = output 1 | ||
| 12 | . | ||
| 13 | . | ||
| 14 | 15 = output 15 | ||
| 15 | |||
| 16 | Example: | ||
| 17 | PWM 0 is for RGB LED brightness control | ||
| 18 | PWM 1 is for brightness control of LP8557 backlight device | ||
| 19 | |||
| 20 | &i2c3 { | ||
| 21 | lp3943@60 { | ||
| 22 | compatible = "ti,lp3943"; | ||
| 23 | reg = <0x60>; | ||
| 24 | |||
| 25 | /* | ||
| 26 | * PWM 0 : output 8, 9 and 10 | ||
| 27 | * PWM 1 : output 15 | ||
| 28 | */ | ||
| 29 | pwm3943: pwm { | ||
| 30 | compatible = "ti,lp3943-pwm"; | ||
| 31 | #pwm-cells = <2>; | ||
| 32 | ti,pwm0 = <8 9 10>; | ||
| 33 | ti,pwm1 = <15>; | ||
| 34 | }; | ||
| 35 | }; | ||
| 36 | |||
| 37 | }; | ||
| 38 | |||
| 39 | /* LEDs control with PWM 0 of LP3943 */ | ||
| 40 | pwmleds { | ||
| 41 | compatible = "pwm-leds"; | ||
| 42 | rgb { | ||
| 43 | label = "indi::rgb"; | ||
| 44 | pwms = <&pwm3943 0 10000>; | ||
| 45 | max-brightness = <255>; | ||
| 46 | }; | ||
| 47 | }; | ||
| 48 | |||
| 49 | &i2c4 { | ||
| 50 | /* Backlight control with PWM 1 of LP3943 */ | ||
| 51 | backlight@2c { | ||
| 52 | compatible = "ti,lp8557"; | ||
| 53 | reg = <0x2c>; | ||
| 54 | |||
| 55 | pwms = <&pwm3943 1 10000>; | ||
| 56 | pwm-names = "lp8557"; | ||
| 57 | }; | ||
| 58 | }; | ||
| @@ -0,0 +1,30 @@ | |||
| 1 | Marvell PWM controller | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: should be one or more of: | ||
| 5 | - "marvell,pxa250-pwm" | ||
| 6 | - "marvell,pxa270-pwm" | ||
| 7 | - "marvell,pxa168-pwm" | ||
| 8 | - "marvell,pxa910-pwm" | ||
| 9 | - reg: Physical base address and length of the registers used by the PWM channel | ||
| 10 | Note that one device instance must be created for each PWM that is used, so the | ||
| 11 | length covers only the register window for one PWM output, not that of the | ||
| 12 | entire PWM controller. Currently length is 0x10 for all supported devices. | ||
| 13 | - #pwm-cells: Should be 1. This cell is used to specify the period in | ||
| 14 | nanoseconds. | ||
| 15 | |||
| 16 | Example PWM device node: | ||
| 17 | |||
| 18 | pwm0: pwm@40b00000 { | ||
| 19 | compatible = "marvell,pxa250-pwm"; | ||
| 20 | reg = <0x40b00000 0x10>; | ||
| 21 | #pwm-cells = <1>; | ||
| 22 | }; | ||
| 23 | |||
| 24 | Example PWM client node: | ||
| 25 | |||
| 26 | backlight { | ||
| 27 | compatible = "pwm-backlight"; | ||
| 28 | pwms = <&pwm0 5000000>; | ||
| 29 | ... | ||
| 30 | } | ||
| @@ -0,0 +1,60 @@ | |||
| 1 | ACT8865 regulator | ||
| 2 | ------------------- | ||
| 3 | |||
| 4 | Required properties: | ||
| 5 | - compatible: "active-semi,act8865" | ||
| 6 | - reg: I2C slave address | ||
| 7 | |||
| 8 | Any standard regulator properties can be used to configure the single regulator. | ||
| 9 | |||
| 10 | The valid names for regulators are: | ||
| 11 | DCDC_REG1, DCDC_REG2, DCDC_REG3, LDO_REG1, LDO_REG2, LDO_REG3, LDO_REG4. | ||
| 12 | |||
| 13 | Example: | ||
| 14 | -------- | ||
| 15 | |||
| 16 | i2c1: i2c@f0018000 { | ||
| 17 | pmic: act8865@5b { | ||
| 18 | compatible = "active-semi,act8865"; | ||
| 19 | reg = <0x5b>; | ||
| 20 | status = "disabled"; | ||
| 21 | |||
| 22 | regulators { | ||
| 23 | vcc_1v8_reg: DCDC_REG1 { | ||
| 24 | regulator-name = "VCC_1V8"; | ||
| 25 | regulator-min-microvolt = <1800000>; | ||
| 26 | regulator-max-microvolt = <1800000>; | ||
| 27 | regulator-always-on; | ||
| 28 | }; | ||
| 29 | |||
| 30 | vcc_1v2_reg: DCDC_REG2 { | ||
| 31 | regulator-name = "VCC_1V2"; | ||
| 32 | regulator-min-microvolt = <1100000>; | ||
| 33 | regulator-max-microvolt = <1300000>; | ||
| 34 | regulator-suspend-mem-microvolt = <1150000>; | ||
| 35 | regulator-suspend-standby-microvolt = <1150000>; | ||
| 36 | regulator-always-on; | ||
| 37 | }; | ||
| 38 | |||
| 39 | vcc_3v3_reg: DCDC_REG3 { | ||
| 40 | regulator-name = "VCC_3V3"; | ||
| 41 | regulator-min-microvolt = <3300000>; | ||
| 42 | regulator-max-microvolt = <3300000>; | ||
| 43 | regulator-always-on; | ||
| 44 | }; | ||
| 45 | |||
| 46 | vddana_reg: LDO_REG1 { | ||
| 47 | regulator-name = "VDDANA"; | ||
| 48 | regulator-min-microvolt = <3300000>; | ||
| 49 | regulator-max-microvolt = <3300000>; | ||
| 50 | regulator-always-on; | ||
| 51 | }; | ||
| 52 | |||
| 53 | vddfuse_reg: LDO_REG2 { | ||
| 54 | regulator-name = "FUSE_2V5"; | ||
| 55 | regulator-min-microvolt = <2500000>; | ||
| 56 | regulator-max-microvolt = <2500000>; | ||
| 57 | }; | ||
| 58 | }; | ||
| 59 | }; | ||
| 60 | }; | ||
| @@ -83,7 +83,7 @@ as per the datasheet of s5m8767. · 82 unmodified lines | |||
| 83 | 83 | ||
| 84 | - LDOn | 84 | - LDOn |
| 85 | - valid values for n are 1 to 28 | 85 | - valid values for n are 1 to 28 |
| 86 | - Example: LDO0, LD01, LDO28 | 86 | - Example: LDO1, LD02, LDO28 |
| 87 | - BUCKn | 87 | - BUCKn |
| 88 | - valid values for n are 1 to 9. | 88 | - valid values for n are 1 to 9. |
| 89 | - Example: BUCK1, BUCK2, BUCK9 | 89 | - Example: BUCK1, BUCK2, BUCK9 |
| @@ -0,0 +1,27 @@ | |||
| 1 | Haoyu Microelectronics HYM8563 Real Time Clock | ||
| 2 | |||
| 3 | The HYM8563 provides basic rtc and alarm functionality | ||
| 4 | as well as a clock output of up to 32kHz. | ||
| 5 | |||
| 6 | Required properties: | ||
| 7 | - compatible: should be: "haoyu,hym8563" | ||
| 8 | - reg: i2c address | ||
| 9 | - interrupts: rtc alarm/event interrupt | ||
| 10 | - #clock-cells: the value should be 0 | ||
| 11 | |||
| 12 | Example: | ||
| 13 | |||
| 14 | hym8563: hym8563@51 { | ||
| 15 | compatible = "haoyu,hym8563"; | ||
| 16 | reg = <0x51>; | ||
| 17 | |||
| 18 | interrupts = <13 IRQ_TYPE_EDGE_FALLING>; | ||
| 19 | |||
| 20 | #clock-cells = <0>; | ||
| 21 | }; | ||
| 22 | |||
| 23 | device { | ||
| 24 | ... | ||
| 25 | clocks = <&hym8563>; | ||
| 26 | ... | ||
| 27 | }; | ||
| @@ -0,0 +1,12 @@ | |||
| 1 | * Maxim (Dallas) DS1742/DS1743 Real Time Clock | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: Should contain "maxim,ds1742". | ||
| 5 | - reg: Physical base address of the RTC and length of memory | ||
| 6 | mapped region. | ||
| 7 | |||
| 8 | Example: | ||
| 9 | rtc: rtc@10000000 { | ||
| 10 | compatible = "maxim,ds1742"; | ||
| 11 | reg = <0x10000000 0x800>; | ||
| 12 | }; | ||
| @@ -9,6 +9,8 @@ Required properties: · 8 unmodified lines | |||
| 9 | - compatible : should be "nvidia,tegra20-rtc". | 9 | - compatible : should be "nvidia,tegra20-rtc". |
| 10 | - reg : Specifies base physical address and size of the registers. | 10 | - reg : Specifies base physical address and size of the registers. |
| 11 | - interrupts : A single interrupt specifier. | 11 | - interrupts : A single interrupt specifier. |
| 12 | - clocks : Must contain one entry, for the module clock. | ||
| 13 | See ../clocks/clock-bindings.txt for details. | ||
| 12 | 14 | ||
| 13 | Example: | 15 | Example: |
| 14 | 16 | ||
| @@ -16,4 +18,5 @@ timer { · 1 unmodified line | |||
| 16 | compatible = "nvidia,tegra20-rtc"; | 18 | compatible = "nvidia,tegra20-rtc"; |
| 17 | reg = <0x7000e000 0x100>; | 19 | reg = <0x7000e000 0x100>; |
| 18 | interrupts = <0 2 0x04>; | 20 | interrupts = <0 2 0x04>; |
| 21 | clocks = <&tegra_car 4>; | ||
| 19 | }; | 22 | }; |
| @@ -0,0 +1,17 @@ | |||
| 1 | * sun4i/sun7i Real Time Clock | ||
| 2 | |||
| 3 | RTC controller for the Allwinner A10/A20 | ||
| 4 | |||
| 5 | Required properties: | ||
| 6 | - compatible : Should be "allwinner,sun4i-rtc" or "allwinner,sun7i-a20-rtc" | ||
| 7 | - reg: physical base address of the controller and length of memory mapped | ||
| 8 | region. | ||
| 9 | - interrupts: IRQ line for the RTC. | ||
| 10 | |||
| 11 | Example: | ||
| 12 | |||
| 13 | rtc: rtc@01c20d00 { | ||
| 14 | compatible = "allwinner,sun4i-rtc"; | ||
| 15 | reg = <0x01c20d00 0x20>; | ||
| 16 | interrupts = <24>; | ||
| 17 | }; | ||
| @@ -6,6 +6,9 @@ Required properties: · 5 unmodified lines | |||
| 6 | additional mode or an USART new feature. | 6 | additional mode or an USART new feature. |
| 7 | - reg: Should contain registers location and length | 7 | - reg: Should contain registers location and length |
| 8 | - interrupts: Should contain interrupt | 8 | - interrupts: Should contain interrupt |
| 9 | - clock-names: tuple listing input clock names. | ||
| 10 | Required elements: "usart" | ||
| 11 | - clocks: phandles to input clocks. | ||
| 9 | 12 | ||
| 10 | Optional properties: | 13 | Optional properties: |
| 11 | - atmel,use-dma-rx: use of PDC or DMA for receiving data | 14 | - atmel,use-dma-rx: use of PDC or DMA for receiving data |
| @@ -26,6 +29,8 @@ Example: · 14 unmodified lines | |||
| 26 | compatible = "atmel,at91sam9260-usart"; | 29 | compatible = "atmel,at91sam9260-usart"; |
| 27 | reg = <0xfff8c000 0x4000>; | 30 | reg = <0xfff8c000 0x4000>; |
| 28 | interrupts = <7>; | 31 | interrupts = <7>; |
| 32 | clocks = <&usart0_clk>; | ||
| 33 | clock-names = "usart"; | ||
| 29 | atmel,use-dma-rx; | 34 | atmel,use-dma-rx; |
| 30 | atmel,use-dma-tx; | 35 | atmel,use-dma-tx; |
| 31 | }; | 36 | }; |
| @@ -35,6 +40,8 @@ Example: · 3 unmodified lines | |||
| 35 | compatible = "atmel,at91sam9260-usart"; | 40 | compatible = "atmel,at91sam9260-usart"; |
| 36 | reg = <0xf001c000 0x100>; | 41 | reg = <0xf001c000 0x100>; |
| 37 | interrupts = <12 4 5>; | 42 | interrupts = <12 4 5>; |
| 43 | clocks = <&usart0_clk>; | ||
| 44 | clock-names = "usart"; | ||
| 38 | atmel,use-dma-rx; | 45 | atmel,use-dma-rx; |
| 39 | atmel,use-dma-tx; | 46 | atmel,use-dma-tx; |
| 40 | dmas = <&dma0 2 0x3>, | 47 | dmas = <&dma0 2 0x3>, |
| @@ -0,0 +1,28 @@ | |||
| 1 | * Cirrus Logic CLPS711X Universal Asynchronous Receiver/Transmitter (UART) | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: Should be "cirrus,clps711x-uart". | ||
| 5 | - reg: Address and length of the register set for the device. | ||
| 6 | - interrupts: Should contain UART TX and RX interrupt. | ||
| 7 | - clocks: Should contain UART core clock number. | ||
| 8 | - syscon: Phandle to SYSCON node, which contain UART control bits. | ||
| 9 | |||
| 10 | Optional properties: | ||
| 11 | - uart-use-ms: Indicate the UART has modem signal (DCD, DSR, CTS). | ||
| 12 | |||
| 13 | Note: Each UART port should have an alias correctly numbered | ||
| 14 | in "aliases" node. | ||
| 15 | |||
| 16 | Example: | ||
| 17 | aliases { | ||
| 18 | serial0 = &uart1; | ||
| 19 | }; | ||
| 20 | |||
| 21 | uart1: uart@80000480 { | ||
| 22 | compatible = "cirrus,clps711x-uart"; | ||
| 23 | reg = <0x80000480 0x80>; | ||
| 24 | interrupts = <12 13>; | ||
| 25 | clocks = <&clks 11>; | ||
| 26 | syscon = <&syscon1>; | ||
| 27 | uart-use-ms; | ||
| 28 | }; | ||
| @@ -4,8 +4,17 @@ Required properties: · 3 unmodified lines | |||
| 4 | - compatible : should be "nvidia,tegra30-hsuart", "nvidia,tegra20-hsuart". | 4 | - compatible : should be "nvidia,tegra30-hsuart", "nvidia,tegra20-hsuart". |
| 5 | - reg: Should contain UART controller registers location and length. | 5 | - reg: Should contain UART controller registers location and length. |
| 6 | - interrupts: Should contain UART controller interrupts. | 6 | - interrupts: Should contain UART controller interrupts. |
| 7 | - nvidia,dma-request-selector : The Tegra DMA controller's phandle and | 7 | - clocks: Must contain one entry, for the module clock. |
| 8 | request selector for this UART controller. | 8 | See ../clocks/clock-bindings.txt for details. |
| 9 | - resets : Must contain an entry for each entry in reset-names. | ||
| 10 | See ../reset/reset.txt for details. | ||
| 11 | - reset-names : Must include the following entries: | ||
| 12 | - serial | ||
| 13 | - dmas : Must contain an entry for each entry in clock-names. | ||
| 14 | See ../dma/dma.txt for details. | ||
| 15 | - dma-names : Must include the following entries: | ||
| 16 | - rx | ||
| 17 | - tx | ||
| 9 | 18 | ||
| 10 | Optional properties: | 19 | Optional properties: |
| 11 | - nvidia,enable-modem-interrupt: Enable modem interrupts. Should be enable | 20 | - nvidia,enable-modem-interrupt: Enable modem interrupts. Should be enable |
| @@ -18,7 +27,11 @@ serial@70006000 { · 6 unmodified lines | |||
| 18 | reg = <0x70006000 0x40>; | 27 | reg = <0x70006000 0x40>; |
| 19 | reg-shift = <2>; | 28 | reg-shift = <2>; |
| 20 | interrupts = <0 36 0x04>; | 29 | interrupts = <0 36 0x04>; |
| 21 | nvidia,dma-request-selector = <&apbdma 8>; | ||
| 22 | nvidia,enable-modem-interrupt; | 30 | nvidia,enable-modem-interrupt; |
| 31 | clocks = <&tegra_car 6>; | ||
| 32 | resets = <&tegra_car 6>; | ||
| 33 | reset-names = "serial"; | ||
| 34 | dmas = <&apbdma 8>, <&apbdma 8>; | ||
| 35 | dma-names = "rx", "tx"; | ||
| 23 | status = "disabled"; | 36 | status = "disabled"; |
| 24 | }; | 37 | }; |
| @@ -0,0 +1,46 @@ | |||
| 1 | * Renesas SH-Mobile Serial Communication Interface | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | |||
| 5 | - compatible: Must contain one of the following: | ||
| 6 | |||
| 7 | - "renesas,scif-r8a7790" for R8A7790 (R-Car H2) SCIF compatible UART. | ||
| 8 | - "renesas,scifa-r8a7790" for R8A7790 (R-Car H2) SCIFA compatible UART. | ||
| 9 | - "renesas,scifb-r8a7790" for R8A7790 (R-Car H2) SCIFB compatible UART. | ||
| 10 | - "renesas,hscif-r8a7790" for R8A7790 (R-Car H2) HSCIF compatible UART. | ||
| 11 | - "renesas,scif-r8a7791" for R8A7791 (R-Car M2) SCIF compatible UART. | ||
| 12 | - "renesas,scifa-r8a7791" for R8A7791 (R-Car M2) SCIFA compatible UART. | ||
| 13 | - "renesas,scifb-r8a7791" for R8A7791 (R-Car M2) SCIFB compatible UART. | ||
| 14 | - "renesas,hscif-r8a7791" for R8A7791 (R-Car M2) HSCIF compatible UART. | ||
| 15 | - "renesas,scif" for generic SCIF compatible UART. | ||
| 16 | - "renesas,scifa" for generic SCIFA compatible UART. | ||
| 17 | - "renesas,scifb" for generic SCIFB compatible UART. | ||
| 18 | - "renesas,hscif" for generic HSCIF compatible UART. | ||
| 19 | |||
| 20 | When compatible with the generic version, nodes must list the | ||
| 21 | SoC-specific version corresponding to the platform first followed by the | ||
| 22 | generic version. | ||
| 23 | |||
| 24 | - reg: Base address and length of the I/O registers used by the UART. | ||
| 25 | - interrupts: Must contain an interrupt-specifier for the SCIx interrupt. | ||
| 26 | |||
| 27 | - clocks: Must contain a phandle and clock-specifier pair for each entry | ||
| 28 | in clock-names. | ||
| 29 | - clock-names: Must contain "sci_ick" for the SCIx UART interface clock. | ||
| 30 | |||
| 31 | Note: Each enabled SCIx UART should have an alias correctly numbered in the | ||
| 32 | "aliases" node. | ||
| 33 | |||
| 34 | Example: | ||
| 35 | aliases { | ||
| 36 | serial0 = &scifa0; | ||
| 37 | }; | ||
| 38 | |||
| 39 | scifa0: serial@e6c40000 { | ||
| 40 | compatible = "renesas,scifa-r8a7790", "renesas,scifa-generic"; | ||
| 41 | reg = <0 0xe6c40000 0 64>; | ||
| 42 | interrupt-parent = <&gic>; | ||
| 43 | interrupts = <0 144 IRQ_TYPE_LEVEL_HIGH>; | ||
| 44 | clocks = <&mstp2_clks R8A7790_CLK_SCIFA0>; | ||
| 45 | clock-names = "sci_ick"; | ||
| 46 | }; | ||
| @@ -0,0 +1,26 @@ | |||
| 1 | * VIA VT8500 and WonderMedia WM8xxx UART Controller | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: should be "via,vt8500-uart" | ||
| 5 | |||
| 6 | - reg: base physical address of the controller and length of memory mapped | ||
| 7 | region. | ||
| 8 | |||
| 9 | - interrupts: hardware interrupt number | ||
| 10 | |||
| 11 | - clocks: shall be the input parent clock phandle for the clock. This should | ||
| 12 | be the 24Mhz reference clock. | ||
| 13 | |||
| 14 | Aliases may be defined to ensure the correct ordering of the uarts. | ||
| 15 | |||
| 16 | Example: | ||
| 17 | aliases { | ||
| 18 | serial0 = &uart0; | ||
| 19 | }; | ||
| 20 | |||
| 21 | uart0: serial@d8200000 { | ||
| 22 | compatible = "via,vt8500-uart"; | ||
| 23 | reg = <0xd8200000 0x1040>; | ||
| 24 | interrupts = <32>; | ||
| 25 | clocks = <&clkuart0>; | ||
| 26 | }; | ||
| @@ -0,0 +1,31 @@ | |||
| 1 | ADI AXI-I2S controller | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible : Must be "adi,axi-i2s-1.00.a" | ||
| 5 | - reg : Must contain I2S core's registers location and length | ||
| 6 | - clocks : Pairs of phandle and specifier referencing the controller's clocks. | ||
| 7 | The controller expects two clocks, the clock used for the AXI interface and | ||
| 8 | the clock used as the sampling rate reference clock sample. | ||
| 9 | - clock-names : "axi" for the clock to the AXI interface, "ref" for the sample | ||
| 10 | rate reference clock. | ||
| 11 | - dmas: Pairs of phandle and specifier for the DMA channels that are used by | ||
| 12 | the core. The core expects two dma channels, one for transmit and one for | ||
| 13 | receive. | ||
| 14 | - dma-names : "tx" for the transmit channel, "rx" for the receive channel. | ||
| 15 | |||
| 16 | For more details on the 'dma', 'dma-names', 'clock' and 'clock-names' properties | ||
| 17 | please check: | ||
| 18 | * resource-names.txt | ||
| 19 | * clock/clock-bindings.txt | ||
| 20 | * dma/dma.txt | ||
| 21 | |||
| 22 | Example: | ||
| 23 | |||
| 24 | i2s: i2s@0x77600000 { | ||
| 25 | compatible = "adi,axi-i2s-1.00.a"; | ||
| 26 | reg = <0x77600000 0x1000>; | ||
| 27 | clocks = <&clk 15>, <&audio_clock>; | ||
| 28 | clock-names = "axi", "ref"; | ||
| 29 | dmas = <&ps7_dma 0>, <&ps7_dma 1>; | ||
| 30 | dma-names = "tx", "rx"; | ||
| 31 | }; | ||
| @@ -0,0 +1,30 @@ | |||
| 1 | ADI AXI-SPDIF controller | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible : Must be "adi,axi-spdif-1.00.a" | ||
| 5 | - reg : Must contain SPDIF core's registers location and length | ||
| 6 | - clocks : Pairs of phandle and specifier referencing the controller's clocks. | ||
| 7 | The controller expects two clocks, the clock used for the AXI interface and | ||
| 8 | the clock used as the sampling rate reference clock sample. | ||
| 9 | - clock-names: "axi" for the clock to the AXI interface, "ref" for the sample | ||
| 10 | rate reference clock. | ||
| 11 | - dmas: Pairs of phandle and specifier for the DMA channel that is used by | ||
| 12 | the core. The core expects one dma channel for transmit. | ||
| 13 | - dma-names : Must be "tx" | ||
| 14 | |||
| 15 | For more details on the 'dma', 'dma-names', 'clock' and 'clock-names' properties | ||
| 16 | please check: | ||
| 17 | * resource-names.txt | ||
| 18 | * clock/clock-bindings.txt | ||
| 19 | * dma/dma.txt | ||
| 20 | |||
| 21 | Example: | ||
| 22 | |||
| 23 | spdif: spdif@0x77400000 { | ||
| 24 | compatible = "adi,axi-spdif-tx-1.00.a"; | ||
| 25 | reg = <0x77600000 0x1000>; | ||
| 26 | clocks = <&clk 15>, <&audio_clock>; | ||
| 27 | clock-names = "axi", "ref"; | ||
| 28 | dmas = <&ps7_dma 0>; | ||
| 29 | dma-names = "tx"; | ||
| 30 | }; | ||
| @@ -0,0 +1,25 @@ | |||
| 1 | * Broadcom BCM2835 SoC I2S/PCM module | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: "brcm,bcm2835-i2s" | ||
| 5 | - reg: A list of base address and size entries: | ||
| 6 | * The first entry should cover the PCM registers | ||
| 7 | * The second entry should cover the PCM clock registers | ||
| 8 | - dmas: List of DMA controller phandle and DMA request line ordered pairs. | ||
| 9 | - dma-names: Identifier string for each DMA request line in the dmas property. | ||
| 10 | These strings correspond 1:1 with the ordered pairs in dmas. | ||
| 11 | |||
| 12 | One of the DMA channels will be responsible for transmission (should be | ||
| 13 | named "tx") and one for reception (should be named "rx"). | ||
| 14 | |||
| 15 | Example: | ||
| 16 | |||
| 17 | bcm2835_i2s: i2s@7e203000 { | ||
| 18 | compatible = "brcm,bcm2835-i2s"; | ||
| 19 | reg = <0x7e203000 0x20>, | ||
| 20 | <0x7e101098 0x02>; | ||
| 21 | |||
| 22 | dmas = <&dma 2>, | ||
| 23 | <&dma 3>; | ||
| 24 | dma-names = "tx", "rx"; | ||
| 25 | }; | ||
| @@ -0,0 +1,46 @@ | |||
| 1 | CS42L52 audio CODEC | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | |||
| 5 | - compatible : "cirrus,cs42l52" | ||
| 6 | |||
| 7 | - reg : the I2C address of the device for I2C | ||
| 8 | |||
| 9 | Optional properties: | ||
| 10 | |||
| 11 | - cirrus,reset-gpio : GPIO controller's phandle and the number | ||
| 12 | of the GPIO used to reset the codec. | ||
| 13 | |||
| 14 | - cirrus,chgfreq-divisor : Values used to set the Charge Pump Frequency. | ||
| 15 | Allowable values of 0x00 through 0x0F. These are raw values written to the | ||
| 16 | register, not the actual frequency. The frequency is determined by the following. | ||
| 17 | Frequency = (64xFs)/(N+2) | ||
| 18 | N = chgfreq_val | ||
| 19 | Fs = Sample Rate (variable) | ||
| 20 | |||
| 21 | - cirrus,mica-differential-cfg : boolean, If present, then the MICA input is configured | ||
| 22 | as a differential input. If not present then the MICA input is configured as | ||
| 23 | Single-ended input. Single-ended mode allows for MIC1 or MIC2 muxing for input. | ||
| 24 | |||
| 25 | - cirrus,micb-differential-cfg : boolean, If present, then the MICB input is configured | ||
| 26 | as a differential input. If not present then the MICB input is configured as | ||
| 27 | Single-ended input. Single-ended mode allows for MIC1 or MIC2 muxing for input. | ||
| 28 | |||
| 29 | - cirrus,micbias-lvl: Set the output voltage level on the MICBIAS Pin | ||
| 30 | 0 = 0.5 x VA | ||
| 31 | 1 = 0.6 x VA | ||
| 32 | 2 = 0.7 x VA | ||
| 33 | 3 = 0.8 x VA | ||
| 34 | 4 = 0.83 x VA | ||
| 35 | 5 = 0.91 x VA | ||
| 36 | |||
| 37 | Example: | ||
| 38 | |||
| 39 | codec: codec@4a { | ||
| 40 | compatible = "cirrus,cs42l52"; | ||
| 41 | reg = <0x4a>; | ||
| 42 | reset-gpio = <&gpio 10 0>; | ||
| 43 | cirrus,chgfreq-divisor = <0x05>; | ||
| 44 | cirrus.mica-differential-cfg; | ||
| 45 | cirrus,micbias-lvl = <5>; | ||
| 46 | }; | ||
| @@ -4,7 +4,8 @@ Required properties: · 3 unmodified lines | |||
| 4 | - compatible : | 4 | - compatible : |
| 5 | "ti,dm646x-mcasp-audio" : for DM646x platforms | 5 | "ti,dm646x-mcasp-audio" : for DM646x platforms |
| 6 | "ti,da830-mcasp-audio" : for both DA830 & DA850 platforms | 6 | "ti,da830-mcasp-audio" : for both DA830 & DA850 platforms |
| 7 | "ti,am33xx-mcasp-audio" : for AM33xx platforms (AM33xx, TI81xx) | 7 | "ti,am33xx-mcasp-audio" : for AM33xx platforms (AM33xx, AM43xx, TI81xx) |
| 8 | "ti,dra7-mcasp-audio" : for DRA7xx platforms | ||
| 8 | 9 | ||
| 9 | - reg : Should contain reg specifiers for the entries in the reg-names property. | 10 | - reg : Should contain reg specifiers for the entries in the reg-names property. |
| 10 | - reg-names : Should contain: | 11 | - reg-names : Should contain: |
| @@ -36,7 +37,8 @@ Optional properties: · 25 unmodified lines | |||
| 36 | - pinctrl-0: Should specify pin control group used for this controller. | 37 | - pinctrl-0: Should specify pin control group used for this controller. |
| 37 | - pinctrl-names: Should contain only one value - "default", for more details | 38 | - pinctrl-names: Should contain only one value - "default", for more details |
| 38 | please refer to pinctrl-bindings.txt | 39 | please refer to pinctrl-bindings.txt |
| 39 | 40 | - fck_parent : Should contain a valid clock name which will be used as parent | |
| 41 | for the McASP fck | ||
| 40 | 42 | ||
| 41 | Example: | 43 | Example: |
| 42 | 44 | ||
| @@ -0,0 +1,50 @@ | |||
| 1 | Freescale Enhanced Serial Audio Interface (ESAI) Controller | ||
| 2 | |||
| 3 | The Enhanced Serial Audio Interface (ESAI) provides a full-duplex serial port | ||
| 4 | for serial communication with a variety of serial devices, including industry | ||
| 5 | standard codecs, Sony/Phillips Digital Interface (S/PDIF) transceivers, and | ||
| 6 | other DSPs. It has up to six transmitters and four receivers. | ||
| 7 | |||
| 8 | Required properties: | ||
| 9 | |||
| 10 | - compatible : Compatible list, must contain "fsl,imx35-esai". | ||
| 11 | |||
| 12 | - reg : Offset and length of the register set for the device. | ||
| 13 | |||
| 14 | - interrupts : Contains the spdif interrupt. | ||
| 15 | |||
| 16 | - dmas : Generic dma devicetree binding as described in | ||
| 17 | Documentation/devicetree/bindings/dma/dma.txt. | ||
| 18 | |||
| 19 | - dma-names : Two dmas have to be defined, "tx" and "rx". | ||
| 20 | |||
| 21 | - clocks: Contains an entry for each entry in clock-names. | ||
| 22 | |||
| 23 | - clock-names : Includes the following entries: | ||
| 24 | "core" The core clock used to access registers | ||
| 25 | "extal" The esai baud clock for esai controller used to derive | ||
| 26 | HCK, SCK and FS. | ||
| 27 | "fsys" The system clock derived from ahb clock used to derive | ||
| 28 | HCK, SCK and FS. | ||
| 29 | |||
| 30 | - fsl,fifo-depth: The number of elements in the transmit and receive FIFOs. | ||
| 31 | This number is the maximum allowed value for TFCR[TFWM] or RFCR[RFWM]. | ||
| 32 | |||
| 33 | - fsl,esai-synchronous: This is a boolean property. If present, indicating | ||
| 34 | that ESAI would work in the synchronous mode, which means all the settings | ||
| 35 | for Receiving would be duplicated from Transmition related registers. | ||
| 36 | |||
| 37 | Example: | ||
| 38 | |||
| 39 | esai: esai@02024000 { | ||
| 40 | compatible = "fsl,imx35-esai"; | ||
| 41 | reg = <0x02024000 0x4000>; | ||
| 42 | interrupts = <0 51 0x04>; | ||
| 43 | clocks = <&clks 208>, <&clks 118>, <&clks 208>; | ||
| 44 | clock-names = "core", "extal", "fsys"; | ||
| 45 | dmas = <&sdma 23 21 0>, <&sdma 24 21 0>; | ||
| 46 | dma-names = "rx", "tx"; | ||
| 47 | fsl,fifo-depth = <128>; | ||
| 48 | fsl,esai-synchronous; | ||
| 49 | status = "disabled"; | ||
| 50 | }; | ||
| @@ -4,7 +4,12 @@ The SSI is a serial device that communicates with audio codecs. It can · 3 unmodified lines | |||
| 4 | be programmed in AC97, I2S, left-justified, or right-justified modes. | 4 | be programmed in AC97, I2S, left-justified, or right-justified modes. |
| 5 | 5 | ||
| 6 | Required properties: | 6 | Required properties: |
| 7 | - compatible: Compatible list, contains "fsl,ssi". | 7 | - compatible: Compatible list, should contain one of the following |
| 8 | compatibles: | ||
| 9 | fsl,mpc8610-ssi | ||
| 10 | fsl,imx51-ssi | ||
| 11 | fsl,imx35-ssi | ||
| 12 | fsl,imx21-ssi | ||
| 8 | - cell-index: The SSI, <0> = SSI1, <1> = SSI2, and so on. | 13 | - cell-index: The SSI, <0> = SSI1, <1> = SSI2, and so on. |
| 9 | - reg: Offset and length of the register set for the device. | 14 | - reg: Offset and length of the register set for the device. |
| 10 | - interrupts: <a b> where a is the interrupt number and b is a | 15 | - interrupts: <a b> where a is the interrupt number and b is a |
| @@ -0,0 +1,40 @@ | |||
| 1 | Freescale Synchronous Audio Interface (SAI). | ||
| 2 | |||
| 3 | The SAI is based on I2S module that used communicating with audio codecs, | ||
| 4 | which provides a synchronous audio interface that supports fullduplex | ||
| 5 | serial interfaces with frame synchronization such as I2S, AC97, TDM, and | ||
| 6 | codec/DSP interfaces. | ||
| 7 | |||
| 8 | |||
| 9 | Required properties: | ||
| 10 | - compatible: Compatible list, contains "fsl,vf610-sai". | ||
| 11 | - reg: Offset and length of the register set for the device. | ||
| 12 | - clocks: Must contain an entry for each entry in clock-names. | ||
| 13 | - clock-names : Must include the "sai" entry. | ||
| 14 | - dmas : Generic dma devicetree binding as described in | ||
| 15 | Documentation/devicetree/bindings/dma/dma.txt. | ||
| 16 | - dma-names : Two dmas have to be defined, "tx" and "rx". | ||
| 17 | - pinctrl-names: Must contain a "default" entry. | ||
| 18 | - pinctrl-NNN: One property must exist for each entry in pinctrl-names. | ||
| 19 | See ../pinctrl/pinctrl-bindings.txt for details of the property values. | ||
| 20 | - big-endian-regs: If this property is absent, the little endian mode will | ||
| 21 | be in use as default, or the big endian mode will be in use for all the | ||
| 22 | device registers. | ||
| 23 | - big-endian-data: If this property is absent, the little endian mode will | ||
| 24 | be in use as default, or the big endian mode will be in use for all the | ||
| 25 | fifo data. | ||
| 26 | |||
| 27 | Example: | ||
| 28 | sai2: sai@40031000 { | ||
| 29 | compatible = "fsl,vf610-sai"; | ||
| 30 | reg = <0x40031000 0x1000>; | ||
| 31 | pinctrl-names = "default"; | ||
| 32 | pinctrl-0 = <&pinctrl_sai2_1>; | ||
| 33 | clocks = <&clks VF610_CLK_SAI2>; | ||
| 34 | clock-names = "sai"; | ||
| 35 | dma-names = "tx", "rx"; | ||
| 36 | dmas = <&edma0 0 VF610_EDMA_MUXID0_SAI2_TX>, | ||
| 37 | <&edma0 0 VF610_EDMA_MUXID0_SAI2_RX>; | ||
| 38 | big-endian-regs; | ||
| 39 | big-endian-data; | ||
| 40 | }; | ||
| @@ -0,0 +1,17 @@ | |||
| 1 | Device-Tree bindings for dummy HDMI codec | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: should be "linux,hdmi-audio". | ||
| 5 | |||
| 6 | CODEC output pins: | ||
| 7 | * TX | ||
| 8 | |||
| 9 | CODEC input pins: | ||
| 10 | * RX | ||
| 11 | |||
| 12 | Example node: | ||
| 13 | |||
| 14 | hdmi_audio: hdmi_audio@0 { | ||
| 15 | compatible = "linux,hdmi-audio"; | ||
| 16 | status = "okay"; | ||
| 17 | }; | ||
| @@ -0,0 +1,43 @@ | |||
| 1 | MAX98090 audio CODEC | ||
| 2 | |||
| 3 | This device supports I2C only. | ||
| 4 | |||
| 5 | Required properties: | ||
| 6 | |||
| 7 | - compatible : "maxim,max98090". | ||
| 8 | |||
| 9 | - reg : The I2C address of the device. | ||
| 10 | |||
| 11 | - interrupts : The CODEC's interrupt output. | ||
| 12 | |||
| 13 | Pins on the device (for linking into audio routes): | ||
| 14 | |||
| 15 | * MIC1 | ||
| 16 | * MIC2 | ||
| 17 | * DMICL | ||
| 18 | * DMICR | ||
| 19 | * IN1 | ||
| 20 | * IN2 | ||
| 21 | * IN3 | ||
| 22 | * IN4 | ||
| 23 | * IN5 | ||
| 24 | * IN6 | ||
| 25 | * IN12 | ||
| 26 | * IN34 | ||
| 27 | * IN56 | ||
| 28 | * HPL | ||
| 29 | * HPR | ||
| 30 | * SPKL | ||
| 31 | * SPKR | ||
| 32 | * RCVL | ||
| 33 | * RCVR | ||
| 34 | * MICBIAS | ||
| 35 | |||
| 36 | Example: | ||
| 37 | |||
| 38 | audio-codec@10 { | ||
| 39 | compatible = "maxim,max98090"; | ||
| 40 | reg = <0x10>; | ||
| 41 | interrupt-parent = <&gpio>; | ||
| 42 | interrupts = <TEGRA_GPIO(H, 4) GPIO_ACTIVE_HIGH>; | ||
| 43 | }; | ||
| @@ -3,10 +3,11 @@ NVIDIA Tegra audio complex · 2 unmodified lines | |||
| 3 | Required properties: | 3 | Required properties: |
| 4 | - compatible : "nvidia,tegra-audio-alc5632" | 4 | - compatible : "nvidia,tegra-audio-alc5632" |
| 5 | - clocks : Must contain an entry for each entry in clock-names. | 5 | - clocks : Must contain an entry for each entry in clock-names. |
| 6 | See ../clocks/clock-bindings.txt for details. | ||
| 6 | - clock-names : Must include the following entries: | 7 | - clock-names : Must include the following entries: |
| 7 | "pll_a" (The Tegra clock of that name), | 8 | - pll_a |
| 8 | "pll_a_out0" (The Tegra clock of that name), | 9 | - pll_a_out0 |
| 9 | "mclk" (The Tegra cdev1/extern1 clock, which feeds the CODEC's mclk) | 10 | - mclk (The Tegra cdev1/extern1 clock, which feeds the CODEC's mclk) |
| 10 | - nvidia,model : The user-visible name of this sound complex. | 11 | - nvidia,model : The user-visible name of this sound complex. |
| 11 | - nvidia,audio-routing : A list of the connections between audio components. | 12 | - nvidia,audio-routing : A list of the connections between audio components. |
| 12 | Each entry is a pair of strings, the first being the connection's sink, | 13 | Each entry is a pair of strings, the first being the connection's sink, |
| @@ -0,0 +1,51 @@ | |||
| 1 | NVIDIA Tegra audio complex, with MAX98090 CODEC | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible : "nvidia,tegra-audio-max98090" | ||
| 5 | - clocks : Must contain an entry for each entry in clock-names. | ||
| 6 | See ../clocks/clock-bindings.txt for details. | ||
| 7 | - clock-names : Must include the following entries: | ||
| 8 | - pll_a | ||
| 9 | - pll_a_out0 | ||
| 10 | - mclk (The Tegra cdev1/extern1 clock, which feeds the CODEC's mclk) | ||
| 11 | - nvidia,model : The user-visible name of this sound complex. | ||
| 12 | - nvidia,audio-routing : A list of the connections between audio components. | ||
| 13 | Each entry is a pair of strings, the first being the connection's sink, | ||
| 14 | the second being the connection's source. Valid names for sources and | ||
| 15 | sinks are the MAX98090's pins (as documented in its binding), and the jacks | ||
| 16 | on the board: | ||
| 17 | |||
| 18 | * Headphones | ||
| 19 | * Speakers | ||
| 20 | * Mic Jack | ||
| 21 | |||
| 22 | - nvidia,i2s-controller : The phandle of the Tegra I2S controller that's | ||
| 23 | connected to the CODEC. | ||
| 24 | - nvidia,audio-codec : The phandle of the MAX98090 audio codec. | ||
| 25 | |||
| 26 | Optional properties: | ||
| 27 | - nvidia,hp-det-gpios : The GPIO that detect headphones are plugged in | ||
| 28 | |||
| 29 | Example: | ||
| 30 | |||
| 31 | sound { | ||
| 32 | compatible = "nvidia,tegra-audio-max98090-venice2", | ||
| 33 | "nvidia,tegra-audio-max98090"; | ||
| 34 | nvidia,model = "NVIDIA Tegra Venice2"; | ||
| 35 | |||
| 36 | nvidia,audio-routing = | ||
| 37 | "Headphones", "HPR", | ||
| 38 | "Headphones", "HPL", | ||
| 39 | "Speakers", "SPKR", | ||
| 40 | "Speakers", "SPKL", | ||
| 41 | "Mic Jack", "MICBIAS", | ||
| 42 | "IN34", "Mic Jack"; | ||
| 43 | |||
| 44 | nvidia,i2s-controller = <&tegra_i2s1>; | ||
| 45 | nvidia,audio-codec = <&acodec>; | ||
| 46 | |||
| 47 | clocks = <&tegra_car TEGRA124_CLK_PLL_A>, | ||
| 48 | <&tegra_car TEGRA124_CLK_PLL_A_OUT0>, | ||
| 49 | <&tegra_car TEGRA124_CLK_EXTERN1>; | ||
| 50 | clock-names = "pll_a", "pll_a_out0", "mclk"; | ||
| 51 | }; | ||
| @@ -3,10 +3,11 @@ NVIDIA Tegra audio complex, with RT5640 CODEC · 2 unmodified lines | |||
| 3 | Required properties: | 3 | Required properties: |
| 4 | - compatible : "nvidia,tegra-audio-rt5640" | 4 | - compatible : "nvidia,tegra-audio-rt5640" |
| 5 | - clocks : Must contain an entry for each entry in clock-names. | 5 | - clocks : Must contain an entry for each entry in clock-names. |
| 6 | See ../clocks/clock-bindings.txt for details. | ||
| 6 | - clock-names : Must include the following entries: | 7 | - clock-names : Must include the following entries: |
| 7 | "pll_a" (The Tegra clock of that name), | 8 | - pll_a |
| 8 | "pll_a_out0" (The Tegra clock of that name), | 9 | - pll_a_out0 |
| 9 | "mclk" (The Tegra cdev1/extern1 clock, which feeds the CODEC's mclk) | 10 | - mclk (The Tegra cdev1/extern1 clock, which feeds the CODEC's mclk) |
| 10 | - nvidia,model : The user-visible name of this sound complex. | 11 | - nvidia,model : The user-visible name of this sound complex. |
| 11 | - nvidia,audio-routing : A list of the connections between audio components. | 12 | - nvidia,audio-routing : A list of the connections between audio components. |
| 12 | Each entry is a pair of strings, the first being the connection's sink, | 13 | Each entry is a pair of strings, the first being the connection's sink, |
| @@ -3,10 +3,11 @@ NVIDIA Tegra audio complex · 2 unmodified lines | |||
| 3 | Required properties: | 3 | Required properties: |
| 4 | - compatible : "nvidia,tegra-audio-wm8753" | 4 | - compatible : "nvidia,tegra-audio-wm8753" |
| 5 | - clocks : Must contain an entry for each entry in clock-names. | 5 | - clocks : Must contain an entry for each entry in clock-names. |
| 6 | See ../clocks/clock-bindings.txt for details. | ||
| 6 | - clock-names : Must include the following entries: | 7 | - clock-names : Must include the following entries: |
| 7 | "pll_a" (The Tegra clock of that name), | 8 | - pll_a |
| 8 | "pll_a_out0" (The Tegra clock of that name), | 9 | - pll_a_out0 |
| 9 | "mclk" (The Tegra cdev1/extern1 clock, which feeds the CODEC's mclk) | 10 | - mclk (The Tegra cdev1/extern1 clock, which feeds the CODEC's mclk) |
| 10 | - nvidia,model : The user-visible name of this sound complex. | 11 | - nvidia,model : The user-visible name of this sound complex. |
| 11 | - nvidia,audio-routing : A list of the connections between audio components. | 12 | - nvidia,audio-routing : A list of the connections between audio components. |
| 12 | Each entry is a pair of strings, the first being the connection's sink, | 13 | Each entry is a pair of strings, the first being the connection's sink, |
| @@ -3,10 +3,11 @@ NVIDIA Tegra audio complex · 2 unmodified lines | |||
| 3 | Required properties: | 3 | Required properties: |
| 4 | - compatible : "nvidia,tegra-audio-wm8903" | 4 | - compatible : "nvidia,tegra-audio-wm8903" |
| 5 | - clocks : Must contain an entry for each entry in clock-names. | 5 | - clocks : Must contain an entry for each entry in clock-names. |
| 6 | See ../clocks/clock-bindings.txt for details. | ||
| 6 | - clock-names : Must include the following entries: | 7 | - clock-names : Must include the following entries: |
| 7 | "pll_a" (The Tegra clock of that name), | 8 | - pll_a |
| 8 | "pll_a_out0" (The Tegra clock of that name), | 9 | - pll_a_out0 |
| 9 | "mclk" (The Tegra cdev1/extern1 clock, which feeds the CODEC's mclk) | 10 | - mclk (The Tegra cdev1/extern1 clock, which feeds the CODEC's mclk) |
| 10 | - nvidia,model : The user-visible name of this sound complex. | 11 | - nvidia,model : The user-visible name of this sound complex. |
| 11 | - nvidia,audio-routing : A list of the connections between audio components. | 12 | - nvidia,audio-routing : A list of the connections between audio components. |
| 12 | Each entry is a pair of strings, the first being the connection's sink, | 13 | Each entry is a pair of strings, the first being the connection's sink, |
| @@ -3,10 +3,11 @@ NVIDIA Tegra audio complex · 2 unmodified lines | |||
| 3 | Required properties: | 3 | Required properties: |
| 4 | - compatible : "nvidia,tegra-audio-wm9712" | 4 | - compatible : "nvidia,tegra-audio-wm9712" |
| 5 | - clocks : Must contain an entry for each entry in clock-names. | 5 | - clocks : Must contain an entry for each entry in clock-names. |
| 6 | See ../clocks/clock-bindings.txt for details. | ||
| 6 | - clock-names : Must include the following entries: | 7 | - clock-names : Must include the following entries: |
| 7 | "pll_a" (The Tegra clock of that name), | 8 | - pll_a |
| 8 | "pll_a_out0" (The Tegra clock of that name), | 9 | - pll_a_out0 |
| 9 | "mclk" (The Tegra cdev1/extern1 clock, which feeds the CODEC's mclk) | 10 | - mclk (The Tegra cdev1/extern1 clock, which feeds the CODEC's mclk) |
| 10 | - nvidia,model : The user-visible name of this sound complex. | 11 | - nvidia,model : The user-visible name of this sound complex. |
| 11 | - nvidia,audio-routing : A list of the connections between audio components. | 12 | - nvidia,audio-routing : A list of the connections between audio components. |
| 12 | Each entry is a pair of strings, the first being the connection's sink, | 13 | Each entry is a pair of strings, the first being the connection's sink, |
| @@ -4,19 +4,33 @@ Required properties: · 3 unmodified lines | |||
| 4 | - compatible : "nvidia,tegra20-ac97" | 4 | - compatible : "nvidia,tegra20-ac97" |
| 5 | - reg : Should contain AC97 controller registers location and length | 5 | - reg : Should contain AC97 controller registers location and length |
| 6 | - interrupts : Should contain AC97 interrupt | 6 | - interrupts : Should contain AC97 interrupt |
| 7 | - nvidia,dma-request-selector : The Tegra DMA controller's phandle and | 7 | - resets : Must contain an entry for each entry in reset-names. |
| 8 | request selector for the AC97 controller | 8 | See ../reset/reset.txt for details. |
| 9 | - reset-names : Must include the following entries: | ||
| 10 | - ac97 | ||
| 11 | - dmas : Must contain an entry for each entry in clock-names. | ||
| 12 | See ../dma/dma.txt for details. | ||
| 13 | - dma-names : Must include the following entries: | ||
| 14 | - rx | ||
| 15 | - tx | ||
| 16 | - clocks : Must contain one entry, for the module clock. | ||
| 17 | See ../clocks/clock-bindings.txt for details. | ||
| 9 | - nvidia,codec-reset-gpio : The Tegra GPIO controller's phandle and the number | 18 | - nvidia,codec-reset-gpio : The Tegra GPIO controller's phandle and the number |
| 10 | of the GPIO used to reset the external AC97 codec | 19 | of the GPIO used to reset the external AC97 codec |
| 11 | - nvidia,codec-sync-gpio : The Tegra GPIO controller's phandle and the number | 20 | - nvidia,codec-sync-gpio : The Tegra GPIO controller's phandle and the number |
| 12 | of the GPIO corresponding with the AC97 DAP _FS line | 21 | of the GPIO corresponding with the AC97 DAP _FS line |
| 22 | |||
| 13 | Example: | 23 | Example: |
| 14 | 24 | ||
| 15 | ac97@70002000 { | 25 | ac97@70002000 { |
| 16 | compatible = "nvidia,tegra20-ac97"; | 26 | compatible = "nvidia,tegra20-ac97"; |
| 17 | reg = <0x70002000 0x200>; | 27 | reg = <0x70002000 0x200>; |
| 18 | interrupts = <0 81 0x04>; | 28 | interrupts = <0 81 0x04>; |
| 19 | nvidia,dma-request-selector = <&apbdma 12>; | ||
| 20 | nvidia,codec-reset-gpio = <&gpio 170 0>; | 29 | nvidia,codec-reset-gpio = <&gpio 170 0>; |
| 21 | nvidia,codec-sync-gpio = <&gpio 120 0>; | 30 | nvidia,codec-sync-gpio = <&gpio 120 0>; |
| 31 | clocks = <&tegra_car 3>; | ||
| 32 | resets = <&tegra_car 3>; | ||
| 33 | reset-names = "ac97"; | ||
| 34 | dmas = <&apbdma 12>, <&apbdma 12>; | ||
| 35 | dma-names = "rx", "tx"; | ||
| 22 | }; | 36 | }; |
| @@ -4,8 +4,17 @@ Required properties: · 3 unmodified lines | |||
| 4 | - compatible : "nvidia,tegra20-i2s" | 4 | - compatible : "nvidia,tegra20-i2s" |
| 5 | - reg : Should contain I2S registers location and length | 5 | - reg : Should contain I2S registers location and length |
| 6 | - interrupts : Should contain I2S interrupt | 6 | - interrupts : Should contain I2S interrupt |
| 7 | - nvidia,dma-request-selector : The Tegra DMA controller's phandle and | 7 | - resets : Must contain an entry for each entry in reset-names. |
| 8 | request selector for this I2S controller | 8 | See ../reset/reset.txt for details. |
| 9 | - reset-names : Must include the following entries: | ||
| 10 | - i2s | ||
| 11 | - dmas : Must contain an entry for each entry in clock-names. | ||
| 12 | See ../dma/dma.txt for details. | ||
| 13 | - dma-names : Must include the following entries: | ||
| 14 | - rx | ||
| 15 | - tx | ||
| 16 | - clocks : Must contain one entry, for the module clock. | ||
| 17 | See ../clocks/clock-bindings.txt for details. | ||
| 9 | 18 | ||
| 10 | Example: | 19 | Example: |
| 11 | 20 | ||
| @@ -13,5 +22,9 @@ i2s@70002800 { · 1 unmodified line | |||
| 13 | compatible = "nvidia,tegra20-i2s"; | 22 | compatible = "nvidia,tegra20-i2s"; |
| 14 | reg = <0x70002800 0x200>; | 23 | reg = <0x70002800 0x200>; |
| 15 | interrupts = < 45 >; | 24 | interrupts = < 45 >; |
| 16 | nvidia,dma-request-selector = < &apbdma 2 >; | 25 | clocks = <&tegra_car 11>; |
| 26 | resets = <&tegra_car 11>; | ||
| 27 | reset-names = "i2s"; | ||
| 28 | dmas = <&apbdma 21>, <&apbdma 21>; | ||
| 29 | dma-names = "rx", "tx"; | ||
| 17 | }; | 30 | }; |
| @@ -7,18 +7,48 @@ Required properties: · 6 unmodified lines | |||
| 7 | - Tegra30 requires 2 entries, for the APBIF and AHUB/AUDIO register blocks. | 7 | - Tegra30 requires 2 entries, for the APBIF and AHUB/AUDIO register blocks. |
| 8 | - Tegra114 requires an additional entry, for the APBIF2 register block. | 8 | - Tegra114 requires an additional entry, for the APBIF2 register block. |
| 9 | - interrupts : Should contain AHUB interrupt | 9 | - interrupts : Should contain AHUB interrupt |
| 10 | - nvidia,dma-request-selector : A list of the DMA channel specifiers. Each | 10 | - clocks : Must contain an entry for each entry in clock-names. |
| 11 | entry contains the Tegra DMA controller's phandle and request selector. | 11 | See ../clocks/clock-bindings.txt for details. |
| 12 | If a single entry is present, the request selectors for the channels are | ||
| 13 | assumed to be contiguous, and increment from this value. | ||
| 14 | If multiple values are given, one value must be given per channel. | ||
| 15 | - clocks : Must contain an entry for each required entry in clock-names. | ||
| 16 | - clock-names : Must include the following entries: | 12 | - clock-names : Must include the following entries: |
| 17 | - Tegra30: Requires d_audio, apbif, i2s0, i2s1, i2s2, i2s3, i2s4, dam0, | 13 | - d_audio |
| 18 | dam1, dam2, spdif_in. | 14 | - apbif |
| 19 | - Tegra114: Additionally requires amx, adx. | 15 | - resets : Must contain an entry for each entry in reset-names. |
| 16 | See ../reset/reset.txt for details. | ||
| 17 | - reset-names : Must include the following entries: | ||
| 18 | Tegra30 and later: | ||
| 19 | - d_audio | ||
| 20 | - apbif | ||
| 21 | - i2s0 | ||
| 22 | - i2s1 | ||
| 23 | - i2s2 | ||
| 24 | - i2s3 | ||
| 25 | - i2s4 | ||
| 26 | - dam0 | ||
| 27 | - dam1 | ||
| 28 | - dam2 | ||
| 29 | - spdif | ||
| 30 | Tegra114 and later additionally require: | ||
| 31 | - amx | ||
| 32 | - adx | ||
| 33 | Tegra124 and later additionally require: | ||
| 34 | - amx1 | ||
| 35 | - adx1 | ||
| 36 | - afc0 | ||
| 37 | - afc1 | ||
| 38 | - afc2 | ||
| 39 | - afc3 | ||
| 40 | - afc4 | ||
| 41 | - afc5 | ||
| 20 | - ranges : The bus address mapping for the configlink register bus. | 42 | - ranges : The bus address mapping for the configlink register bus. |
| 21 | Can be empty since the mapping is 1:1. | 43 | Can be empty since the mapping is 1:1. |
| 44 | - dmas : Must contain an entry for each entry in clock-names. | ||
| 45 | See ../dma/dma.txt for details. | ||
| 46 | - dma-names : Must include the following entries: | ||
| 47 | - rx0 .. rx<n> | ||
| 48 | - tx0 .. tx<n> | ||
| 49 | ... where n is: | ||
| 50 | Tegra30: 3 | ||
| 51 | Tegra114, Tegra124: 9 | ||
| 22 | - #address-cells : For the configlink bus. Should be <1>; | 52 | - #address-cells : For the configlink bus. Should be <1>; |
| 23 | - #size-cells : For the configlink bus. Should be <1>. | 53 | - #size-cells : For the configlink bus. Should be <1>. |
| 24 | 54 | ||
| @@ -35,13 +65,20 @@ ahub@70080000 { · 10 unmodified lines | |||
| 35 | reg = <0x70080000 0x200 0x70080200 0x100>; | 65 | reg = <0x70080000 0x200 0x70080200 0x100>; |
| 36 | interrupts = < 0 103 0x04 >; | 66 | interrupts = < 0 103 0x04 >; |
| 37 | nvidia,dma-request-selector = <&apbdma 1>; | 67 | nvidia,dma-request-selector = <&apbdma 1>; |
| 38 | clocks = <&tegra_car 106>, <&tegra_car 107>, <&tegra_car 30>, | 68 | clocks = <&tegra_car 106>, <&tegra_car 107>; |
| 69 | clock-names = "d_audio", "apbif"; | ||
| 70 | resets = <&tegra_car 106>, <&tegra_car 107>, <&tegra_car 30>, | ||
| 39 | <&tegra_car 11>, <&tegra_car 18>, <&tegra_car 101>, | 71 | <&tegra_car 11>, <&tegra_car 18>, <&tegra_car 101>, |
| 40 | <&tegra_car 102>, <&tegra_car 108>, <&tegra_car 109>, | 72 | <&tegra_car 102>, <&tegra_car 108>, <&tegra_car 109>, |
| 41 | <&tegra_car 110>, <&tegra_car 162>; | 73 | <&tegra_car 110>, <&tegra_car 10>; |
| 42 | clock-names = "d_audio", "apbif", "i2s0", "i2s1", "i2s2", | 74 | reset-names = "d_audio", "apbif", "i2s0", "i2s1", "i2s2", |
| 43 | "i2s3", "i2s4", "dam0", "dam1", "dam2", | 75 | "i2s3", "i2s4", "dam0", "dam1", "dam2", |
| 44 | "spdif_in"; | 76 | "spdif"; |
| 77 | dmas = <&apbdma 1>, <&apbdma 1>; | ||
| 78 | <&apbdma 2>, <&apbdma 2>; | ||
| 79 | <&apbdma 3>, <&apbdma 3>; | ||
| 80 | <&apbdma 4>, <&apbdma 4>; | ||
| 81 | dma-names = "rx0", "tx0", "rx1", "tx1", "rx2", "tx2", "rx3", "tx3"; | ||
| 45 | ranges; | 82 | ranges; |
| 46 | #address-cells = <1>; | 83 | #address-cells = <1>; |
| 47 | #size-cells = <1>; | 84 | #size-cells = <1>; |
| @@ -3,13 +3,22 @@ NVIDIA Tegra30 I2S controller · 2 unmodified lines | |||
| 3 | Required properties: | 3 | Required properties: |
| 4 | - compatible : "nvidia,tegra30-i2s" | 4 | - compatible : "nvidia,tegra30-i2s" |
| 5 | - reg : Should contain I2S registers location and length | 5 | - reg : Should contain I2S registers location and length |
| 6 | - clocks : Must contain one entry, for the module clock. | ||
| 7 | See ../clocks/clock-bindings.txt for details. | ||
| 8 | - resets : Must contain an entry for each entry in reset-names. | ||
| 9 | See ../reset/reset.txt for details. | ||
| 10 | - reset-names : Must include the following entries: | ||
| 11 | - i2s | ||
| 6 | - nvidia,ahub-cif-ids : The list of AHUB CIF IDs for this port, rx (playback) | 12 | - nvidia,ahub-cif-ids : The list of AHUB CIF IDs for this port, rx (playback) |
| 7 | first, tx (capture) second. See nvidia,tegra30-ahub.txt for values. | 13 | first, tx (capture) second. See nvidia,tegra30-ahub.txt for values. |
| 8 | 14 | ||
| 9 | Example: | 15 | Example: |
| 10 | 16 | ||
| 11 | i2s@70002800 { | 17 | i2s@70080300 { |
| 12 | compatible = "nvidia,tegra30-i2s"; | 18 | compatible = "nvidia,tegra30-i2s"; |
| 13 | reg = <0x70080300 0x100>; | 19 | reg = <0x70080300 0x100>; |
| 14 | nvidia,ahub-cif-ids = <4 4>; | 20 | nvidia,ahub-cif-ids = <4 4>; |
| 21 | clocks = <&tegra_car 11>; | ||
| 22 | resets = <&tegra_car 11>; | ||
| 23 | reset-names = "i2s"; | ||
| 15 | }; | 24 | }; |
| @@ -0,0 +1,77 @@ | |||
| 1 | Simple-Card: | ||
| 2 | |||
| 3 | Simple-Card specifies audio DAI connection of SoC <-> codec. | ||
| 4 | |||
| 5 | Required properties: | ||
| 6 | |||
| 7 | - compatible : "simple-audio-card" | ||
| 8 | |||
| 9 | Optional properties: | ||
| 10 | |||
| 11 | - simple-audio-card,format : CPU/CODEC common audio format. | ||
| 12 | "i2s", "right_j", "left_j" , "dsp_a" | ||
| 13 | "dsp_b", "ac97", "pdm", "msb", "lsb" | ||
| 14 | - simple-audio-card,routing : A list of the connections between audio components. | ||
| 15 | Each entry is a pair of strings, the first being the | ||
| 16 | connection's sink, the second being the connection's | ||
| 17 | source. | ||
| 18 | |||
| 19 | Required subnodes: | ||
| 20 | |||
| 21 | - simple-audio-card,cpu : CPU sub-node | ||
| 22 | - simple-audio-card,codec : CODEC sub-node | ||
| 23 | |||
| 24 | Required CPU/CODEC subnodes properties: | ||
| 25 | |||
| 26 | - sound-dai : phandle and port of CPU/CODEC | ||
| 27 | |||
| 28 | Optional CPU/CODEC subnodes properties: | ||
| 29 | |||
| 30 | - format : CPU/CODEC specific audio format if needed. | ||
| 31 | see simple-audio-card,format | ||
| 32 | - frame-master : bool property. add this if subnode is frame master | ||
| 33 | - bitclock-master : bool property. add this if subnode is bitclock master | ||
| 34 | - bitclock-inversion : bool property. add this if subnode has clock inversion | ||
| 35 | - frame-inversion : bool property. add this if subnode has frame inversion | ||
| 36 | - clocks / system-clock-frequency : specify subnode's clock if needed. | ||
| 37 | it can be specified via "clocks" if system has | ||
| 38 | clock node (= common clock), or "system-clock-frequency" | ||
| 39 | (if system doens't support common clock) | ||
| 40 | |||
| 41 | Example: | ||
| 42 | |||
| 43 | sound { | ||
| 44 | compatible = "simple-audio-card"; | ||
| 45 | simple-audio-card,format = "left_j"; | ||
| 46 | simple-audio-card,routing = | ||
| 47 | "MIC_IN", "Mic Jack", | ||
| 48 | "Headphone Jack", "HP_OUT", | ||
| 49 | "Ext Spk", "LINE_OUT"; | ||
| 50 | |||
| 51 | simple-audio-card,cpu { | ||
| 52 | sound-dai = <&sh_fsi2 0>; | ||
| 53 | }; | ||
| 54 | |||
| 55 | simple-audio-card,codec { | ||
| 56 | sound-dai = <&ak4648>; | ||
| 57 | bitclock-master; | ||
| 58 | frame-master; | ||
| 59 | clocks = <&osc>; | ||
| 60 | }; | ||
| 61 | }; | ||
| 62 | |||
| 63 | &i2c0 { | ||
| 64 | ak4648: ak4648@12 { | ||
| 65 | #sound-dai-cells = <0>; | ||
| 66 | compatible = "asahi-kasei,ak4648"; | ||
| 67 | reg = <0x12>; | ||
| 68 | }; | ||
| 69 | }; | ||
| 70 | |||
| 71 | sh_fsi2: sh_fsi2@ec230000 { | ||
| 72 | #sound-dai-cells = <1>; | ||
| 73 | compatible = "renesas,sh_fsi2"; | ||
| 74 | reg = <0xec230000 0x400>; | ||
| 75 | interrupt-parent = <&gic>; | ||
| 76 | interrupts = <0 146 0x4>; | ||
| 77 | }; | ||
| @@ -6,6 +6,7 @@ Required properties: · 5 unmodified lines | |||
| 6 | 6 | ||
| 7 | - compatible - "string" - One of: | 7 | - compatible - "string" - One of: |
| 8 | "ti,tlv320aic3x" - Generic TLV320AIC3x device | 8 | "ti,tlv320aic3x" - Generic TLV320AIC3x device |
| 9 | "ti,tlv320aic32x4" - TLV320AIC32x4 | ||
| 9 | "ti,tlv320aic33" - TLV320AIC33 | 10 | "ti,tlv320aic33" - TLV320AIC33 |
| 10 | "ti,tlv320aic3007" - TLV320AIC3007 | 11 | "ti,tlv320aic3007" - TLV320AIC3007 |
| 11 | "ti,tlv320aic3106" - TLV320AIC3106 | 12 | "ti,tlv320aic3106" - TLV320AIC3106 |
| @@ -4,10 +4,19 @@ Required properties: · 3 unmodified lines | |||
| 4 | - compatible : should be "nvidia,tegra114-spi". | 4 | - compatible : should be "nvidia,tegra114-spi". |
| 5 | - reg: Should contain SPI registers location and length. | 5 | - reg: Should contain SPI registers location and length. |
| 6 | - interrupts: Should contain SPI interrupts. | 6 | - interrupts: Should contain SPI interrupts. |
| 7 | - nvidia,dma-request-selector : The Tegra DMA controller's phandle and | 7 | - clock-names : Must include the following entries: |
| 8 | request selector for this SPI controller. | 8 | - spi |
| 9 | - This is also require clock named "spi" as per binding document | 9 | - resets : Must contain an entry for each entry in reset-names. |
| 10 | Documentation/devicetree/bindings/clock/clock-bindings.txt | 10 | See ../reset/reset.txt for details. |
| 11 | - reset-names : Must include the following entries: | ||
| 12 | - spi | ||
| 13 | - dmas : Must contain an entry for each entry in clock-names. | ||
| 14 | See ../dma/dma.txt for details. | ||
| 15 | - dma-names : Must include the following entries: | ||
| 16 | - rx | ||
| 17 | - tx | ||
| 18 | - clocks : Must contain an entry for each entry in clock-names. | ||
| 19 | See ../clocks/clock-bindings.txt for details. | ||
| 11 | 20 | ||
| 12 | Recommended properties: | 21 | Recommended properties: |
| 13 | - spi-max-frequency: Definition as per | 22 | - spi-max-frequency: Definition as per |
| @@ -18,9 +27,14 @@ spi@7000d600 { · 4 unmodified lines | |||
| 18 | compatible = "nvidia,tegra114-spi"; | 27 | compatible = "nvidia,tegra114-spi"; |
| 19 | reg = <0x7000d600 0x200>; | 28 | reg = <0x7000d600 0x200>; |
| 20 | interrupts = <0 82 0x04>; | 29 | interrupts = <0 82 0x04>; |
| 21 | nvidia,dma-request-selector = <&apbdma 16>; | ||
| 22 | spi-max-frequency = <25000000>; | 30 | spi-max-frequency = <25000000>; |
| 23 | #address-cells = <1>; | 31 | #address-cells = <1>; |
| 24 | #size-cells = <0>; | 32 | #size-cells = <0>; |
| 33 | clocks = <&tegra_car 44>; | ||
| 34 | clock-names = "spi"; | ||
| 35 | resets = <&tegra_car 44>; | ||
| 36 | reset-names = "spi"; | ||
| 37 | dmas = <&apbdma 16>, <&apbdma 16>; | ||
| 38 | dma-names = "rx", "tx"; | ||
| 25 | status = "disabled"; | 39 | status = "disabled"; |
| 26 | }; | 40 | }; |
| @@ -4,8 +4,17 @@ Required properties: · 3 unmodified lines | |||
| 4 | - compatible : should be "nvidia,tegra20-sflash". | 4 | - compatible : should be "nvidia,tegra20-sflash". |
| 5 | - reg: Should contain SFLASH registers location and length. | 5 | - reg: Should contain SFLASH registers location and length. |
| 6 | - interrupts: Should contain SFLASH interrupts. | 6 | - interrupts: Should contain SFLASH interrupts. |
| 7 | - nvidia,dma-request-selector : The Tegra DMA controller's phandle and | 7 | - clocks : Must contain one entry, for the module clock. |
| 8 | request selector for this SFLASH controller. | 8 | See ../clocks/clock-bindings.txt for details. |
| 9 | - resets : Must contain an entry for each entry in reset-names. | ||
| 10 | See ../reset/reset.txt for details. | ||
| 11 | - reset-names : Must include the following entries: | ||
| 12 | - spi | ||
| 13 | - dmas : Must contain an entry for each entry in clock-names. | ||
| 14 | See ../dma/dma.txt for details. | ||
| 15 | - dma-names : Must include the following entries: | ||
| 16 | - rx | ||
| 17 | - tx | ||
| 9 | 18 | ||
| 10 | Recommended properties: | 19 | Recommended properties: |
| 11 | - spi-max-frequency: Definition as per | 20 | - spi-max-frequency: Definition as per |
| @@ -17,10 +26,13 @@ spi@7000c380 { · 5 unmodified lines | |||
| 17 | compatible = "nvidia,tegra20-sflash"; | 26 | compatible = "nvidia,tegra20-sflash"; |
| 18 | reg = <0x7000c380 0x80>; | 27 | reg = <0x7000c380 0x80>; |
| 19 | interrupts = <0 39 0x04>; | 28 | interrupts = <0 39 0x04>; |
| 20 | nvidia,dma-request-selector = <&apbdma 16>; | ||
| 21 | spi-max-frequency = <25000000>; | 29 | spi-max-frequency = <25000000>; |
| 22 | #address-cells = <1>; | 30 | #address-cells = <1>; |
| 23 | #size-cells = <0>; | 31 | #size-cells = <0>; |
| 32 | clocks = <&tegra_car 43>; | ||
| 33 | resets = <&tegra_car 43>; | ||
| 34 | reset-names = "spi"; | ||
| 35 | dmas = <&apbdma 11>, <&apbdma 11>; | ||
| 36 | dma-names = "rx", "tx"; | ||
| 24 | status = "disabled"; | 37 | status = "disabled"; |
| 25 | }; | 38 | }; |
| 26 | |||
| @@ -4,8 +4,17 @@ Required properties: · 3 unmodified lines | |||
| 4 | - compatible : should be "nvidia,tegra20-slink", "nvidia,tegra30-slink". | 4 | - compatible : should be "nvidia,tegra20-slink", "nvidia,tegra30-slink". |
| 5 | - reg: Should contain SLINK registers location and length. | 5 | - reg: Should contain SLINK registers location and length. |
| 6 | - interrupts: Should contain SLINK interrupts. | 6 | - interrupts: Should contain SLINK interrupts. |
| 7 | - nvidia,dma-request-selector : The Tegra DMA controller's phandle and | 7 | - clocks : Must contain one entry, for the module clock. |
| 8 | request selector for this SLINK controller. | 8 | See ../clocks/clock-bindings.txt for details. |
| 9 | - resets : Must contain an entry for each entry in reset-names. | ||
| 10 | See ../reset/reset.txt for details. | ||
| 11 | - reset-names : Must include the following entries: | ||
| 12 | - spi | ||
| 13 | - dmas : Must contain an entry for each entry in clock-names. | ||
| 14 | See ../dma/dma.txt for details. | ||
| 15 | - dma-names : Must include the following entries: | ||
| 16 | - rx | ||
| 17 | - tx | ||
| 9 | 18 | ||
| 10 | Recommended properties: | 19 | Recommended properties: |
| 11 | - spi-max-frequency: Definition as per | 20 | - spi-max-frequency: Definition as per |
| @@ -17,10 +26,13 @@ spi@7000d600 { · 5 unmodified lines | |||
| 17 | compatible = "nvidia,tegra20-slink"; | 26 | compatible = "nvidia,tegra20-slink"; |
| 18 | reg = <0x7000d600 0x200>; | 27 | reg = <0x7000d600 0x200>; |
| 19 | interrupts = <0 82 0x04>; | 28 | interrupts = <0 82 0x04>; |
| 20 | nvidia,dma-request-selector = <&apbdma 16>; | ||
| 21 | spi-max-frequency = <25000000>; | 29 | spi-max-frequency = <25000000>; |
| 22 | #address-cells = <1>; | 30 | #address-cells = <1>; |
| 23 | #size-cells = <0>; | 31 | #size-cells = <0>; |
| 32 | clocks = <&tegra_car 44>; | ||
| 33 | resets = <&tegra_car 44>; | ||
| 34 | reset-names = "spi"; | ||
| 35 | dmas = <&apbdma 16>, <&apbdma 16>; | ||
| 36 | dma-names = "rx", "tx"; | ||
| 24 | status = "disabled"; | 37 | status = "disabled"; |
| 25 | }; | 38 | }; |
| 26 | |||
| @@ -67,7 +67,7 @@ only 1(SINGLE), 2(DUAL) and 4(QUAD). · 66 unmodified lines | |||
| 67 | Dual/Quad mode is not allowed when 3-wire mode is used. | 67 | Dual/Quad mode is not allowed when 3-wire mode is used. |
| 68 | 68 | ||
| 69 | If a gpio chipselect is used for the SPI slave the gpio number will be passed | 69 | If a gpio chipselect is used for the SPI slave the gpio number will be passed |
| 70 | via the cs_gpio | 70 | via the SPI master node cs-gpios property. |
| 71 | 71 | ||
| 72 | SPI example for an MPC5200 SPI bus: | 72 | SPI example for an MPC5200 SPI bus: |
| 73 | spi@f00 { | 73 | spi@f00 { |
| @@ -3,6 +3,11 @@ TI QSPI controller. · 2 unmodified lines | |||
| 3 | Required properties: | 3 | Required properties: |
| 4 | - compatible : should be "ti,dra7xxx-qspi" or "ti,am4372-qspi". | 4 | - compatible : should be "ti,dra7xxx-qspi" or "ti,am4372-qspi". |
| 5 | - reg: Should contain QSPI registers location and length. | 5 | - reg: Should contain QSPI registers location and length. |
| 6 | - reg-names: Should contain the resource reg names. | ||
| 7 | - qspi_base: Qspi configuration register Address space | ||
| 8 | - qspi_mmap: Memory mapped Address space | ||
| 9 | - (optional) qspi_ctrlmod: Control module Address space | ||
| 10 | - interrupts: should contain the qspi interrupt number. | ||
| 6 | - #address-cells, #size-cells : Must be present if the device has sub-nodes | 11 | - #address-cells, #size-cells : Must be present if the device has sub-nodes |
| 7 | - ti,hwmods: Name of the hwmod associated to the QSPI | 12 | - ti,hwmods: Name of the hwmod associated to the QSPI |
| 8 | 13 | ||
| @@ -14,7 +19,8 @@ Example: · 5 unmodified lines | |||
| 14 | 19 | ||
| 15 | qspi: qspi@4b300000 { | 20 | qspi: qspi@4b300000 { |
| 16 | compatible = "ti,dra7xxx-qspi"; | 21 | compatible = "ti,dra7xxx-qspi"; |
| 17 | reg = <0x4b300000 0x100>; | 22 | reg = <0x47900000 0x100>, <0x30000000 0x3ffffff>; |
| 23 | reg-names = "qspi_base", "qspi_mmap"; | ||
| 18 | #address-cells = <1>; | 24 | #address-cells = <1>; |
| 19 | #size-cells = <0>; | 25 | #size-cells = <0>; |
| 20 | spi-max-frequency = <25000000>; | 26 | spi-max-frequency = <25000000>; |
| @@ -1,15 +0,0 @@ | |||
| 1 | Platform DesignWare HS OTG USB 2.0 controller | ||
| 2 | ----------------------------------------------------- | ||
| 3 | |||
| 4 | Required properties: | ||
| 5 | - compatible : "snps,dwc2" | ||
| 6 | - reg : Should contain 1 register range (address and length) | ||
| 7 | - interrupts : Should contain 1 interrupt | ||
| 8 | |||
| 9 | Example: | ||
| 10 | |||
| 11 | usb@101c0000 { | ||
| 12 | compatible = "ralink,rt3050-usb, snps,dwc2"; | ||
| 13 | reg = <0x101c0000 40000>; | ||
| 14 | interrupts = <18>; | ||
| 15 | }; | ||
| @@ -0,0 +1,20 @@ | |||
| 1 | * Xillybus driver for generic FPGA interface | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: Should be "xillybus,xillybus-1.00.a" | ||
| 5 | - reg: Address and length of the register set for the device | ||
| 6 | - interrupts: Contains one interrupt node, typically consisting of three cells. | ||
| 7 | - interrupt-parent: the phandle for the interrupt controller that | ||
| 8 | services interrupts for this device. | ||
| 9 | |||
| 10 | Optional properties: | ||
| 11 | - dma-coherent: Present if DMA operations are coherent | ||
| 12 | |||
| 13 | Example: | ||
| 14 | |||
| 15 | xillybus@ff200400 { | ||
| 16 | compatible = "xillybus,xillybus-1.00.a"; | ||
| 17 | reg = < 0xff200400 0x00000080 >; | ||
| 18 | interrupts = < 0 40 1 >; | ||
| 19 | interrupt-parent = <&intc>; | ||
| 20 | } ; | ||
| @@ -0,0 +1,38 @@ | |||
| 1 | |||
| 2 | Submitting devicetree (DT) binding patches | ||
| 3 | |||
| 4 | I. For patch submitters | ||
| 5 | |||
| 6 | 0) Normal patch submission rules from Documentation/SubmittingPatches | ||
| 7 | applies. | ||
| 8 | |||
| 9 | 1) The Documentation/ portion of the patch should be a separate patch. | ||
| 10 | |||
| 11 | 2) Submit the entire series to the devicetree mailinglist at | ||
| 12 | |||
| 13 | devicetree@vger.kernel.org | ||
| 14 | |||
| 15 | II. For kernel maintainers | ||
| 16 | |||
| 17 | 1) If you aren't comfortable reviewing a given binding, reply to it and ask | ||
| 18 | the devicetree maintainers for guidance. This will help them prioritize | ||
| 19 | which ones to review and which ones are ok to let go. | ||
| 20 | |||
| 21 | 2) For driver (not subsystem) bindings: If you are comfortable with the | ||
| 22 | binding, and it hasn't received an Acked-by from the devicetree | ||
| 23 | maintainers after a few weeks, go ahead and take it. | ||
| 24 | |||
| 25 | Subsystem bindings (anything affecting more than a single device) | ||
| 26 | then getting a devicetree maintainer to review it is required. | ||
| 27 | |||
| 28 | 3) For a series going though multiple trees, the binding patch should be | ||
| 29 | kept with the driver using the binding. | ||
| 30 | |||
| 31 | III. Notes | ||
| 32 | |||
| 33 | 0) Please see ...bindings/ABI.txt for details regarding devicetree ABI. | ||
| 34 | |||
| 35 | 1) This document is intended as a general familiarization with the process as | ||
| 36 | decided at the 2013 Kernel Summit. When in doubt, the current word of the | ||
| 37 | devicetree maintainers overrules this document. In that situation, a patch | ||
| 38 | updating this document would be appreciated. | ||
| @@ -8,10 +8,14 @@ Required properties: · 7 unmodified lines | |||
| 8 | calibration data, e.g. OCOTP on imx6q. The details about calibration data | 8 | calibration data, e.g. OCOTP on imx6q. The details about calibration data |
| 9 | can be found in SoC Reference Manual. | 9 | can be found in SoC Reference Manual. |
| 10 | 10 | ||
| 11 | Optional properties: | ||
| 12 | - clocks : thermal sensor's clock source. | ||
| 13 | |||
| 11 | Example: | 14 | Example: |
| 12 | 15 | ||
| 13 | tempmon { | 16 | tempmon { |
| 14 | compatible = "fsl,imx6q-tempmon"; | 17 | compatible = "fsl,imx6q-tempmon"; |
| 15 | fsl,tempmon = <&anatop>; | 18 | fsl,tempmon = <&anatop>; |
| 16 | fsl,tempmon-data = <&ocotp>; | 19 | fsl,tempmon-data = <&ocotp>; |
| 20 | clocks = <&clks 172>; | ||
| 17 | }; | 21 | }; |
| @@ -0,0 +1,595 @@ | |||
| 1 | * Thermal Framework Device Tree descriptor | ||
| 2 | |||
| 3 | This file describes a generic binding to provide a way of | ||
| 4 | defining hardware thermal structure using device tree. | ||
| 5 | A thermal structure includes thermal zones and their components, | ||
| 6 | such as trip points, polling intervals, sensors and cooling devices | ||
| 7 | binding descriptors. | ||
| 8 | |||
| 9 | The target of device tree thermal descriptors is to describe only | ||
| 10 | the hardware thermal aspects. The thermal device tree bindings are | ||
| 11 | not about how the system must control or which algorithm or policy | ||
| 12 | must be taken in place. | ||
| 13 | |||
| 14 | There are five types of nodes involved to describe thermal bindings: | ||
| 15 | - thermal sensors: devices which may be used to take temperature | ||
| 16 | measurements. | ||
| 17 | - cooling devices: devices which may be used to dissipate heat. | ||
| 18 | - trip points: describe key temperatures at which cooling is recommended. The | ||
| 19 | set of points should be chosen based on hardware limits. | ||
| 20 | - cooling maps: used to describe links between trip points and cooling devices; | ||
| 21 | - thermal zones: used to describe thermal data within the hardware; | ||
| 22 | |||
| 23 | The following is a description of each of these node types. | ||
| 24 | |||
| 25 | * Thermal sensor devices | ||
| 26 | |||
| 27 | Thermal sensor devices are nodes providing temperature sensing capabilities on | ||
| 28 | thermal zones. Typical devices are I2C ADC converters and bandgaps. These are | ||
| 29 | nodes providing temperature data to thermal zones. Thermal sensor devices may | ||
| 30 | control one or more internal sensors. | ||
| 31 | |||
| 32 | Required property: | ||
| 33 | - #thermal-sensor-cells: Used to provide sensor device specific information | ||
| 34 | Type: unsigned while referring to it. Typically 0 on thermal sensor | ||
| 35 | Size: one cell nodes with only one sensor, and at least 1 on nodes | ||
| 36 | with several internal sensors, in order | ||
| 37 | to identify uniquely the sensor instances within | ||
| 38 | the IC. See thermal zone binding for more details | ||
| 39 | on how consumers refer to sensor devices. | ||
| 40 | |||
| 41 | * Cooling device nodes | ||
| 42 | |||
| 43 | Cooling devices are nodes providing control on power dissipation. There | ||
| 44 | are essentially two ways to provide control on power dissipation. First | ||
| 45 | is by means of regulating device performance, which is known as passive | ||
| 46 | cooling. A typical passive cooling is a CPU that has dynamic voltage and | ||
| 47 | frequency scaling (DVFS), and uses lower frequencies as cooling states. | ||
| 48 | Second is by means of activating devices in order to remove | ||
| 49 | the dissipated heat, which is known as active cooling, e.g. regulating | ||
| 50 | fan speeds. In both cases, cooling devices shall have a way to determine | ||
| 51 | the state of cooling in which the device is. | ||
| 52 | |||
| 53 | Any cooling device has a range of cooling states (i.e. different levels | ||
| 54 | of heat dissipation). For example a fan's cooling states correspond to | ||
| 55 | the different fan speeds possible. Cooling states are referred to by | ||
| 56 | single unsigned integers, where larger numbers mean greater heat | ||
| 57 | dissipation. The precise set of cooling states associated with a device | ||
| 58 | (as referred to be the cooling-min-state and cooling-max-state | ||
| 59 | properties) should be defined in a particular device's binding. | ||
| 60 | For more examples of cooling devices, refer to the example sections below. | ||
| 61 | |||
| 62 | Required properties: | ||
| 63 | - cooling-min-state: An integer indicating the smallest | ||
| 64 | Type: unsigned cooling state accepted. Typically 0. | ||
| 65 | Size: one cell | ||
| 66 | |||
| 67 | - cooling-max-state: An integer indicating the largest | ||
| 68 | Type: unsigned cooling state accepted. | ||
| 69 | Size: one cell | ||
| 70 | |||
| 71 | - #cooling-cells: Used to provide cooling device specific information | ||
| 72 | Type: unsigned while referring to it. Must be at least 2, in order | ||
| 73 | Size: one cell to specify minimum and maximum cooling state used | ||
| 74 | in the reference. The first cell is the minimum | ||
| 75 | cooling state requested and the second cell is | ||
| 76 | the maximum cooling state requested in the reference. | ||
| 77 | See Cooling device maps section below for more details | ||
| 78 | on how consumers refer to cooling devices. | ||
| 79 | |||
| 80 | * Trip points | ||
| 81 | |||
| 82 | The trip node is a node to describe a point in the temperature domain | ||
| 83 | in which the system takes an action. This node describes just the point, | ||
| 84 | not the action. | ||
| 85 | |||
| 86 | Required properties: | ||
| 87 | - temperature: An integer indicating the trip temperature level, | ||
| 88 | Type: signed in millicelsius. | ||
| 89 | Size: one cell | ||
| 90 | |||
| 91 | - hysteresis: A low hysteresis value on temperature property (above). | ||
| 92 | Type: unsigned This is a relative value, in millicelsius. | ||
| 93 | Size: one cell | ||
| 94 | |||
| 95 | - type: a string containing the trip type. Expected values are: | ||
| 96 | "active": A trip point to enable active cooling | ||
| 97 | "passive": A trip point to enable passive cooling | ||
| 98 | "hot": A trip point to notify emergency | ||
| 99 | "critical": Hardware not reliable. | ||
| 100 | Type: string | ||
| 101 | |||
| 102 | * Cooling device maps | ||
| 103 | |||
| 104 | The cooling device maps node is a node to describe how cooling devices | ||
| 105 | get assigned to trip points of the zone. The cooling devices are expected | ||
| 106 | to be loaded in the target system. | ||
| 107 | |||
| 108 | Required properties: | ||
| 109 | - cooling-device: A phandle of a cooling device with its specifier, | ||
| 110 | Type: phandle + referring to which cooling device is used in this | ||
| 111 | cooling specifier binding. In the cooling specifier, the first cell | ||
| 112 | is the minimum cooling state and the second cell | ||
| 113 | is the maximum cooling state used in this map. | ||
| 114 | - trip: A phandle of a trip point node within the same thermal | ||
| 115 | Type: phandle of zone. | ||
| 116 | trip point node | ||
| 117 | |||
| 118 | Optional property: | ||
| 119 | - contribution: The cooling contribution to the thermal zone of the | ||
| 120 | Type: unsigned referred cooling device at the referred trip point. | ||
| 121 | Size: one cell The contribution is a ratio of the sum | ||
| 122 | of all cooling contributions within a thermal zone. | ||
| 123 | |||
| 124 | Note: Using the THERMAL_NO_LIMIT (-1UL) constant in the cooling-device phandle | ||
| 125 | limit specifier means: | ||
| 126 | (i) - minimum state allowed for minimum cooling state used in the reference. | ||
| 127 | (ii) - maximum state allowed for maximum cooling state used in the reference. | ||
| 128 | Refer to include/dt-bindings/thermal/thermal.h for definition of this constant. | ||
| 129 | |||
| 130 | * Thermal zone nodes | ||
| 131 | |||
| 132 | The thermal zone node is the node containing all the required info | ||
| 133 | for describing a thermal zone, including its cooling device bindings. The | ||
| 134 | thermal zone node must contain, apart from its own properties, one sub-node | ||
| 135 | containing trip nodes and one sub-node containing all the zone cooling maps. | ||
| 136 | |||
| 137 | Required properties: | ||
| 138 | - polling-delay: The maximum number of milliseconds to wait between polls | ||
| 139 | Type: unsigned when checking this thermal zone. | ||
| 140 | Size: one cell | ||
| 141 | |||
| 142 | - polling-delay-passive: The maximum number of milliseconds to wait | ||
| 143 | Type: unsigned between polls when performing passive cooling. | ||
| 144 | Size: one cell | ||
| 145 | |||
| 146 | - thermal-sensors: A list of thermal sensor phandles and sensor specifier | ||
| 147 | Type: list of used while monitoring the thermal zone. | ||
| 148 | phandles + sensor | ||
| 149 | specifier | ||
| 150 | |||
| 151 | - trips: A sub-node which is a container of only trip point nodes | ||
| 152 | Type: sub-node required to describe the thermal zone. | ||
| 153 | |||
| 154 | - cooling-maps: A sub-node which is a container of only cooling device | ||
| 155 | Type: sub-node map nodes, used to describe the relation between trips | ||
| 156 | and cooling devices. | ||
| 157 | |||
| 158 | Optional property: | ||
| 159 | - coefficients: An array of integers (one signed cell) containing | ||
| 160 | Type: array coefficients to compose a linear relation between | ||
| 161 | Elem size: one cell the sensors listed in the thermal-sensors property. | ||
| 162 | Elem type: signed Coefficients defaults to 1, in case this property | ||
| 163 | is not specified. A simple linear polynomial is used: | ||
| 164 | Z = c0 * x0 + c1 + x1 + ... + c(n-1) * x(n-1) + cn. | ||
| 165 | |||
| 166 | The coefficients are ordered and they match with sensors | ||
| 167 | by means of sensor ID. Additional coefficients are | ||
| 168 | interpreted as constant offset. | ||
| 169 | |||
| 170 | Note: The delay properties are bound to the maximum dT/dt (temperature | ||
| 171 | derivative over time) in two situations for a thermal zone: | ||
| 172 | (i) - when passive cooling is activated (polling-delay-passive); and | ||
| 173 | (ii) - when the zone just needs to be monitored (polling-delay) or | ||
| 174 | when active cooling is activated. | ||
| 175 | |||
| 176 | The maximum dT/dt is highly bound to hardware power consumption and dissipation | ||
| 177 | capability. The delays should be chosen to account for said max dT/dt, | ||
| 178 | such that a device does not cross several trip boundaries unexpectedly | ||
| 179 | between polls. Choosing the right polling delays shall avoid having the | ||
| 180 | device in temperature ranges that may damage the silicon structures and | ||
| 181 | reduce silicon lifetime. | ||
| 182 | |||
| 183 | * The thermal-zones node | ||
| 184 | |||
| 185 | The "thermal-zones" node is a container for all thermal zone nodes. It shall | ||
| 186 | contain only sub-nodes describing thermal zones as in the section | ||
| 187 | "Thermal zone nodes". The "thermal-zones" node appears under "/". | ||
| 188 | |||
| 189 | * Examples | ||
| 190 | |||
| 191 | Below are several examples on how to use thermal data descriptors | ||
| 192 | using device tree bindings: | ||
| 193 | |||
| 194 | (a) - CPU thermal zone | ||
| 195 | |||
| 196 | The CPU thermal zone example below describes how to setup one thermal zone | ||
| 197 | using one single sensor as temperature source and many cooling devices and | ||
| 198 | power dissipation control sources. | ||
| 199 | |||
| 200 | #include <dt-bindings/thermal/thermal.h> | ||
| 201 | |||
| 202 | cpus { | ||
| 203 | /* | ||
| 204 | * Here is an example of describing a cooling device for a DVFS | ||
| 205 | * capable CPU. The CPU node describes its four OPPs. | ||
| 206 | * The cooling states possible are 0..3, and they are | ||
| 207 | * used as OPP indexes. The minimum cooling state is 0, which means | ||
| 208 | * all four OPPs can be available to the system. The maximum | ||
| 209 | * cooling state is 3, which means only the lowest OPPs (198MHz@0.85V) | ||
| 210 | * can be available in the system. | ||
| 211 | */ | ||
| 212 | cpu0: cpu@0 { | ||
| 213 | ... | ||
| 214 | operating-points = < | ||
| 215 | /* kHz uV */ | ||
| 216 | 970000 1200000 | ||
| 217 | 792000 1100000 | ||
| 218 | 396000 950000 | ||
| 219 | 198000 850000 | ||
| 220 | >; | ||
| 221 | cooling-min-state = <0>; | ||
| 222 | cooling-max-state = <3>; | ||
| 223 | #cooling-cells = <2>; /* min followed by max */ | ||
| 224 | }; | ||
| 225 | ... | ||
| 226 | }; | ||
| 227 | |||
| 228 | &i2c1 { | ||
| 229 | ... | ||
| 230 | /* | ||
| 231 | * A simple fan controller which supports 10 speeds of operation | ||
| 232 | * (represented as 0-9). | ||
| 233 | */ | ||
| 234 | fan0: fan@0x48 { | ||
| 235 | ... | ||
| 236 | cooling-min-state = <0>; | ||
| 237 | cooling-max-state = <9>; | ||
| 238 | #cooling-cells = <2>; /* min followed by max */ | ||
| 239 | }; | ||
| 240 | }; | ||
| 241 | |||
| 242 | ocp { | ||
| 243 | ... | ||
| 244 | /* | ||
| 245 | * A simple IC with a single bandgap temperature sensor. | ||
| 246 | */ | ||
| 247 | bandgap0: bandgap@0x0000ED00 { | ||
| 248 | ... | ||
| 249 | #thermal-sensor-cells = <0>; | ||
| 250 | }; | ||
| 251 | }; | ||
| 252 | |||
| 253 | thermal-zones { | ||
| 254 | cpu-thermal: cpu-thermal { | ||
| 255 | polling-delay-passive = <250>; /* milliseconds */ | ||
| 256 | polling-delay = <1000>; /* milliseconds */ | ||
| 257 | |||
| 258 | thermal-sensors = <&bandgap0>; | ||
| 259 | |||
| 260 | trips { | ||
| 261 | cpu-alert0: cpu-alert { | ||
| 262 | temperature = <90000>; /* millicelsius */ | ||
| 263 | hysteresis = <2000>; /* millicelsius */ | ||
| 264 | type = "active"; | ||
| 265 | }; | ||
| 266 | cpu-alert1: cpu-alert { | ||
| 267 | temperature = <100000>; /* millicelsius */ | ||
| 268 | hysteresis = <2000>; /* millicelsius */ | ||
| 269 | type = "passive"; | ||
| 270 | }; | ||
| 271 | cpu-crit: cpu-crit { | ||
| 272 | temperature = <125000>; /* millicelsius */ | ||
| 273 | hysteresis = <2000>; /* millicelsius */ | ||
| 274 | type = "critical"; | ||
| 275 | }; | ||
| 276 | }; | ||
| 277 | |||
| 278 | cooling-maps { | ||
| 279 | map0 { | ||
| 280 | trip = <&cpu-alert0>; | ||
| 281 | cooling-device = <&fan0 THERMAL_NO_LIMITS 4>; | ||
| 282 | }; | ||
| 283 | map1 { | ||
| 284 | trip = <&cpu-alert1>; | ||
| 285 | cooling-device = <&fan0 5 THERMAL_NO_LIMITS>; | ||
| 286 | }; | ||
| 287 | map2 { | ||
| 288 | trip = <&cpu-alert1>; | ||
| 289 | cooling-device = | ||
| 290 | <&cpu0 THERMAL_NO_LIMITS THERMAL_NO_LIMITS>; | ||
| 291 | }; | ||
| 292 | }; | ||
| 293 | }; | ||
| 294 | }; | ||
| 295 | |||
| 296 | In the example above, the ADC sensor (bandgap0) at address 0x0000ED00 is | ||
| 297 | used to monitor the zone 'cpu-thermal' using its sole sensor. A fan | ||
| 298 | device (fan0) is controlled via I2C bus 1, at address 0x48, and has ten | ||
| 299 | different cooling states 0-9. It is used to remove the heat out of | ||
| 300 | the thermal zone 'cpu-thermal' using its cooling states | ||
| 301 | from its minimum to 4, when it reaches trip point 'cpu-alert0' | ||
| 302 | at 90C, as an example of active cooling. The same cooling device is used at | ||
| 303 | 'cpu-alert1', but from 5 to its maximum state. The cpu@0 device is also | ||
| 304 | linked to the same thermal zone, 'cpu-thermal', as a passive cooling device, | ||
| 305 | using all its cooling states at trip point 'cpu-alert1', | ||
| 306 | which is a trip point at 100C. On the thermal zone 'cpu-thermal', at the | ||
| 307 | temperature of 125C, represented by the trip point 'cpu-crit', the silicon | ||
| 308 | is not reliable anymore. | ||
| 309 | |||
| 310 | (b) - IC with several internal sensors | ||
| 311 | |||
| 312 | The example below describes how to deploy several thermal zones based off a | ||
| 313 | single sensor IC, assuming it has several internal sensors. This is a common | ||
| 314 | case on SoC designs with several internal IPs that may need different thermal | ||
| 315 | requirements, and thus may have their own sensor to monitor or detect internal | ||
| 316 | hotspots in their silicon. | ||
| 317 | |||
| 318 | #include <dt-bindings/thermal/thermal.h> | ||
| 319 | |||
| 320 | ocp { | ||
| 321 | ... | ||
| 322 | /* | ||
| 323 | * A simple IC with several bandgap temperature sensors. | ||
| 324 | */ | ||
| 325 | bandgap0: bandgap@0x0000ED00 { | ||
| 326 | ... | ||
| 327 | #thermal-sensor-cells = <1>; | ||
| 328 | }; | ||
| 329 | }; | ||
| 330 | |||
| 331 | thermal-zones { | ||
| 332 | cpu-thermal: cpu-thermal { | ||
| 333 | polling-delay-passive = <250>; /* milliseconds */ | ||
| 334 | polling-delay = <1000>; /* milliseconds */ | ||
| 335 | |||
| 336 | /* sensor ID */ | ||
| 337 | thermal-sensors = <&bandgap0 0>; | ||
| 338 | |||
| 339 | trips { | ||
| 340 | /* each zone within the SoC may have its own trips */ | ||
| 341 | cpu-alert: cpu-alert { | ||
| 342 | temperature = <100000>; /* millicelsius */ | ||
| 343 | hysteresis = <2000>; /* millicelsius */ | ||
| 344 | type = "passive"; | ||
| 345 | }; | ||
| 346 | cpu-crit: cpu-crit { | ||
| 347 | temperature = <125000>; /* millicelsius */ | ||
| 348 | hysteresis = <2000>; /* millicelsius */ | ||
| 349 | type = "critical"; | ||
| 350 | }; | ||
| 351 | }; | ||
| 352 | |||
| 353 | cooling-maps { | ||
| 354 | /* each zone within the SoC may have its own cooling */ | ||
| 355 | ... | ||
| 356 | }; | ||
| 357 | }; | ||
| 358 | |||
| 359 | gpu-thermal: gpu-thermal { | ||
| 360 | polling-delay-passive = <120>; /* milliseconds */ | ||
| 361 | polling-delay = <1000>; /* milliseconds */ | ||
| 362 | |||
| 363 | /* sensor ID */ | ||
| 364 | thermal-sensors = <&bandgap0 1>; | ||
| 365 | |||
| 366 | trips { | ||
| 367 | /* each zone within the SoC may have its own trips */ | ||
| 368 | gpu-alert: gpu-alert { | ||
| 369 | temperature = <90000>; /* millicelsius */ | ||
| 370 | hysteresis = <2000>; /* millicelsius */ | ||
| 371 | type = "passive"; | ||
| 372 | }; | ||
| 373 | gpu-crit: gpu-crit { | ||
| 374 | temperature = <105000>; /* millicelsius */ | ||
| 375 | hysteresis = <2000>; /* millicelsius */ | ||
| 376 | type = "critical"; | ||
| 377 | }; | ||
| 378 | }; | ||
| 379 | |||
| 380 | cooling-maps { | ||
| 381 | /* each zone within the SoC may have its own cooling */ | ||
| 382 | ... | ||
| 383 | }; | ||
| 384 | }; | ||
| 385 | |||
| 386 | dsp-thermal: dsp-thermal { | ||
| 387 | polling-delay-passive = <50>; /* milliseconds */ | ||
| 388 | polling-delay = <1000>; /* milliseconds */ | ||
| 389 | |||
| 390 | /* sensor ID */ | ||
| 391 | thermal-sensors = <&bandgap0 2>; | ||
| 392 | |||
| 393 | trips { | ||
| 394 | /* each zone within the SoC may have its own trips */ | ||
| 395 | dsp-alert: gpu-alert { | ||
| 396 | temperature = <90000>; /* millicelsius */ | ||
| 397 | hysteresis = <2000>; /* millicelsius */ | ||
| 398 | type = "passive"; | ||
| 399 | }; | ||
| 400 | dsp-crit: gpu-crit { | ||
| 401 | temperature = <135000>; /* millicelsius */ | ||
| 402 | hysteresis = <2000>; /* millicelsius */ | ||
| 403 | type = "critical"; | ||
| 404 | }; | ||
| 405 | }; | ||
| 406 | |||
| 407 | cooling-maps { | ||
| 408 | /* each zone within the SoC may have its own cooling */ | ||
| 409 | ... | ||
| 410 | }; | ||
| 411 | }; | ||
| 412 | }; | ||
| 413 | |||
| 414 | In the example above, there is one bandgap IC which has the capability to | ||
| 415 | monitor three sensors. The hardware has been designed so that sensors are | ||
| 416 | placed on different places in the DIE to monitor different temperature | ||
| 417 | hotspots: one for CPU thermal zone, one for GPU thermal zone and the | ||
| 418 | other to monitor a DSP thermal zone. | ||
| 419 | |||
| 420 | Thus, there is a need to assign each sensor provided by the bandgap IC | ||
| 421 | to different thermal zones. This is achieved by means of using the | ||
| 422 | #thermal-sensor-cells property and using the first cell of the sensor | ||
| 423 | specifier as sensor ID. In the example, then, <bandgap 0> is used to | ||
| 424 | monitor CPU thermal zone, <bandgap 1> is used to monitor GPU thermal | ||
| 425 | zone and <bandgap 2> is used to monitor DSP thermal zone. Each zone | ||
| 426 | may be uncorrelated, having its own dT/dt requirements, trips | ||
| 427 | and cooling maps. | ||
| 428 | |||
| 429 | |||
| 430 | (c) - Several sensors within one single thermal zone | ||
| 431 | |||
| 432 | The example below illustrates how to use more than one sensor within | ||
| 433 | one thermal zone. | ||
| 434 | |||
| 435 | #include <dt-bindings/thermal/thermal.h> | ||
| 436 | |||
| 437 | &i2c1 { | ||
| 438 | ... | ||
| 439 | /* | ||
| 440 | * A simple IC with a single temperature sensor. | ||
| 441 | */ | ||
| 442 | adc: sensor@0x49 { | ||
| 443 | ... | ||
| 444 | #thermal-sensor-cells = <0>; | ||
| 445 | }; | ||
| 446 | }; | ||
| 447 | |||
| 448 | ocp { | ||
| 449 | ... | ||
| 450 | /* | ||
| 451 | * A simple IC with a single bandgap temperature sensor. | ||
| 452 | */ | ||
| 453 | bandgap0: bandgap@0x0000ED00 { | ||
| 454 | ... | ||
| 455 | #thermal-sensor-cells = <0>; | ||
| 456 | }; | ||
| 457 | }; | ||
| 458 | |||
| 459 | thermal-zones { | ||
| 460 | cpu-thermal: cpu-thermal { | ||
| 461 | polling-delay-passive = <250>; /* milliseconds */ | ||
| 462 | polling-delay = <1000>; /* milliseconds */ | ||
| 463 | |||
| 464 | thermal-sensors = <&bandgap0>, /* cpu */ | ||
| 465 | <&adc>; /* pcb north */ | ||
| 466 | |||
| 467 | /* hotspot = 100 * bandgap - 120 * adc + 484 */ | ||
| 468 | coefficients = <100 -120 484>; | ||
| 469 | |||
| 470 | trips { | ||
| 471 | ... | ||
| 472 | }; | ||
| 473 | |||
| 474 | cooling-maps { | ||
| 475 | ... | ||
| 476 | }; | ||
| 477 | }; | ||
| 478 | }; | ||
| 479 | |||
| 480 | In some cases, there is a need to use more than one sensor to extrapolate | ||
| 481 | a thermal hotspot in the silicon. The above example illustrates this situation. | ||
| 482 | For instance, it may be the case that a sensor external to CPU IP may be placed | ||
| 483 | close to CPU hotspot and together with internal CPU sensor, it is used | ||
| 484 | to determine the hotspot. Assuming this is the case for the above example, | ||
| 485 | the hypothetical extrapolation rule would be: | ||
| 486 | hotspot = 100 * bandgap - 120 * adc + 484 | ||
| 487 | |||
| 488 | In other context, the same idea can be used to add fixed offset. For instance, | ||
| 489 | consider the hotspot extrapolation rule below: | ||
| 490 | hotspot = 1 * adc + 6000 | ||
| 491 | |||
| 492 | In the above equation, the hotspot is always 6C higher than what is read | ||
| 493 | from the ADC sensor. The binding would be then: | ||
| 494 | thermal-sensors = <&adc>; | ||
| 495 | |||
| 496 | /* hotspot = 1 * adc + 6000 */ | ||
| 497 | coefficients = <1 6000>; | ||
| 498 | |||
| 499 | (d) - Board thermal | ||
| 500 | |||
| 501 | The board thermal example below illustrates how to setup one thermal zone | ||
| 502 | with many sensors and many cooling devices. | ||
| 503 | |||
| 504 | #include <dt-bindings/thermal/thermal.h> | ||
| 505 | |||
| 506 | &i2c1 { | ||
| 507 | ... | ||
| 508 | /* | ||
| 509 | * An IC with several temperature sensor. | ||
| 510 | */ | ||
| 511 | adc-dummy: sensor@0x50 { | ||
| 512 | ... | ||
| 513 | #thermal-sensor-cells = <1>; /* sensor internal ID */ | ||
| 514 | }; | ||
| 515 | }; | ||
| 516 | |||
| 517 | thermal-zones { | ||
| 518 | batt-thermal { | ||
| 519 | polling-delay-passive = <500>; /* milliseconds */ | ||
| 520 | polling-delay = <2500>; /* milliseconds */ | ||
| 521 | |||
| 522 | /* sensor ID */ | ||
| 523 | thermal-sensors = <&adc-dummy 4>; | ||
| 524 | |||
| 525 | trips { | ||
| 526 | ... | ||
| 527 | }; | ||
| 528 | |||
| 529 | cooling-maps { | ||
| 530 | ... | ||
| 531 | }; | ||
| 532 | }; | ||
| 533 | |||
| 534 | board-thermal: board-thermal { | ||
| 535 | polling-delay-passive = <1000>; /* milliseconds */ | ||
| 536 | polling-delay = <2500>; /* milliseconds */ | ||
| 537 | |||
| 538 | /* sensor ID */ | ||
| 539 | thermal-sensors = <&adc-dummy 0>, /* pcb top edge */ | ||
| 540 | <&adc-dummy 1>, /* lcd */ | ||
| 541 | <&adc-dymmy 2>; /* back cover */ | ||
| 542 | /* | ||
| 543 | * An array of coefficients describing the sensor | ||
| 544 | * linear relation. E.g.: | ||
| 545 | * z = c1*x1 + c2*x2 + c3*x3 | ||
| 546 | */ | ||
| 547 | coefficients = <1200 -345 890>; | ||
| 548 | |||
| 549 | trips { | ||
| 550 | /* Trips are based on resulting linear equation */ | ||
| 551 | cpu-trip: cpu-trip { | ||
| 552 | temperature = <60000>; /* millicelsius */ | ||
| 553 | hysteresis = <2000>; /* millicelsius */ | ||
| 554 | type = "passive"; | ||
| 555 | }; | ||
| 556 | gpu-trip: gpu-trip { | ||
| 557 | temperature = <55000>; /* millicelsius */ | ||
| 558 | hysteresis = <2000>; /* millicelsius */ | ||
| 559 | type = "passive"; | ||
| 560 | } | ||
| 561 | lcd-trip: lcp-trip { | ||
| 562 | temperature = <53000>; /* millicelsius */ | ||
| 563 | hysteresis = <2000>; /* millicelsius */ | ||
| 564 | type = "passive"; | ||
| 565 | }; | ||
| 566 | crit-trip: crit-trip { | ||
| 567 | temperature = <68000>; /* millicelsius */ | ||
| 568 | hysteresis = <2000>; /* millicelsius */ | ||
| 569 | type = "critical"; | ||
| 570 | }; | ||
| 571 | }; | ||
| 572 | |||
| 573 | cooling-maps { | ||
| 574 | map0 { | ||
| 575 | trip = <&cpu-trip>; | ||
| 576 | cooling-device = <&cpu0 0 2>; | ||
| 577 | contribution = <55>; | ||
| 578 | }; | ||
| 579 | map1 { | ||
| 580 | trip = <&gpu-trip>; | ||
| 581 | cooling-device = <&gpu0 0 2>; | ||
| 582 | contribution = <20>; | ||
| 583 | }; | ||
| 584 | map2 { | ||
| 585 | trip = <&lcd-trip>; | ||
| 586 | cooling-device = <&lcd0 5 10>; | ||
| 587 | contribution = <15>; | ||
| 588 | }; | ||
| 589 | }; | ||
| 590 | }; | ||
| 591 | }; | ||
| 592 | |||
| 593 | The above example is a mix of previous examples, a sensor IP with several internal | ||
| 594 | sensors used to monitor different zones, one of them is composed by several sensors and | ||
| 595 | with different cooling devices. | ||
| @@ -8,6 +8,8 @@ Required properties: · 7 unmodified lines | |||
| 8 | - compatible : should be "nvidia,tegra20-timer". | 8 | - compatible : should be "nvidia,tegra20-timer". |
| 9 | - reg : Specifies base physical address and size of the registers. | 9 | - reg : Specifies base physical address and size of the registers. |
| 10 | - interrupts : A list of 4 interrupts; one per timer channel. | 10 | - interrupts : A list of 4 interrupts; one per timer channel. |
| 11 | - clocks : Must contain one entry, for the module clock. | ||
| 12 | See ../clocks/clock-bindings.txt for details. | ||
| 11 | 13 | ||
| 12 | Example: | 14 | Example: |
| 13 | 15 | ||
| @@ -18,4 +20,5 @@ timer { · 4 unmodified lines | |||
| 18 | 0 1 0x04 | 20 | 0 1 0x04 |
| 19 | 0 41 0x04 | 21 | 0 41 0x04 |
| 20 | 0 42 0x04>; | 22 | 0 42 0x04>; |
| 23 | clocks = <&tegra_car 132>; | ||
| 21 | }; | 24 | }; |
| @@ -10,6 +10,8 @@ Required properties: · 9 unmodified lines | |||
| 10 | - reg : Specifies base physical address and size of the registers. | 10 | - reg : Specifies base physical address and size of the registers. |
| 11 | - interrupts : A list of 6 interrupts; one per each of timer channels 1 | 11 | - interrupts : A list of 6 interrupts; one per each of timer channels 1 |
| 12 | through 5, and one for the shared interrupt for the remaining channels. | 12 | through 5, and one for the shared interrupt for the remaining channels. |
| 13 | - clocks : Must contain one entry, for the module clock. | ||
| 14 | See ../clocks/clock-bindings.txt for details. | ||
| 13 | 15 | ||
| 14 | timer { | 16 | timer { |
| 15 | compatible = "nvidia,tegra30-timer", "nvidia,tegra20-timer"; | 17 | compatible = "nvidia,tegra30-timer", "nvidia,tegra20-timer"; |
| @@ -20,4 +22,5 @@ timer { · 4 unmodified lines | |||
| 20 | 0 42 0x04 | 22 | 0 42 0x04 |
| 21 | 0 121 0x04 | 23 | 0 121 0x04 |
| 22 | 0 122 0x04>; | 24 | 0 122 0x04>; |
| 25 | clocks = <&tegra_car 214>; | ||
| 23 | }; | 26 | }; |
| @@ -31,38 +31,58 @@ Required properties: · 30 unmodified lines | |||
| 31 | 7: .. | 31 | 7: .. |
| 32 | i: Local Timer Interrupt n | 32 | i: Local Timer Interrupt n |
| 33 | 33 | ||
| 34 | Example 1: In this example, the system uses only the first global timer | 34 | For MCT block that uses a per-processor interrupt for local timers, such |
| 35 | interrupt generated by MCT and the remaining three global timer | 35 | as ones compatible with "samsung,exynos4412-mct", only one local timer |
| 36 | interrupts are unused. Two local timer interrupts have been | 36 | interrupt might be specified, meaning that all local timers use the same |
| 37 | specified. | 37 | per processor interrupt. |
| 38 | |||
| 39 | Example 1: In this example, the IP contains two local timers, using separate | ||
| 40 | interrupts, so two local timer interrupts have been specified, | ||
| 41 | in addition to four global timer interrupts. | ||
| 38 | 42 | ||
| 39 | mct@10050000 { | 43 | mct@10050000 { |
| 40 | compatible = "samsung,exynos4210-mct"; | 44 | compatible = "samsung,exynos4210-mct"; |
| 41 | reg = <0x10050000 0x800>; | 45 | reg = <0x10050000 0x800>; |
| 42 | interrupts = <0 57 0>, <0 0 0>, <0 0 0>, <0 0 0>, | 46 | interrupts = <0 57 0>, <0 69 0>, <0 70 0>, <0 71 0>, |
| 43 | <0 42 0>, <0 48 0>; | 47 | <0 42 0>, <0 48 0>; |
| 44 | }; | 48 | }; |
| 45 | 49 | ||
| 46 | Example 2: In this example, the MCT global and local timer interrupts are | 50 | Example 2: In this example, the timer interrupts are connected to two separate |
| 47 | connected to two separate interrupt controllers. Hence, an | 51 | interrupt controllers. Hence, an interrupt-map is created to map |
| 48 | interrupt-map is created to map the interrupts to the respective | 52 | the interrupts to the respective interrupt controllers. |
| 49 | interrupt controllers. | ||
| 50 | 53 | ||
| 51 | mct@101C0000 { | 54 | mct@101C0000 { |
| 52 | compatible = "samsung,exynos4210-mct"; | 55 | compatible = "samsung,exynos4210-mct"; |
| 53 | reg = <0x101C0000 0x800>; | 56 | reg = <0x101C0000 0x800>; |
| 54 | interrupt-controller; | ||
| 55 | #interrups-cells = <2>; | ||
| 56 | interrupt-parent = <&mct_map>; | 57 | interrupt-parent = <&mct_map>; |
| 57 | interrupts = <0 0>, <1 0>, <2 0>, <3 0>, | 58 | interrupts = <0>, <1>, <2>, <3>, <4>, <5>; |
| 58 | <4 0>, <5 0>; | ||
| 59 | 59 | ||
| 60 | mct_map: mct-map { | 60 | mct_map: mct-map { |
| 61 | #interrupt-cells = <2>; | 61 | #interrupt-cells = <1>; |
| 62 | #address-cells = <0>; | 62 | #address-cells = <0>; |
| 63 | #size-cells = <0>; | 63 | #size-cells = <0>; |
| 64 | interrupt-map = <0x0 0 &combiner 23 3>, | 64 | interrupt-map = <0 &gic 0 57 0>, |
| 65 | <0x4 0 &gic 0 120 0>, | 65 | <1 &gic 0 69 0>, |
| 66 | <0x5 0 &gic 0 121 0>; | 66 | <2 &combiner 12 6>, |
| 67 | <3 &combiner 12 7>, | ||
| 68 | <4 &gic 0 42 0>, | ||
| 69 | <5 &gic 0 48 0>; | ||
| 67 | }; | 70 | }; |
| 68 | }; | 71 | }; |
| 72 | |||
| 73 | Example 3: In this example, the IP contains four local timers, but using | ||
| 74 | a per-processor interrupt to handle them. Either all the local | ||
| 75 | timer interrupts can be specified, with the same interrupt specifier | ||
| 76 | value or just the first one. | ||
| 77 | |||
| 78 | mct@10050000 { | ||
| 79 | compatible = "samsung,exynos4412-mct"; | ||
| 80 | reg = <0x10050000 0x800>; | ||
| 81 | |||
| 82 | /* Both ways are possible in this case. Either: */ | ||
| 83 | interrupts = <0 57 0>, <0 69 0>, <0 70 0>, <0 71 0>, | ||
| 84 | <0 42 0>; | ||
| 85 | /* or: */ | ||
| 86 | interrupts = <0 57 0>, <0 69 0>, <0 70 0>, <0 71 0>, | ||
| 87 | <0 42 0>, <0 42 0>, <0 42 0>, <0 42 0>; | ||
| 88 | }; | ||
File renamed without changes.
| @@ -0,0 +1,29 @@ | |||
| 1 | Platform DesignWare HS OTG USB 2.0 controller | ||
| 2 | ----------------------------------------------------- | ||
| 3 | |||
| 4 | Required properties: | ||
| 5 | - compatible : One of: | ||
| 6 | - brcm,bcm2835-usb: The DWC2 USB controller instance in the BCM2835 SoC. | ||
| 7 | - snps,dwc2: A generic DWC2 USB controller with default parameters. | ||
| 8 | - reg : Should contain 1 register range (address and length) | ||
| 9 | - interrupts : Should contain 1 interrupt | ||
| 10 | - clocks: clock provider specifier | ||
| 11 | - clock-names: shall be "otg" | ||
| 12 | Refer to clk/clock-bindings.txt for generic clock consumer properties | ||
| 13 | |||
| 14 | Optional properties: | ||
| 15 | - phys: phy provider specifier | ||
| 16 | - phy-names: shall be "device" | ||
| 17 | Refer to phy/phy-bindings.txt for generic phy consumer properties | ||
| 18 | |||
| 19 | Example: | ||
| 20 | |||
| 21 | usb@101c0000 { | ||
| 22 | compatible = "ralink,rt3050-usb, snps,dwc2"; | ||
| 23 | reg = <0x101c0000 40000>; | ||
| 24 | interrupts = <18>; | ||
| 25 | clocks = <&usb_otg_ahb_clk>; | ||
| 26 | clock-names = "otg"; | ||
| 27 | phys = <&usbphy>; | ||
| 28 | phy-names = "usb2-phy"; | ||
| 29 | }; | ||
| @@ -0,0 +1,28 @@ | |||
| 1 | USB Peripheral Controller driver for Aeroflex Gaisler GRUSBDC. | ||
| 2 | |||
| 3 | The GRUSBDC USB Device Controller core is available in the GRLIB VHDL | ||
| 4 | IP core library. | ||
| 5 | |||
| 6 | Note: In the ordinary environment for the core, a Leon SPARC system, | ||
| 7 | these properties are built from information in the AMBA plug&play. | ||
| 8 | |||
| 9 | Required properties: | ||
| 10 | |||
| 11 | - name : Should be "GAISLER_USBDC" or "01_021" | ||
| 12 | |||
| 13 | - reg : Address and length of the register set for the device | ||
| 14 | |||
| 15 | - interrupts : Interrupt numbers for this device | ||
| 16 | |||
| 17 | Optional properties: | ||
| 18 | |||
| 19 | - epobufsizes : An array of buffer sizes for OUT endpoints. If the property is | ||
| 20 | not present, or for endpoints outside of the array, 1024 is assumed by | ||
| 21 | the driver. | ||
| 22 | |||
| 23 | - epibufsizes : An array of buffer sizes for IN endpoints. If the property is | ||
| 24 | not present, or for endpoints outside of the array, 1024 is assumed by | ||
| 25 | the driver. | ||
| 26 | |||
| 27 | For further information look in the documentation for the GLIB IP core library: | ||
| 28 | http://www.gaisler.com/products/grlib/grip.pdf | ||
| @@ -0,0 +1,20 @@ | |||
| 1 | TI Keystone USB PHY | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: should be "ti,keystone-usbphy". | ||
| 5 | - #address-cells, #size-cells : should be '1' if the device has sub-nodes | ||
| 6 | with 'reg' property. | ||
| 7 | - reg : Address and length of the usb phy control register set. | ||
| 8 | |||
| 9 | The main purpose of this PHY driver is to enable the USB PHY reference clock | ||
| 10 | gate on the Keystone SOC for both the USB2 and USB3 PHY. Otherwise it is just | ||
| 11 | an NOP PHY driver. Hence this node is referenced as both the usb2 and usb3 | ||
| 12 | phy node in the USB Glue layer driver node. | ||
| 13 | |||
| 14 | usb_phy: usb_phy@2620738 { | ||
| 15 | compatible = "ti,keystone-usbphy"; | ||
| 16 | #address-cells = <1>; | ||
| 17 | #size-cells = <1>; | ||
| 18 | reg = <0x2620738 32>; | ||
| 19 | status = "disabled"; | ||
| 20 | }; | ||
| @@ -0,0 +1,42 @@ | |||
| 1 | TI Keystone Soc USB Controller | ||
| 2 | |||
| 3 | DWC3 GLUE | ||
| 4 | |||
| 5 | Required properties: | ||
| 6 | - compatible: should be "ti,keystone-dwc3". | ||
| 7 | - #address-cells, #size-cells : should be '1' if the device has sub-nodes | ||
| 8 | with 'reg' property. | ||
| 9 | - reg : Address and length of the register set for the USB subsystem on | ||
| 10 | the SOC. | ||
| 11 | - interrupts : The irq number of this device that is used to interrupt the | ||
| 12 | MPU. | ||
| 13 | - ranges: allows valid 1:1 translation between child's address space and | ||
| 14 | parent's address space. | ||
| 15 | - clocks: Clock IDs array as required by the controller. | ||
| 16 | - clock-names: names of clocks correseponding to IDs in the clock property. | ||
| 17 | |||
| 18 | Sub-nodes: | ||
| 19 | The dwc3 core should be added as subnode to Keystone DWC3 glue. | ||
| 20 | - dwc3 : | ||
| 21 | The binding details of dwc3 can be found in: | ||
| 22 | Documentation/devicetree/bindings/usb/dwc3.txt | ||
| 23 | |||
| 24 | Example: | ||
| 25 | usb: usb@2680000 { | ||
| 26 | compatible = "ti,keystone-dwc3"; | ||
| 27 | #address-cells = <1>; | ||
| 28 | #size-cells = <1>; | ||
| 29 | reg = <0x2680000 0x10000>; | ||
| 30 | clocks = <&clkusb>; | ||
| 31 | clock-names = "usb"; | ||
| 32 | interrupts = <GIC_SPI 393 IRQ_TYPE_EDGE_RISING>; | ||
| 33 | ranges; | ||
| 34 | status = "disabled"; | ||
| 35 | |||
| 36 | dwc3@2690000 { | ||
| 37 | compatible = "synopsys,dwc3"; | ||
| 38 | reg = <0x2690000 0x70000>; | ||
| 39 | interrupts = <GIC_SPI 393 IRQ_TYPE_EDGE_RISING>; | ||
| 40 | usb-phy = <&usb_phy>, <&usb_phy>; | ||
| 41 | }; | ||
| 42 | }; | ||
| @@ -8,7 +8,12 @@ and additions : · 7 unmodified lines | |||
| 8 | Required properties : | 8 | Required properties : |
| 9 | - compatible : Should be "nvidia,tegra20-ehci". | 9 | - compatible : Should be "nvidia,tegra20-ehci". |
| 10 | - nvidia,phy : phandle of the PHY that the controller is connected to. | 10 | - nvidia,phy : phandle of the PHY that the controller is connected to. |
| 11 | - clocks : Contains a single entry which defines the USB controller's clock. | 11 | - clocks : Must contain one entry, for the module clock. |
| 12 | See ../clocks/clock-bindings.txt for details. | ||
| 13 | - resets : Must contain an entry for each entry in reset-names. | ||
| 14 | See ../reset/reset.txt for details. | ||
| 15 | - reset-names : Must include the following entries: | ||
| 16 | - usb | ||
| 12 | 17 | ||
| 13 | Optional properties: | 18 | Optional properties: |
| 14 | - nvidia,needs-double-reset : boolean is to be set for some of the Tegra20 | 19 | - nvidia,needs-double-reset : boolean is to be set for some of the Tegra20 |
| @@ -87,6 +87,8 @@ Required properties: · 86 unmodified lines | |||
| 87 | e.g. USB3 PHY and SATA PHY on OMAP5. | 87 | e.g. USB3 PHY and SATA PHY on OMAP5. |
| 88 | "ti,control-phy-dra7usb2" - if it has power down register like USB2 PHY on | 88 | "ti,control-phy-dra7usb2" - if it has power down register like USB2 PHY on |
| 89 | DRA7 platform. | 89 | DRA7 platform. |
| 90 | "ti,control-phy-am437usb2" - if it has power down register like USB2 PHY on | ||
| 91 | AM437 platform. | ||
| 90 | - reg : Address and length of the register set for the device. It contains | 92 | - reg : Address and length of the register set for the device. It contains |
| 91 | the address of "otghs_control" for control-phy-otghs or "power" register | 93 | the address of "otghs_control" for control-phy-otghs or "power" register |
| 92 | for other types. | 94 | for other types. |
| @@ -3,12 +3,14 @@ Device tree binding vendor prefix registry. Keep list in alphabetical order. · 2 unmodified lines | |||
| 3 | This isn't an exhaustive list, but you should add new prefixes to it before | 3 | This isn't an exhaustive list, but you should add new prefixes to it before |
| 4 | using them to avoid name-space collisions. | 4 | using them to avoid name-space collisions. |
| 5 | 5 | ||
| 6 | active-semi Active-Semi International Inc | ||
| 6 | ad Avionic Design GmbH | 7 | ad Avionic Design GmbH |
| 7 | adi Analog Devices, Inc. | 8 | adi Analog Devices, Inc. |
| 8 | aeroflexgaisler Aeroflex Gaisler AB | 9 | aeroflexgaisler Aeroflex Gaisler AB |
| 9 | ak Asahi Kasei Corp. | 10 | ak Asahi Kasei Corp. |
| 10 | altr Altera Corp. | 11 | altr Altera Corp. |
| 11 | amcc Applied Micro Circuits Corporation (APM, formally AMCC) | 12 | amcc Applied Micro Circuits Corporation (APM, formally AMCC) |
| 13 | amstaos AMS-Taos Inc. | ||
| 12 | apm Applied Micro Circuits Corporation (APM) | 14 | apm Applied Micro Circuits Corporation (APM) |
| 13 | arm ARM Ltd. | 15 | arm ARM Ltd. |
| 14 | atmel Atmel Corporation | 16 | atmel Atmel Corporation |
| @@ -26,19 +28,25 @@ cortina Cortina Systems, Inc. · 11 unmodified lines | |||
| 26 | dallas Maxim Integrated Products (formerly Dallas Semiconductor) | 28 | dallas Maxim Integrated Products (formerly Dallas Semiconductor) |
| 27 | davicom DAVICOM Semiconductor, Inc. | 29 | davicom DAVICOM Semiconductor, Inc. |
| 28 | denx Denx Software Engineering | 30 | denx Denx Software Engineering |
| 31 | edt Emerging Display Technologies | ||
| 29 | emmicro EM Microelectronic | 32 | emmicro EM Microelectronic |
| 33 | epfl Ecole Polytechnique Fédérale de Lausanne | ||
| 30 | epson Seiko Epson Corp. | 34 | epson Seiko Epson Corp. |
| 31 | est ESTeem Wireless Modems | 35 | est ESTeem Wireless Modems |
| 32 | fsl Freescale Semiconductor | 36 | fsl Freescale Semiconductor |
| 33 | GEFanuc GE Fanuc Intelligent Platforms Embedded Systems, Inc. | 37 | GEFanuc GE Fanuc Intelligent Platforms Embedded Systems, Inc. |
| 34 | gef GE Fanuc Intelligent Platforms Embedded Systems, Inc. | 38 | gef GE Fanuc Intelligent Platforms Embedded Systems, Inc. |
| 35 | gmt Global Mixed-mode Technology, Inc. | 39 | gmt Global Mixed-mode Technology, Inc. |
| 40 | gumstix Gumstix, Inc. | ||
| 41 | haoyu Haoyu Microelectronic Co. Ltd. | ||
| 36 | hisilicon Hisilicon Limited. | 42 | hisilicon Hisilicon Limited. |
| 37 | hp Hewlett Packard | 43 | hp Hewlett Packard |
| 38 | ibm International Business Machines (IBM) | 44 | ibm International Business Machines (IBM) |
| 39 | idt Integrated Device Technologies, Inc. | 45 | idt Integrated Device Technologies, Inc. |
| 40 | img Imagination Technologies Ltd. | 46 | img Imagination Technologies Ltd. |
| 41 | intercontrol Inter Control Group | 47 | intercontrol Inter Control Group |
| 48 | isl Intersil | ||
| 49 | karo Ka-Ro electronics GmbH | ||
| 42 | lg LG Corporation | 50 | lg LG Corporation |
| 43 | linux Linux-specific binding | 51 | linux Linux-specific binding |
| 44 | lsi LSI Corp. (LSI Logic) | 52 | lsi LSI Corp. (LSI Logic) |
| @@ -61,6 +69,7 @@ ralink Mediatek/Ralink Technology Corp. · 16 unmodified lines | |||
| 61 | ramtron Ramtron International | 69 | ramtron Ramtron International |
| 62 | realtek Realtek Semiconductor Corp. | 70 | realtek Realtek Semiconductor Corp. |
| 63 | renesas Renesas Electronics Corporation | 71 | renesas Renesas Electronics Corporation |
| 72 | rockchip Fuzhou Rockchip Electronics Co., Ltd | ||
| 64 | samsung Samsung Semiconductor | 73 | samsung Samsung Semiconductor |
| 65 | sbs Smart Battery System | 74 | sbs Smart Battery System |
| 66 | schindler Schindler | 75 | schindler Schindler |
| @@ -73,6 +82,7 @@ st STMicroelectronics · 6 unmodified lines | |||
| 73 | ste ST-Ericsson | 82 | ste ST-Ericsson |
| 74 | stericsson ST-Ericsson | 83 | stericsson ST-Ericsson |
| 75 | ti Texas Instruments | 84 | ti Texas Instruments |
| 85 | tlm Trusted Logic Mobility | ||
| 76 | toshiba Toshiba Corporation | 86 | toshiba Toshiba Corporation |
| 77 | toumaz Toumaz | 87 | toumaz Toumaz |
| 78 | v3 V3 Semiconductor | 88 | v3 V3 Semiconductor |
| @@ -0,0 +1,13 @@ | |||
| 1 | * Solomon SSD1289 Framebuffer Driver | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: Should be "solomon,ssd1289fb". The only supported bus for | ||
| 5 | now is lbc. | ||
| 6 | - reg: Should contain address of the controller on the LBC bus. The detail | ||
| 7 | was described in Documentation/devicetree/bindings/powerpc/fsl/lbc.txt | ||
| 8 | |||
| 9 | Examples: | ||
| 10 | display@2,0 { | ||
| 11 | compatible = "solomon,ssd1289fb"; | ||
| 12 | reg = <0x2 0x0000 0x0004>; | ||
| 13 | }; | ||
| @@ -9,11 +9,37 @@ Required properties: · 8 unmodified lines | |||
| 9 | 9 | ||
| 10 | Optional properties: | 10 | Optional properties: |
| 11 | - timeout-sec: contains the watchdog timeout in seconds. | 11 | - timeout-sec: contains the watchdog timeout in seconds. |
| 12 | - interrupts : Should contain WDT interrupt. | ||
| 13 | - atmel,max-heartbeat-sec : Should contain the maximum heartbeat value in | ||
| 14 | seconds. This value should be less or equal to 16. It is used to | ||
| 15 | compute the WDV field. | ||
| 16 | - atmel,min-heartbeat-sec : Should contain the minimum heartbeat value in | ||
| 17 | seconds. This value must be smaller than the max-heartbeat-sec value. | ||
| 18 | It is used to compute the WDD field. | ||
| 19 | - atmel,watchdog-type : Should be "hardware" or "software". Hardware watchdog | ||
| 20 | use the at91 watchdog reset. Software watchdog use the watchdog | ||
| 21 | interrupt to trigger a software reset. | ||
| 22 | - atmel,reset-type : Should be "proc" or "all". | ||
| 23 | "all" : assert peripherals and processor reset signals | ||
| 24 | "proc" : assert the processor reset signal | ||
| 25 | This is valid only when using "hardware" watchdog. | ||
| 26 | - atmel,disable : Should be present if you want to disable the watchdog. | ||
| 27 | - atmel,idle-halt : Should be present if you want to stop the watchdog when | ||
| 28 | entering idle state. | ||
| 29 | - atmel,dbg-halt : Should be present if you want to stop the watchdog when | ||
| 30 | entering debug state. | ||
| 12 | 31 | ||
| 13 | Example: | 32 | Example: |
| 14 | |||
| 15 | watchdog@fffffd40 { | 33 | watchdog@fffffd40 { |
| 16 | compatible = "atmel,at91sam9260-wdt"; | 34 | compatible = "atmel,at91sam9260-wdt"; |
| 17 | reg = <0xfffffd40 0x10>; | 35 | reg = <0xfffffd40 0x10>; |
| 18 | timeout-sec = <10>; | 36 | interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>; |
| 37 | timeout-sec = <15>; | ||
| 38 | atmel,watchdog-type = "hardware"; | ||
| 39 | atmel,reset-type = "all"; | ||
| 40 | atmel,dbg-halt; | ||
| 41 | atmel,idle-halt; | ||
| 42 | atmel,max-heartbeat-sec = <16>; | ||
| 43 | atmel,min-heartbeat-sec = <0>; | ||
| 44 | status = "okay"; | ||
| 19 | }; | 45 | }; |
| @@ -1,12 +1,24 @@ | |||
| 1 | DaVinci Watchdog Timer (WDT) Controller | 1 | Texas Instruments DaVinci/Keystone Watchdog Timer (WDT) Controller |
| 2 | 2 | ||
| 3 | Required properties: | 3 | Required properties: |
| 4 | - compatible : Should be "ti,davinci-wdt" | 4 | - compatible : Should be "ti,davinci-wdt", "ti,keystone-wdt" |
| 5 | - reg : Should contain WDT registers location and length | 5 | - reg : Should contain WDT registers location and length |
| 6 | 6 | ||
| 7 | Optional properties: | ||
| 8 | - timeout-sec : Contains the watchdog timeout in seconds | ||
| 9 | - clocks : the clock feeding the watchdog timer. | ||
| 10 | Needed if platform uses clocks. | ||
| 11 | See clock-bindings.txt | ||
| 12 | |||
| 13 | Documentation: | ||
| 14 | Davinci DM646x - http://www.ti.com/lit/ug/spruer5b/spruer5b.pdf | ||
| 15 | Keystone - http://www.ti.com/lit/ug/sprugv5a/sprugv5a.pdf | ||
| 16 | |||
| 7 | Examples: | 17 | Examples: |
| 8 | 18 | ||
| 9 | wdt: wdt@2320000 { | 19 | wdt: wdt@2320000 { |
| 10 | compatible = "ti,davinci-wdt"; | 20 | compatible = "ti,davinci-wdt"; |
| 11 | reg = <0x02320000 0x80>; | 21 | reg = <0x02320000 0x80>; |
| 22 | timeout-sec = <30>; | ||
| 23 | clocks = <&clkwdtimer0>; | ||
| 12 | }; | 24 | }; |
| @@ -0,0 +1,23 @@ | |||
| 1 | * GPIO-controlled Watchdog | ||
| 2 | |||
| 3 | Required Properties: | ||
| 4 | - compatible: Should contain "linux,wdt-gpio". | ||
| 5 | - gpios: From common gpio binding; gpio connection to WDT reset pin. | ||
| 6 | - hw_algo: The algorithm used by the driver. Should be one of the | ||
| 7 | following values: | ||
| 8 | - toggle: Either a high-to-low or a low-to-high transition clears | ||
| 9 | the WDT counter. The watchdog timer is disabled when GPIO is | ||
| 10 | left floating or connected to a three-state buffer. | ||
| 11 | - level: Low or high level starts counting WDT timeout, | ||
| 12 | the opposite level disables the WDT. Active level is determined | ||
| 13 | by the GPIO flags. | ||
| 14 | - hw_margin_ms: Maximum time to reset watchdog circuit (milliseconds). | ||
| 15 | |||
| 16 | Example: | ||
| 17 | watchdog: watchdog { | ||
| 18 | /* ADM706 */ | ||
| 19 | compatible = "linux,wdt-gpio"; | ||
| 20 | gpios = <&gpio3 9 GPIO_ACTIVE_LOW>; | ||
| 21 | hw_algo = "toggle"; | ||
| 22 | hw_margin_ms = <1600>; | ||
| 23 | }; | ||
| @@ -5,10 +5,29 @@ after a preset amount of time during which the WDT reset event has not · 4 unmodified lines | |||
| 5 | occurred. | 5 | occurred. |
| 6 | 6 | ||
| 7 | Required properties: | 7 | Required properties: |
| 8 | - compatible : should be "samsung,s3c2410-wdt" | 8 | - compatible : should be one among the following |
| 9 | (a) "samsung,s3c2410-wdt" for Exynos4 and previous SoCs | ||
| 10 | (b) "samsung,exynos5250-wdt" for Exynos5250 | ||
| 11 | (c) "samsung,exynos5420-wdt" for Exynos5420 | ||
| 12 | |||
| 9 | - reg : base physical address of the controller and length of memory mapped | 13 | - reg : base physical address of the controller and length of memory mapped |
| 10 | region. | 14 | region. |
| 11 | - interrupts : interrupt number to the cpu. | 15 | - interrupts : interrupt number to the cpu. |
| 16 | - samsung,syscon-phandle : reference to syscon node (This property required only | ||
| 17 | in case of compatible being "samsung,exynos5250-wdt" or "samsung,exynos5420-wdt". | ||
| 18 | In case of Exynos5250 and 5420 this property points to syscon node holding the PMU | ||
| 19 | base address) | ||
| 12 | 20 | ||
| 13 | Optional properties: | 21 | Optional properties: |
| 14 | - timeout-sec : contains the watchdog timeout in seconds. | 22 | - timeout-sec : contains the watchdog timeout in seconds. |
| 23 | |||
| 24 | Example: | ||
| 25 | |||
| 26 | watchdog@101D0000 { | ||
| 27 | compatible = "samsung,exynos5250-wdt"; | ||
| 28 | reg = <0x101D0000 0x100>; | ||
| 29 | interrupts = <0 42 0>; | ||
| 30 | clocks = <&clock 336>; | ||
| 31 | clock-names = "watchdog"; | ||
| 32 | samsung,syscon-phandle = <&pmu_syscon>; | ||
| 33 | }; | ||
| @@ -1364,19 +1364,16 @@ Appendix A - Sample SOC node for MPC8540 · 1363 unmodified lines | |||
| 1364 | phy0: ethernet-phy@0 { | 1364 | phy0: ethernet-phy@0 { |
| 1365 | interrupts = <5 1>; | 1365 | interrupts = <5 1>; |
| 1366 | reg = <0>; | 1366 | reg = <0>; |
| 1367 | device_type = "ethernet-phy"; | ||
| 1368 | }; | 1367 | }; |
| 1369 | 1368 | ||
| 1370 | phy1: ethernet-phy@1 { | 1369 | phy1: ethernet-phy@1 { |
| 1371 | interrupts = <5 1>; | 1370 | interrupts = <5 1>; |
| 1372 | reg = <1>; | 1371 | reg = <1>; |
| 1373 | device_type = "ethernet-phy"; | ||
| 1374 | }; | 1372 | }; |
| 1375 | 1373 | ||
| 1376 | phy3: ethernet-phy@3 { | 1374 | phy3: ethernet-phy@3 { |
| 1377 | interrupts = <7 1>; | 1375 | interrupts = <7 1>; |
| 1378 | reg = <3>; | 1376 | reg = <3>; |
| 1379 | device_type = "ethernet-phy"; | ||
| 1380 | }; | 1377 | }; |
| 1381 | }; | 1378 | }; |
| 1382 | }; | 1379 | }; |
| @@ -0,0 +1,116 @@ | |||
| 1 | |||
| 2 | Device Driver Design Patterns | ||
| 3 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
| 4 | |||
| 5 | This document describes a few common design patterns found in device drivers. | ||
| 6 | It is likely that subsystem maintainers will ask driver developers to | ||
| 7 | conform to these design patterns. | ||
| 8 | |||
| 9 | 1. State Container | ||
| 10 | 2. container_of() | ||
| 11 | |||
| 12 | |||
| 13 | 1. State Container | ||
| 14 | ~~~~~~~~~~~~~~~~~~ | ||
| 15 | |||
| 16 | While the kernel contains a few device drivers that assume that they will | ||
| 17 | only be probed() once on a certain system (singletons), it is custom to assume | ||
| 18 | that the device the driver binds to will appear in several instances. This | ||
| 19 | means that the probe() function and all callbacks need to be reentrant. | ||
| 20 | |||
| 21 | The most common way to achieve this is to use the state container design | ||
| 22 | pattern. It usually has this form: | ||
| 23 | |||
| 24 | struct foo { | ||
| 25 | spinlock_t lock; /* Example member */ | ||
| 26 | (...) | ||
| 27 | }; | ||
| 28 | |||
| 29 | static int foo_probe(...) | ||
| 30 | { | ||
| 31 | struct foo *foo; | ||
| 32 | |||
| 33 | foo = devm_kzalloc(dev, sizeof(*foo), GFP_KERNEL); | ||
| 34 | if (!foo) | ||
| 35 | return -ENOMEM; | ||
| 36 | spin_lock_init(&foo->lock); | ||
| 37 | (...) | ||
| 38 | } | ||
| 39 | |||
| 40 | This will create an instance of struct foo in memory every time probe() is | ||
| 41 | called. This is our state container for this instance of the device driver. | ||
| 42 | Of course it is then necessary to always pass this instance of the | ||
| 43 | state around to all functions that need access to the state and its members. | ||
| 44 | |||
| 45 | For example, if the driver is registering an interrupt handler, you would | ||
| 46 | pass around a pointer to struct foo like this: | ||
| 47 | |||
| 48 | static irqreturn_t foo_handler(int irq, void *arg) | ||
| 49 | { | ||
| 50 | struct foo *foo = arg; | ||
| 51 | (...) | ||
| 52 | } | ||
| 53 | |||
| 54 | static int foo_probe(...) | ||
| 55 | { | ||
| 56 | struct foo *foo; | ||
| 57 | |||
| 58 | (...) | ||
| 59 | ret = request_irq(irq, foo_handler, 0, "foo", foo); | ||
| 60 | } | ||
| 61 | |||
| 62 | This way you always get a pointer back to the correct instance of foo in | ||
| 63 | your interrupt handler. | ||
| 64 | |||
| 65 | |||
| 66 | 2. container_of() | ||
| 67 | ~~~~~~~~~~~~~~~~~ | ||
| 68 | |||
| 69 | Continuing on the above example we add an offloaded work: | ||
| 70 | |||
| 71 | struct foo { | ||
| 72 | spinlock_t lock; | ||
| 73 | struct workqueue_struct *wq; | ||
| 74 | struct work_struct offload; | ||
| 75 | (...) | ||
| 76 | }; | ||
| 77 | |||
| 78 | static void foo_work(struct work_struct *work) | ||
| 79 | { | ||
| 80 | struct foo *foo = container_of(work, struct foo, offload); | ||
| 81 | |||
| 82 | (...) | ||
| 83 | } | ||
| 84 | |||
| 85 | static irqreturn_t foo_handler(int irq, void *arg) | ||
| 86 | { | ||
| 87 | struct foo *foo = arg; | ||
| 88 | |||
| 89 | queue_work(foo->wq, &foo->offload); | ||
| 90 | (...) | ||
| 91 | } | ||
| 92 | |||
| 93 | static int foo_probe(...) | ||
| 94 | { | ||
| 95 | struct foo *foo; | ||
| 96 | |||
| 97 | foo->wq = create_singlethread_workqueue("foo-wq"); | ||
| 98 | INIT_WORK(&foo->offload, foo_work); | ||
| 99 | (...) | ||
| 100 | } | ||
| 101 | |||
| 102 | The design pattern is the same for an hrtimer or something similar that will | ||
| 103 | return a single argument which is a pointer to a struct member in the | ||
| 104 | callback. | ||
| 105 | |||
| 106 | container_of() is a macro defined in <linux/kernel.h> | ||
| 107 | |||
| 108 | What container_of() does is to obtain a pointer to the containing struct from | ||
| 109 | a pointer to a member by a simple subtraction using the offsetof() macro from | ||
| 110 | standard C, which allows something similar to object oriented behaviours. | ||
| 111 | Notice that the contained member must not be a pointer, but an actual member | ||
| 112 | for this to work. | ||
| 113 | |||
| 114 | We can see here that we avoid having global pointers to our struct foo * | ||
| 115 | instance this way, while still keeping the number of parameters passed to the | ||
| 116 | work function to a single pointer. | ||
| @@ -242,6 +242,8 @@ IIO · 241 unmodified lines | |||
| 242 | devm_iio_device_free() | 242 | devm_iio_device_free() |
| 243 | devm_iio_trigger_alloc() | 243 | devm_iio_trigger_alloc() |
| 244 | devm_iio_trigger_free() | 244 | devm_iio_trigger_free() |
| 245 | devm_iio_device_register() | ||
| 246 | devm_iio_device_unregister() | ||
| 245 | 247 | ||
| 246 | IO region | 248 | IO region |
| 247 | devm_request_region() | 249 | devm_request_region() |
| @@ -48,7 +48,7 @@ struct platform_driver { · 47 unmodified lines | |||
| 48 | struct device_driver driver; | 48 | struct device_driver driver; |
| 49 | }; | 49 | }; |
| 50 | 50 | ||
| 51 | Note that probe() should general verify that the specified device hardware | 51 | Note that probe() should in general verify that the specified device hardware |
| 52 | actually exists; sometimes platform setup code can't be sure. The probing | 52 | actually exists; sometimes platform setup code can't be sure. The probing |
| 53 | can use device resources, including clocks, and device platform_data. | 53 | can use device resources, including clocks, and device platform_data. |
| 54 | 54 | ||
| @@ -108,6 +108,12 @@ If your query set is big, you can batch them too: · 107 unmodified lines | |||
| 108 | 108 | ||
| 109 | ~# cat query-batch-file > <debugfs>/dynamic_debug/control | 109 | ~# cat query-batch-file > <debugfs>/dynamic_debug/control |
| 110 | 110 | ||
| 111 | A another way is to use wildcard. The match rule support '*' (matches | ||
| 112 | zero or more characters) and '?' (matches exactly one character).For | ||
| 113 | example, you can match all usb drivers: | ||
| 114 | |||
| 115 | ~# echo "file drivers/usb/* +p" > <debugfs>/dynamic_debug/control | ||
| 116 | |||
| 111 | At the syntactical level, a command comprises a sequence of match | 117 | At the syntactical level, a command comprises a sequence of match |
| 112 | specifications, followed by a flags change specification. | 118 | specifications, followed by a flags change specification. |
| 113 | 119 | ||
| @@ -315,6 +321,9 @@ nullarbor:~ # echo -n 'func svc_process -p' > · 201 unmodified lines | |||
| 315 | nullarbor:~ # echo -n 'format "nfsd: READ" +p' > | 321 | nullarbor:~ # echo -n 'format "nfsd: READ" +p' > |
| 316 | <debugfs>/dynamic_debug/control | 322 | <debugfs>/dynamic_debug/control |
| 317 | 323 | ||
| 324 | // enable messages in files of which the pathes include string "usb" | ||
| 325 | nullarbor:~ # echo -n '*usb* +p' > <debugfs>/dynamic_debug/control | ||
| 326 | |||
| 318 | // enable all messages | 327 | // enable all messages |
| 319 | nullarbor:~ # echo -n '+p' > <debugfs>/dynamic_debug/control | 328 | nullarbor:~ # echo -n '+p' > <debugfs>/dynamic_debug/control |
| 320 | 329 | ||
| @@ -20,7 +20,7 @@ The EFI boot stub is enabled with the CONFIG_EFI_STUB kernel option. · 19 unmodified lines | |||
| 20 | **** How to install bzImage.efi | 20 | **** How to install bzImage.efi |
| 21 | 21 | ||
| 22 | The bzImage located in arch/x86/boot/bzImage must be copied to the EFI | 22 | The bzImage located in arch/x86/boot/bzImage must be copied to the EFI |
| 23 | System Partiion (ESP) and renamed with the extension ".efi". Without | 23 | System Partition (ESP) and renamed with the extension ".efi". Without |
| 24 | the extension the EFI firmware loader will refuse to execute it. It's | 24 | the extension the EFI firmware loader will refuse to execute it. It's |
| 25 | not possible to execute bzImage.efi from the usual Linux file systems | 25 | not possible to execute bzImage.efi from the usual Linux file systems |
| 26 | because EFI firmware doesn't have support for them. | 26 | because EFI firmware doesn't have support for them. |
| @@ -104,7 +104,7 @@ Then from the "Message" menu item, select insert file and choose your patch. · 103 unmodified lines | |||
| 104 | As an added bonus you can customise the message creation toolbar menu | 104 | As an added bonus you can customise the message creation toolbar menu |
| 105 | and put the "insert file" icon there. | 105 | and put the "insert file" icon there. |
| 106 | 106 | ||
| 107 | Make the the composer window wide enough so that no lines wrap. As of | 107 | Make the composer window wide enough so that no lines wrap. As of |
| 108 | KMail 1.13.5 (KDE 4.5.4), KMail will apply word wrapping when sending | 108 | KMail 1.13.5 (KDE 4.5.4), KMail will apply word wrapping when sending |
| 109 | the email if the lines wrap in the composer window. Having word wrapping | 109 | the email if the lines wrap in the composer window. Having word wrapping |
| 110 | disabled in the Options menu isn't enough. Thus, if your patch has very | 110 | disabled in the Options menu isn't enough. Thus, if your patch has very |
| @@ -50,7 +50,7 @@ so that they are still compatible with legacy userspace processes. · 49 unmodified lines | |||
| 50 | Extcon's extended features for switch device drivers with | 50 | Extcon's extended features for switch device drivers with |
| 51 | complex features usually required magic numbers in state | 51 | complex features usually required magic numbers in state |
| 52 | value of switch_dev. With extcon, such magic numbers that | 52 | value of switch_dev. With extcon, such magic numbers that |
| 53 | support multiple cables ( | 53 | support multiple cables are no more required or supported. |
| 54 | 54 | ||
| 55 | 1. Define cable names at edev->supported_cable. | 55 | 1. Define cable names at edev->supported_cable. |
| 56 | 2. (Recommended) remove print_state callback. | 56 | 2. (Recommended) remove print_state callback. |
| @@ -114,11 +114,8 @@ exclusive, the two cables cannot be in ATTACHED state simulteneously. · 57 unmodified lines | |||
| 114 | 114 | ||
| 115 | ****** ABI Location | 115 | ****** ABI Location |
| 116 | 116 | ||
| 117 | If "CONFIG_ANDROID" is enabled and "CONFIG_ANDROID_SWITCH" is | 117 | If "CONFIG_ANDROID" is enabled, /sys/class/switch/* are created |
| 118 | disabled, /sys/class/switch/* are created as symbolic links to | 118 | as symbolic links to /sys/class/extcon/*. |
| 119 | /sys/class/extcon/*. Because CONFIG_ANDROID_SWITCH creates | ||
| 120 | /sys/class/switch directory, we disable symboling linking if | ||
| 121 | CONFIG_ANDROID_SWITCH is enabled. | ||
| 122 | 119 | ||
| 123 | The two files of switch class, name and state, are provided with | 120 | The two files of switch class, name and state, are provided with |
| 124 | extcon, too. When the multistate support (STEP 2 of CHAPTER 1.) is | 121 | extcon, too. When the multistate support (STEP 2 of CHAPTER 1.) is |
| @@ -10,24 +10,32 @@ afs.txt · 9 unmodified lines | |||
| 10 | - info and examples for the distributed AFS (Andrew File System) fs. | 10 | - info and examples for the distributed AFS (Andrew File System) fs. |
| 11 | affs.txt | 11 | affs.txt |
| 12 | - info and mount options for the Amiga Fast File System. | 12 | - info and mount options for the Amiga Fast File System. |
| 13 | autofs4-mount-control.txt | ||
| 14 | - info on device control operations for autofs4 module. | ||
| 13 | automount-support.txt | 15 | automount-support.txt |
| 14 | - information about filesystem automount support. | 16 | - information about filesystem automount support. |
| 15 | befs.txt | 17 | befs.txt |
| 16 | - information about the BeOS filesystem for Linux. | 18 | - information about the BeOS filesystem for Linux. |
| 17 | bfs.txt | 19 | bfs.txt |
| 18 | - info for the SCO UnixWare Boot Filesystem (BFS). | 20 | - info for the SCO UnixWare Boot Filesystem (BFS). |
| 21 | btrfs.txt | ||
| 22 | - info for the BTRFS filesystem. | ||
| 23 | caching/ | ||
| 24 | - directory containing filesystem cache documentation. | ||
| 19 | ceph.txt | 25 | ceph.txt |
| 20 | - info for the Ceph Distributed File System | 26 | - info for the Ceph Distributed File System. |
| 21 | cifs.txt | 27 | cifs/ |
| 22 | - description of the CIFS filesystem. | 28 | - directory containing CIFS filesystem documentation and example code. |
| 23 | coda.txt | 29 | coda.txt |
| 24 | - description of the CODA filesystem. | 30 | - description of the CODA filesystem. |
| 25 | configfs/ | 31 | configfs/ |
| 26 | - directory containing configfs documentation and example code. | 32 | - directory containing configfs documentation and example code. |
| 27 | cramfs.txt | 33 | cramfs.txt |
| 28 | - info on the cram filesystem for small storage (ROMs etc). | 34 | - info on the cram filesystem for small storage (ROMs etc). |
| 29 | dentry-locking.txt | 35 | debugfs.txt |
| 30 | - info on the RCU-based dcache locking model. | 36 | - info on the debugfs filesystem. |
| 37 | devpts.txt | ||
| 38 | - info on the devpts filesystem. | ||
| 31 | directory-locking | 39 | directory-locking |
| 32 | - info about the locking scheme used for directory operations. | 40 | - info about the locking scheme used for directory operations. |
| 33 | dlmfs.txt | 41 | dlmfs.txt |
| @@ -35,7 +43,7 @@ dlmfs.txt · 1 unmodified line | |||
| 35 | dnotify.txt | 43 | dnotify.txt |
| 36 | - info about directory notification in Linux. | 44 | - info about directory notification in Linux. |
| 37 | dnotify_test.c | 45 | dnotify_test.c |
| 38 | - example program for dnotify | 46 | - example program for dnotify. |
| 39 | ecryptfs.txt | 47 | ecryptfs.txt |
| 40 | - docs on eCryptfs: stacked cryptographic filesystem for Linux. | 48 | - docs on eCryptfs: stacked cryptographic filesystem for Linux. |
| 41 | efivarfs.txt | 49 | efivarfs.txt |
| @@ -48,12 +56,18 @@ ext3.txt · 6 unmodified lines | |||
| 48 | - info, mount options and specifications for the Ext3 filesystem. | 56 | - info, mount options and specifications for the Ext3 filesystem. |
| 49 | ext4.txt | 57 | ext4.txt |
| 50 | - info, mount options and specifications for the Ext4 filesystem. | 58 | - info, mount options and specifications for the Ext4 filesystem. |
| 51 | files.txt | ||
| 52 | - info on file management in the Linux kernel. | ||
| 53 | f2fs.txt | 59 | f2fs.txt |
| 54 | - info and mount options for the F2FS filesystem. | 60 | - info and mount options for the F2FS filesystem. |
| 61 | fiemap.txt | ||
| 62 | - info on fiemap ioctl. | ||
| 63 | files.txt | ||
| 64 | - info on file management in the Linux kernel. | ||
| 55 | fuse.txt | 65 | fuse.txt |
| 56 | - info on the Filesystem in User SpacE including mount options. | 66 | - info on the Filesystem in User SpacE including mount options. |
| 67 | gfs2-glocks.txt | ||
| 68 | - info on the Global File System 2 - Glock internal locking rules. | ||
| 69 | gfs2-uevents.txt | ||
| 70 | - info on the Global File System 2 - uevents. | ||
| 57 | gfs2.txt | 71 | gfs2.txt |
| 58 | - info on the Global File System 2. | 72 | - info on the Global File System 2. |
| 59 | hfs.txt | 73 | hfs.txt |
| @@ -84,40 +98,58 @@ ntfs.txt · 24 unmodified lines | |||
| 84 | - info and mount options for the NTFS filesystem (Windows NT). | 98 | - info and mount options for the NTFS filesystem (Windows NT). |
| 85 | ocfs2.txt | 99 | ocfs2.txt |
| 86 | - info and mount options for the OCFS2 clustered filesystem. | 100 | - info and mount options for the OCFS2 clustered filesystem. |
| 101 | omfs.txt | ||
| 102 | - info on the Optimized MPEG FileSystem. | ||
| 103 | path-lookup.txt | ||
| 104 | - info on path walking and name lookup locking. | ||
| 105 | pohmelfs/ | ||
| 106 | - directory containing pohmelfs filesystem documentation. | ||
| 87 | porting | 107 | porting |
| 88 | - various information on filesystem porting. | 108 | - various information on filesystem porting. |
| 89 | proc.txt | 109 | proc.txt |
| 90 | - info on Linux's /proc filesystem. | 110 | - info on Linux's /proc filesystem. |
| 111 | qnx6.txt | ||
| 112 | - info on the QNX6 filesystem. | ||
| 113 | quota.txt | ||
| 114 | - info on Quota subsystem. | ||
| 91 | ramfs-rootfs-initramfs.txt | 115 | ramfs-rootfs-initramfs.txt |
| 92 | - info on the 'in memory' filesystems ramfs, rootfs and initramfs. | 116 | - info on the 'in memory' filesystems ramfs, rootfs and initramfs. |
| 93 | reiser4.txt | ||
| 94 | - info on the Reiser4 filesystem based on dancing tree algorithms. | ||
| 95 | relay.txt | 117 | relay.txt |
| 96 | - info on relay, for efficient streaming from kernel to user space. | 118 | - info on relay, for efficient streaming from kernel to user space. |
| 97 | romfs.txt | 119 | romfs.txt |
| 98 | - description of the ROMFS filesystem. | 120 | - description of the ROMFS filesystem. |
| 99 | seq_file.txt | 121 | seq_file.txt |
| 100 | - how to use the seq_file API | 122 | - how to use the seq_file API. |
| 101 | sharedsubtree.txt | 123 | sharedsubtree.txt |
| 102 | - a description of shared subtrees for namespaces. | 124 | - a description of shared subtrees for namespaces. |
| 103 | spufs.txt | 125 | spufs.txt |
| 104 | - info and mount options for the SPU filesystem used on Cell. | 126 | - info and mount options for the SPU filesystem used on Cell. |
| 127 | squashfs.txt | ||
| 128 | - info on the squashfs filesystem. | ||
| 105 | sysfs-pci.txt | 129 | sysfs-pci.txt |
| 106 | - info on accessing PCI device resources through sysfs. | 130 | - info on accessing PCI device resources through sysfs. |
| 131 | sysfs-tagging.txt | ||
| 132 | - info on sysfs tagging to avoid duplicates. | ||
| 107 | sysfs.txt | 133 | sysfs.txt |
| 108 | - info on sysfs, a ram-based filesystem for exporting kernel objects. | 134 | - info on sysfs, a ram-based filesystem for exporting kernel objects. |
| 109 | sysv-fs.txt | 135 | sysv-fs.txt |
| 110 | - info on the SystemV/V7/Xenix/Coherent filesystem. | 136 | - info on the SystemV/V7/Xenix/Coherent filesystem. |
| 111 | tmpfs.txt | 137 | tmpfs.txt |
| 112 | - info on tmpfs, a filesystem that holds all files in virtual memory. | 138 | - info on tmpfs, a filesystem that holds all files in virtual memory. |
| 139 | ubifs.txt | ||
| 140 | - info on the Unsorted Block Images FileSystem. | ||
| 113 | udf.txt | 141 | udf.txt |
| 114 | - info and mount options for the UDF filesystem. | 142 | - info and mount options for the UDF filesystem. |
| 115 | ufs.txt | 143 | ufs.txt |
| 116 | - info on the ufs filesystem. | 144 | - info on the ufs filesystem. |
| 117 | vfat.txt | 145 | vfat.txt |
| 118 | - info on using the VFAT filesystem used in Windows NT and Windows 95 | 146 | - info on using the VFAT filesystem used in Windows NT and Windows 95. |
| 119 | vfs.txt | 147 | vfs.txt |
| 120 | - overview of the Virtual File System | 148 | - overview of the Virtual File System. |
| 149 | xfs-delayed-logging-design.txt | ||
| 150 | - info on the XFS Delayed Logging Design. | ||
| 151 | xfs-self-describing-metadata.txt | ||
| 152 | - info on XFS Self Describing Metadata. | ||
| 121 | xfs.txt | 153 | xfs.txt |
| 122 | - info and mount options for the XFS filesystem. | 154 | - info and mount options for the XFS filesystem. |
| 123 | xip.txt | 155 | xip.txt |
| @@ -69,10 +69,14 @@ OPTIONS · 68 unmodified lines | |||
| 69 | offering several exported file systems. | 69 | offering several exported file systems. |
| 70 | 70 | ||
| 71 | cache=mode specifies a caching policy. By default, no caches are used. | 71 | cache=mode specifies a caching policy. By default, no caches are used. |
| 72 | none = default no cache policy, metadata and data | ||
| 73 | alike are synchronous. | ||
| 72 | loose = no attempts are made at consistency, | 74 | loose = no attempts are made at consistency, |
| 73 | intended for exclusive, read-only mounts | 75 | intended for exclusive, read-only mounts |
| 74 | fscache = use FS-Cache for a persistent, read-only | 76 | fscache = use FS-Cache for a persistent, read-only |
| 75 | cache backend. | 77 | cache backend. |
| 78 | mmap = minimal cache that is only used for read-write | ||
| 79 | mmap. Northing else is cached, like cache=none | ||
| 76 | 80 | ||
| 77 | debug=n specifies debug level. The debug level is a bitmask. | 81 | debug=n specifies debug level. The debug level is a bitmask. |
| 78 | 0x01 = display verbose error messages | 82 | 0x01 = display verbose error messages |
| @@ -147,8 +151,7 @@ on sourceforge (http://sourceforge.net/projects/v9fs). · 68 unmodified lines | |||
| 147 | News and other information is maintained on a Wiki. | 151 | News and other information is maintained on a Wiki. |
| 148 | (http://sf.net/apps/mediawiki/v9fs/index.php). | 152 | (http://sf.net/apps/mediawiki/v9fs/index.php). |
| 149 | 153 | ||
| 150 | Bug reports may be issued through the kernel.org bugzilla | 154 | Bug reports are best issued via the mailing list. |
| 151 | (http://bugzilla.kernel.org) | ||
| 152 | 155 | ||
| 153 | For more information on the Plan 9 Operating System check out | 156 | For more information on the Plan 9 Operating System check out |
| 154 | http://plan9.bell-labs.com/plan9 | 157 | http://plan9.bell-labs.com/plan9 |
| @@ -156,11 +159,3 @@ http://plan9.bell-labs.com/plan9 · 1 unmodified line | |||
| 156 | For information on Plan 9 from User Space (Plan 9 applications and libraries | 159 | For information on Plan 9 from User Space (Plan 9 applications and libraries |
| 157 | ported to Linux/BSD/OSX/etc) check out http://swtch.com/plan9 | 160 | ported to Linux/BSD/OSX/etc) check out http://swtch.com/plan9 |
| 158 | 161 | ||
| 159 | |||
| 160 | STATUS | ||
| 161 | ====== | ||
| 162 | |||
| 163 | The 2.6 kernel support is working on PPC and x86. | ||
| 164 | |||
| 165 | PLEASE USE THE KERNEL BUGZILLA TO REPORT PROBLEMS. (http://bugzilla.kernel.org) | ||
| 166 | |||
| @@ -544,7 +544,7 @@ like the ->fault() handler, but simply return with VM_FAULT_NOPAGE, which · 543 unmodified lines | |||
| 544 | will cause the VM to retry the fault. | 544 | will cause the VM to retry the fault. |
| 545 | 545 | ||
| 546 | ->access() is called when get_user_pages() fails in | 546 | ->access() is called when get_user_pages() fails in |
| 547 | acces_process_vm(), typically used to debug a process through | 547 | access_process_vm(), typically used to debug a process through |
| 548 | /proc/pid/mem or ptrace. This function is needed only for | 548 | /proc/pid/mem or ptrace. This function is needed only for |
| 549 | VM_IO | VM_PFNMAP VMAs. | 549 | VM_IO | VM_PFNMAP VMAs. |
| 550 | 550 | ||
| @@ -38,7 +38,7 @@ Mount Options · 37 unmodified lines | |||
| 38 | ============= | 38 | ============= |
| 39 | 39 | ||
| 40 | When mounting a btrfs filesystem, the following option are accepted. | 40 | When mounting a btrfs filesystem, the following option are accepted. |
| 41 | Unless otherwise specified, all options default to off. | 41 | Options with (*) are default options and will not show in the mount options. |
| 42 | 42 | ||
| 43 | alloc_start=<bytes> | 43 | alloc_start=<bytes> |
| 44 | Debugging option to force all block allocations above a certain | 44 | Debugging option to force all block allocations above a certain |
| @@ -46,10 +46,12 @@ Unless otherwise specified, all options default to off. · 1 unmodified line | |||
| 46 | bytes, optionally with a K, M, or G suffix, case insensitive. | 46 | bytes, optionally with a K, M, or G suffix, case insensitive. |
| 47 | Default is 1MB. | 47 | Default is 1MB. |
| 48 | 48 | ||
| 49 | noautodefrag(*) | ||
| 49 | autodefrag | 50 | autodefrag |
| 50 | Detect small random writes into files and queue them up for the | 51 | Disable/enable auto defragmentation. |
| 51 | defrag process. Works best for small files; Not well suited for | 52 | Auto defragmentation detects small random writes into files and queue |
| 52 | large database workloads. | 53 | them up for the defrag process. Works best for small files; |
| 54 | Not well suited for large database workloads. | ||
| 53 | 55 | ||
| 54 | check_int | 56 | check_int |
| 55 | check_int_data | 57 | check_int_data |
| @@ -96,21 +98,26 @@ Unless otherwise specified, all options default to off. · 40 unmodified lines | |||
| 96 | can be avoided. Especially useful when trying to mount a multi-device | 98 | can be avoided. Especially useful when trying to mount a multi-device |
| 97 | setup as root. May be specified multiple times for multiple devices. | 99 | setup as root. May be specified multiple times for multiple devices. |
| 98 | 100 | ||
| 101 | nodiscard(*) | ||
| 99 | discard | 102 | discard |
| 100 | Issue frequent commands to let the block device reclaim space freed by | 103 | Disable/enable discard mount option. |
| 101 | the filesystem. This is useful for SSD devices, thinly provisioned | 104 | Discard issues frequent commands to let the block device reclaim space |
| 105 | freed by the filesystem. | ||
| 106 | This is useful for SSD devices, thinly provisioned | ||
| 102 | LUNs and virtual machine images, but may have a significant | 107 | LUNs and virtual machine images, but may have a significant |
| 103 | performance impact. (The fstrim command is also available to | 108 | performance impact. (The fstrim command is also available to |
| 104 | initiate batch trims from userspace). | 109 | initiate batch trims from userspace). |
| 105 | 110 | ||
| 111 | noenospc_debug(*) | ||
| 106 | enospc_debug | 112 | enospc_debug |
| 107 | Debugging option to be more verbose in some ENOSPC conditions. | 113 | Disable/enable debugging option to be more verbose in some ENOSPC conditions. |
| 108 | 114 | ||
| 109 | fatal_errors=<action> | 115 | fatal_errors=<action> |
| 110 | Action to take when encountering a fatal error: | 116 | Action to take when encountering a fatal error: |
| 111 | "bug" - BUG() on a fatal error. This is the default. | 117 | "bug" - BUG() on a fatal error. This is the default. |
| 112 | "panic" - panic() on a fatal error. | 118 | "panic" - panic() on a fatal error. |
| 113 | 119 | ||
| 120 | noflushoncommit(*) | ||
| 114 | flushoncommit | 121 | flushoncommit |
| 115 | The 'flushoncommit' mount option forces any data dirtied by a write in a | 122 | The 'flushoncommit' mount option forces any data dirtied by a write in a |
| 116 | prior transaction to commit as part of the current commit. This makes | 123 | prior transaction to commit as part of the current commit. This makes |
| @@ -134,26 +141,32 @@ Unless otherwise specified, all options default to off. · 17 unmodified lines | |||
| 134 | Specify that 1 metadata chunk should be allocated after every <value> | 141 | Specify that 1 metadata chunk should be allocated after every <value> |
| 135 | data chunks. Off by default. | 142 | data chunks. Off by default. |
| 136 | 143 | ||
| 144 | acl(*) | ||
| 137 | noacl | 145 | noacl |
| 138 | Disable support for Posix Access Control Lists (ACLs). See the | 146 | Enable/disable support for Posix Access Control Lists (ACLs). See the |
| 139 | acl(5) manual page for more information about ACLs. | 147 | acl(5) manual page for more information about ACLs. |
| 140 | 148 | ||
| 149 | barrier(*) | ||
| 141 | nobarrier | 150 | nobarrier |
| 142 | Disables the use of block layer write barriers. Write barriers ensure | 151 | Enable/disable the use of block layer write barriers. Write barriers |
| 143 | that certain IOs make it through the device cache and are on persistent | 152 | ensure that certain IOs make it through the device cache and are on |
| 144 | storage. If used on a device with a volatile (non-battery-backed) | 153 | persistent storage. If disabled on a device with a volatile |
| 145 | write-back cache, this option will lead to filesystem corruption on a | 154 | (non-battery-backed) write-back cache, nobarrier option will lead to |
| 146 | system crash or power loss. | 155 | filesystem corruption on a system crash or power loss. |
| 147 | 156 | ||
| 157 | datacow(*) | ||
| 148 | nodatacow | 158 | nodatacow |
| 149 | Disable data copy-on-write for newly created files. Implies nodatasum, | 159 | Enable/disable data copy-on-write for newly created files. |
| 150 | and disables all compression. | 160 | Nodatacow implies nodatasum, and disables all compression. |
| 151 | 161 | ||
| 162 | datasum(*) | ||
| 152 | nodatasum | 163 | nodatasum |
| 153 | Disable data checksumming for newly created files. | 164 | Enable/disable data checksumming for newly created files. |
| 165 | Datasum implies datacow. | ||
| 154 | 166 | ||
| 167 | treelog(*) | ||
| 155 | notreelog | 168 | notreelog |
| 156 | Disable the tree logging used for fsync and O_SYNC writes. | 169 | Enable/disable the tree logging used for fsync and O_SYNC writes. |
| 157 | 170 | ||
| 158 | recovery | 171 | recovery |
| 159 | Enable autorecovery attempts if a bad tree root is found at mount time. | 172 | Enable autorecovery attempts if a bad tree root is found at mount time. |
| @@ -120,6 +120,8 @@ active_logs=%u Support configuring the number of active logs. In the · 119 unmodified lines | |||
| 120 | disable_ext_identify Disable the extension list configured by mkfs, so f2fs | 120 | disable_ext_identify Disable the extension list configured by mkfs, so f2fs |
| 121 | does not aware of cold files such as media files. | 121 | does not aware of cold files such as media files. |
| 122 | inline_xattr Enable the inline xattrs feature. | 122 | inline_xattr Enable the inline xattrs feature. |
| 123 | inline_data Enable the inline data feature: New created small(<~3.4k) | ||
| 124 | files can be written into inode block. | ||
| 123 | 125 | ||
| 124 | ================================================================================ | 126 | ================================================================================ |
| 125 | DEBUGFS ENTRIES | 127 | DEBUGFS ENTRIES |
| @@ -171,6 +173,28 @@ Files in /sys/fs/f2fs/<devname> · 45 unmodified lines | |||
| 171 | conduct checkpoint to reclaim the prefree segments | 173 | conduct checkpoint to reclaim the prefree segments |
| 172 | to free segments. By default, 100 segments, 200MB. | 174 | to free segments. By default, 100 segments, 200MB. |
| 173 | 175 | ||
| 176 | max_small_discards This parameter controls the number of discard | ||
| 177 | commands that consist small blocks less than 2MB. | ||
| 178 | The candidates to be discarded are cached until | ||
| 179 | checkpoint is triggered, and issued during the | ||
| 180 | checkpoint. By default, it is disabled with 0. | ||
| 181 | |||
| 182 | ipu_policy This parameter controls the policy of in-place | ||
| 183 | updates in f2fs. There are five policies: | ||
| 184 | 0: F2FS_IPU_FORCE, 1: F2FS_IPU_SSR, | ||
| 185 | 2: F2FS_IPU_UTIL, 3: F2FS_IPU_SSR_UTIL, | ||
| 186 | 4: F2FS_IPU_DISABLE. | ||
| 187 | |||
| 188 | min_ipu_util This parameter controls the threshold to trigger | ||
| 189 | in-place-updates. The number indicates percentage | ||
| 190 | of the filesystem utilization, and used by | ||
| 191 | F2FS_IPU_UTIL and F2FS_IPU_SSR_UTIL policies. | ||
| 192 | |||
| 193 | max_victim_search This parameter controls the number of trials to | ||
| 194 | find a victim segment when conducting SSR and | ||
| 195 | cleaning operations. The default value is 4096 | ||
| 196 | which covers 8GB block address range. | ||
| 197 | |||
| 174 | ================================================================================ | 198 | ================================================================================ |
| 175 | USAGE | 199 | USAGE |
| 176 | ================================================================================ | 200 | ================================================================================ |
| @@ -5,11 +5,11 @@ Server support for minorversion 1 can be controlled using the · 4 unmodified lines | |||
| 5 | by reading this file will contain either "+4.1" or "-4.1" | 5 | by reading this file will contain either "+4.1" or "-4.1" |
| 6 | correspondingly. | 6 | correspondingly. |
| 7 | 7 | ||
| 8 | Currently, server support for minorversion 1 is disabled by default. | 8 | Currently, server support for minorversion 1 is enabled by default. |
| 9 | It can be enabled at run time by writing the string "+4.1" to | 9 | It can be disabled at run time by writing the string "-4.1" to |
| 10 | the /proc/fs/nfsd/versions control file. Note that to write this | 10 | the /proc/fs/nfsd/versions control file. Note that to write this |
| 11 | control file, the nfsd service must be taken down. Use your user-mode | 11 | control file, the nfsd service must be taken down. You can use rpc.nfsd |
| 12 | nfs-utils to set this up; see rpc.nfsd(8) | 12 | for this; see rpc.nfsd(8). |
| 13 | 13 | ||
| 14 | (Warning: older servers will interpret "+4.1" and "-4.1" as "+4" and | 14 | (Warning: older servers will interpret "+4.1" and "-4.1" as "+4" and |
| 15 | "-4", respectively. Therefore, code meant to work on both new and old | 15 | "-4", respectively. Therefore, code meant to work on both new and old |
| @@ -29,29 +29,6 @@ are still under development out of tree. · 13 unmodified lines | |||
| 29 | See http://wiki.linux-nfs.org/wiki/index.php/PNFS_prototype_design | 29 | See http://wiki.linux-nfs.org/wiki/index.php/PNFS_prototype_design |
| 30 | for more information. | 30 | for more information. |
| 31 | 31 | ||
| 32 | The current implementation is intended for developers only: while it | ||
| 33 | does support ordinary file operations on clients we have tested against | ||
| 34 | (including the linux client), it is incomplete in ways which may limit | ||
| 35 | features unexpectedly, cause known bugs in rare cases, or cause | ||
| 36 | interoperability problems with future clients. Known issues: | ||
| 37 | |||
| 38 | - gss support is questionable: currently mounts with kerberos | ||
| 39 | from a linux client are possible, but we aren't really | ||
| 40 | conformant with the spec (for example, we don't use kerberos | ||
| 41 | on the backchannel correctly). | ||
| 42 | - We do not support SSV, which provides security for shared | ||
| 43 | client-server state (thus preventing unauthorized tampering | ||
| 44 | with locks and opens, for example). It is mandatory for | ||
| 45 | servers to support this, though no clients use it yet. | ||
| 46 | |||
| 47 | In addition, some limitations are inherited from the current NFSv4 | ||
| 48 | implementation: | ||
| 49 | |||
| 50 | - Incomplete delegation enforcement: if a file is renamed or | ||
| 51 | unlinked by a local process, a client holding a delegation may | ||
| 52 | continue to indefinitely allow opens of the file under the old | ||
| 53 | name. | ||
| 54 | |||
| 55 | The table below, taken from the NFSv4.1 document, lists | 32 | The table below, taken from the NFSv4.1 document, lists |
| 56 | the operations that are mandatory to implement (REQ), optional | 33 | the operations that are mandatory to implement (REQ), optional |
| 57 | (OPT), and NFSv4.0 operations that are required not to implement (MNI) | 34 | (OPT), and NFSv4.0 operations that are required not to implement (MNI) |
| @@ -169,6 +146,16 @@ NS*| CB_WANTS_CANCELLED | OPT | FDELG, | Section 20.10 | · 111 unmodified lines | |||
| 169 | 146 | ||
| 170 | Implementation notes: | 147 | Implementation notes: |
| 171 | 148 | ||
| 149 | SSV: | ||
| 150 | * The spec claims this is mandatory, but we don't actually know of any | ||
| 151 | implementations, so we're ignoring it for now. The server returns | ||
| 152 | NFS4ERR_ENCR_ALG_UNSUPP on EXCHANGE_ID, which should be future-proof. | ||
| 153 | |||
| 154 | GSS on the backchannel: | ||
| 155 | * Again, theoretically required but not widely implemented (in | ||
| 156 | particular, the current Linux client doesn't request it). We return | ||
| 157 | NFS4ERR_ENCR_ALG_UNSUPP on CREATE_SESSION. | ||
| 158 | |||
| 172 | DELEGPURGE: | 159 | DELEGPURGE: |
| 173 | * mandatory only for servers that support CLAIM_DELEGATE_PREV and/or | 160 | * mandatory only for servers that support CLAIM_DELEGATE_PREV and/or |
| 174 | CLAIM_DELEG_PREV_FH (which allows clients to keep delegations that | 161 | CLAIM_DELEG_PREV_FH (which allows clients to keep delegations that |
| @@ -176,7 +163,6 @@ DELEGPURGE: · 1 unmodified line | |||
| 176 | now. | 163 | now. |
| 177 | 164 | ||
| 178 | EXCHANGE_ID: | 165 | EXCHANGE_ID: |
| 179 | * only SP4_NONE state protection supported | ||
| 180 | * implementation ids are ignored | 166 | * implementation ids are ignored |
| 181 | 167 | ||
| 182 | CREATE_SESSION: | 168 | CREATE_SESSION: |
| @@ -81,6 +81,62 @@ nodiscard(*) The discard/TRIM commands are sent to the underlying · 80 unmodified lines | |||
| 81 | block device when blocks are freed. This is useful | 81 | block device when blocks are freed. This is useful |
| 82 | for SSD devices and sparse/thinly-provisioned LUNs. | 82 | for SSD devices and sparse/thinly-provisioned LUNs. |
| 83 | 83 | ||
| 84 | Ioctls | ||
| 85 | ====== | ||
| 86 | |||
| 87 | There is some NILFS2 specific functionality which can be accessed by applications | ||
| 88 | through the system call interfaces. The list of all NILFS2 specific ioctls are | ||
| 89 | shown in the table below. | ||
| 90 | |||
| 91 | Table of NILFS2 specific ioctls | ||
| 92 | .............................................................................. | ||
| 93 | Ioctl Description | ||
| 94 | NILFS_IOCTL_CHANGE_CPMODE Change mode of given checkpoint between | ||
| 95 | checkpoint and snapshot state. This ioctl is | ||
| 96 | used in chcp and mkcp utilities. | ||
| 97 | |||
| 98 | NILFS_IOCTL_DELETE_CHECKPOINT Remove checkpoint from NILFS2 file system. | ||
| 99 | This ioctl is used in rmcp utility. | ||
| 100 | |||
| 101 | NILFS_IOCTL_GET_CPINFO Return info about requested checkpoints. This | ||
| 102 | ioctl is used in lscp utility and by | ||
| 103 | nilfs_cleanerd daemon. | ||
| 104 | |||
| 105 | NILFS_IOCTL_GET_CPSTAT Return checkpoints statistics. This ioctl is | ||
| 106 | used by lscp, rmcp utilities and by | ||
| 107 | nilfs_cleanerd daemon. | ||
| 108 | |||
| 109 | NILFS_IOCTL_GET_SUINFO Return segment usage info about requested | ||
| 110 | segments. This ioctl is used in lssu, | ||
| 111 | nilfs_resize utilities and by nilfs_cleanerd | ||
| 112 | daemon. | ||
| 113 | |||
| 114 | NILFS_IOCTL_GET_SUSTAT Return segment usage statistics. This ioctl | ||
| 115 | is used in lssu, nilfs_resize utilities and | ||
| 116 | by nilfs_cleanerd daemon. | ||
| 117 | |||
| 118 | NILFS_IOCTL_GET_VINFO Return information on virtual block addresses. | ||
| 119 | This ioctl is used by nilfs_cleanerd daemon. | ||
| 120 | |||
| 121 | NILFS_IOCTL_GET_BDESCS Return information about descriptors of disk | ||
| 122 | block numbers. This ioctl is used by | ||
| 123 | nilfs_cleanerd daemon. | ||
| 124 | |||
| 125 | NILFS_IOCTL_CLEAN_SEGMENTS Do garbage collection operation in the | ||
| 126 | environment of requested parameters from | ||
| 127 | userspace. This ioctl is used by | ||
| 128 | nilfs_cleanerd daemon. | ||
| 129 | |||
| 130 | NILFS_IOCTL_SYNC Make a checkpoint. This ioctl is used in | ||
| 131 | mkcp utility. | ||
| 132 | |||
| 133 | NILFS_IOCTL_RESIZE Resize NILFS2 volume. This ioctl is used | ||
| 134 | by nilfs_resize utility. | ||
| 135 | |||
| 136 | NILFS_IOCTL_SET_ALLOC_RANGE Define lower limit of segments in bytes and | ||
| 137 | upper limit of segments in bytes. This ioctl | ||
| 138 | is used by nilfs_resize utility. | ||
| 139 | |||
| 84 | NILFS2 usage | 140 | NILFS2 usage |
| 85 | ============ | 141 | ============ |
| 86 | 142 | ||
| @@ -547,7 +547,7 @@ Table 1-5: Kernel info in /proc · 546 unmodified lines | |||
| 547 | sys See chapter 2 | 547 | sys See chapter 2 |
| 548 | sysvipc Info of SysVIPC Resources (msg, sem, shm) (2.4) | 548 | sysvipc Info of SysVIPC Resources (msg, sem, shm) (2.4) |
| 549 | tty Info of tty drivers | 549 | tty Info of tty drivers |
| 550 | uptime System uptime | 550 | uptime Wall clock since boot, combined idle time of all cpus |
| 551 | version Kernel version | 551 | version Kernel version |
| 552 | video bttv info of video resources (2.4) | 552 | video bttv info of video resources (2.4) |
| 553 | vmallocinfo Show vmalloced areas | 553 | vmallocinfo Show vmalloced areas |
| @@ -767,6 +767,7 @@ The "Locked" indicates whether the mapping is locked in memory or not. · 213 unmodified lines | |||
| 767 | 767 | ||
| 768 | MemTotal: 16344972 kB | 768 | MemTotal: 16344972 kB |
| 769 | MemFree: 13634064 kB | 769 | MemFree: 13634064 kB |
| 770 | MemAvailable: 14836172 kB | ||
| 770 | Buffers: 3656 kB | 771 | Buffers: 3656 kB |
| 771 | Cached: 1195708 kB | 772 | Cached: 1195708 kB |
| 772 | SwapCached: 0 kB | 773 | SwapCached: 0 kB |
| @@ -799,6 +800,14 @@ AnonHugePages: 49152 kB · 26 unmodified lines | |||
| 799 | MemTotal: Total usable ram (i.e. physical ram minus a few reserved | 800 | MemTotal: Total usable ram (i.e. physical ram minus a few reserved |
| 800 | bits and the kernel binary code) | 801 | bits and the kernel binary code) |
| 801 | MemFree: The sum of LowFree+HighFree | 802 | MemFree: The sum of LowFree+HighFree |
| 803 | MemAvailable: An estimate of how much memory is available for starting new | ||
| 804 | applications, without swapping. Calculated from MemFree, | ||
| 805 | SReclaimable, the size of the file LRU lists, and the low | ||
| 806 | watermarks in each zone. | ||
| 807 | The estimate takes into account that the system needs some | ||
| 808 | page cache to function well, and that not all reclaimable | ||
| 809 | slab will be reclaimable, due to items being in use. The | ||
| 810 | impact of those factors will vary from system to system. | ||
| 802 | Buffers: Relatively temporary storage for raw disk blocks | 811 | Buffers: Relatively temporary storage for raw disk blocks |
| 803 | shouldn't get tremendously large (20MB or so) | 812 | shouldn't get tremendously large (20MB or so) |
| 804 | Cached: in-memory cache for files read from the disk (the | 813 | Cached: in-memory cache for files read from the disk (the |
| @@ -1377,8 +1386,8 @@ may allocate from based on an estimation of its current memory and swap use. · 572 unmodified lines | |||
| 1377 | For example, if a task is using all allowed memory, its badness score will be | 1386 | For example, if a task is using all allowed memory, its badness score will be |
| 1378 | 1000. If it is using half of its allowed memory, its score will be 500. | 1387 | 1000. If it is using half of its allowed memory, its score will be 500. |
| 1379 | 1388 | ||
| 1380 | There is an additional factor included in the badness score: root | 1389 | There is an additional factor included in the badness score: the current memory |
| 1381 | processes are given 3% extra memory over other tasks. | 1390 | and swap usage is discounted by 3% for root processes. |
| 1382 | 1391 | ||
| 1383 | The amount of "allowed" memory depends on the context in which the oom killer | 1392 | The amount of "allowed" memory depends on the context in which the oom killer |
| 1384 | was called. If it is due to the memory assigned to the allocating task's cpuset | 1393 | was called. If it is due to the memory assigned to the allocating task's cpuset |
| @@ -108,12 +108,12 @@ static DEVICE_ATTR(foo, S_IWUSR | S_IRUGO, show_foo, store_foo); · 107 unmodified lines | |||
| 108 | is equivalent to doing: | 108 | is equivalent to doing: |
| 109 | 109 | ||
| 110 | static struct device_attribute dev_attr_foo = { | 110 | static struct device_attribute dev_attr_foo = { |
| 111 | .attr = { | 111 | .attr = { |
| 112 | .name = "foo", | 112 | .name = "foo", |
| 113 | .mode = S_IWUSR | S_IRUGO, | 113 | .mode = S_IWUSR | S_IRUGO, |
| 114 | .show = show_foo, | ||
| 115 | .store = store_foo, | ||
| 116 | }, | 114 | }, |
| 115 | .show = show_foo, | ||
| 116 | .store = store_foo, | ||
| 117 | }; | 117 | }; |
| 118 | 118 | ||
| 119 | 119 | ||
| @@ -782,7 +782,7 @@ struct file_operations · 781 unmodified lines | |||
| 782 | ---------------------- | 782 | ---------------------- |
| 783 | 783 | ||
| 784 | This describes how the VFS can manipulate an open file. As of kernel | 784 | This describes how the VFS can manipulate an open file. As of kernel |
| 785 | 3.5, the following members are defined: | 785 | 3.12, the following members are defined: |
| 786 | 786 | ||
| 787 | struct file_operations { | 787 | struct file_operations { |
| 788 | struct module *owner; | 788 | struct module *owner; |
| @@ -803,9 +803,6 @@ struct file_operations { · 14 unmodified lines | |||
| 803 | int (*aio_fsync) (struct kiocb *, int datasync); | 803 | int (*aio_fsync) (struct kiocb *, int datasync); |
| 804 | int (*fasync) (int, struct file *, int); | 804 | int (*fasync) (int, struct file *, int); |
| 805 | int (*lock) (struct file *, int, struct file_lock *); | 805 | int (*lock) (struct file *, int, struct file_lock *); |
| 806 | ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *); | ||
| 807 | ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *); | ||
| 808 | ssize_t (*sendfile) (struct file *, loff_t *, size_t, read_actor_t, void *); | ||
| 809 | ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int); | 806 | ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int); |
| 810 | unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); | 807 | unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); |
| 811 | int (*check_flags)(int); | 808 | int (*check_flags)(int); |
| @@ -814,6 +811,7 @@ struct file_operations { · 2 unmodified lines | |||
| 814 | ssize_t (*splice_read)(struct file *, struct pipe_inode_info *, size_t, unsigned int); | 811 | ssize_t (*splice_read)(struct file *, struct pipe_inode_info *, size_t, unsigned int); |
| 815 | int (*setlease)(struct file *, long arg, struct file_lock **); | 812 | int (*setlease)(struct file *, long arg, struct file_lock **); |
| 816 | long (*fallocate)(struct file *, int mode, loff_t offset, loff_t len); | 813 | long (*fallocate)(struct file *, int mode, loff_t offset, loff_t len); |
| 814 | int (*show_fdinfo)(struct seq_file *m, struct file *f); | ||
| 817 | }; | 815 | }; |
| 818 | 816 | ||
| 819 | Again, all methods are called without any locks being held, unless | 817 | Again, all methods are called without any locks being held, unless |
| @@ -864,12 +862,6 @@ otherwise noted. · 44 unmodified lines | |||
| 864 | lock: called by the fcntl(2) system call for F_GETLK, F_SETLK, and F_SETLKW | 862 | lock: called by the fcntl(2) system call for F_GETLK, F_SETLK, and F_SETLKW |
| 865 | commands | 863 | commands |
| 866 | 864 | ||
| 867 | readv: called by the readv(2) system call | ||
| 868 | |||
| 869 | writev: called by the writev(2) system call | ||
| 870 | |||
| 871 | sendfile: called by the sendfile(2) system call | ||
| 872 | |||
| 873 | get_unmapped_area: called by the mmap(2) system call | 865 | get_unmapped_area: called by the mmap(2) system call |
| 874 | 866 | ||
| 875 | check_flags: called by the fcntl(2) system call for F_SETFL command | 867 | check_flags: called by the fcntl(2) system call for F_SETFL command |
| @@ -72,10 +72,11 @@ where · 71 unmodified lines | |||
| 72 | 72 | ||
| 73 | - chip_label is the label of the gpiod_chip instance providing the GPIO | 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 | 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 | 75 | - dev_id is the identifier of the device that will make use of this GPIO. It |
| 76 | NULL, the GPIO will be available to all devices. | 76 | can be NULL, in which case it will be matched for calls to gpiod_get() |
| 77 | with a NULL device. | ||
| 77 | - con_id is the name of the GPIO function from the device point of view. It | 78 | - con_id is the name of the GPIO function from the device point of view. It |
| 78 | can be NULL. | 79 | can be NULL, in which case it will match any function. |
| 79 | - idx is the index of the GPIO within the function. | 80 | - idx is the index of the GPIO within the function. |
| 80 | - flags is defined to specify the following properties: | 81 | - flags is defined to specify the following properties: |
| 81 | * GPIOF_ACTIVE_LOW - to configure the GPIO as active-low | 82 | * GPIOF_ACTIVE_LOW - to configure the GPIO as active-low |
| @@ -86,18 +87,23 @@ In the future, these flags might be extended to support more properties. · 4 unmodified lines | |||
| 86 | 87 | ||
| 87 | Note that GPIO_LOOKUP() is just a shortcut to GPIO_LOOKUP_IDX() where idx = 0. | 88 | Note that GPIO_LOOKUP() is just a shortcut to GPIO_LOOKUP_IDX() where idx = 0. |
| 88 | 89 | ||
| 89 | A lookup table can then be defined as follows: | 90 | A lookup table can then be defined as follows, with an empty entry defining its |
| 91 | end: | ||
| 90 | 92 | ||
| 91 | struct gpiod_lookup gpios_table[] = { | 93 | struct gpiod_lookup_table gpios_table = { |
| 92 | GPIO_LOOKUP_IDX("gpio.0", 15, "foo.0", "led", 0, GPIO_ACTIVE_HIGH), | 94 | .dev_id = "foo.0", |
| 93 | GPIO_LOOKUP_IDX("gpio.0", 16, "foo.0", "led", 1, GPIO_ACTIVE_HIGH), | 95 | .table = { |
| 94 | GPIO_LOOKUP_IDX("gpio.0", 17, "foo.0", "led", 2, GPIO_ACTIVE_HIGH), | 96 | GPIO_LOOKUP_IDX("gpio.0", 15, "led", 0, GPIO_ACTIVE_HIGH), |
| 95 | GPIO_LOOKUP("gpio.0", 1, "foo.0", "power", GPIO_ACTIVE_LOW), | 97 | GPIO_LOOKUP_IDX("gpio.0", 16, "led", 1, GPIO_ACTIVE_HIGH), |
| 96 | }; | 98 | GPIO_LOOKUP_IDX("gpio.0", 17, "led", 2, GPIO_ACTIVE_HIGH), |
| 99 | GPIO_LOOKUP("gpio.0", 1, "power", GPIO_ACTIVE_LOW), | ||
| 100 | { }, | ||
| 101 | }, | ||
| 102 | }; | ||
| 97 | 103 | ||
| 98 | And the table can be added by the board code as follows: | 104 | And the table can be added by the board code as follows: |
| 99 | 105 | ||
| 100 | gpiod_add_table(gpios_table, ARRAY_SIZE(gpios_table)); | 106 | gpiod_add_lookup_table(&gpios_table); |
| 101 | 107 | ||
| 102 | The driver controlling "foo.0" will then be able to obtain its GPIOs as follows: | 108 | The driver controlling "foo.0" will then be able to obtain its GPIOs as follows: |
| 103 | 109 | ||
| @@ -38,7 +38,11 @@ device that displays digits), an additional index argument can be specified: · 37 unmodified lines | |||
| 38 | const char *con_id, unsigned int idx) | 38 | const char *con_id, unsigned int idx) |
| 39 | 39 | ||
| 40 | Both functions return either a valid GPIO descriptor, or an error code checkable | 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. | 41 | with IS_ERR() (they will never return a NULL pointer). -ENOENT will be returned |
| 42 | if and only if no GPIO has been assigned to the device/function/index triplet, | ||
| 43 | other error codes are used for cases where a GPIO has been assigned but an error | ||
| 44 | occured while trying to acquire it. This is useful to discriminate between mere | ||
| 45 | errors and an absence of GPIO for optional GPIO parameters. | ||
| 42 | 46 | ||
| 43 | Device-managed variants of these functions are also defined: | 47 | Device-managed variants of these functions are also defined: |
| 44 | 48 | ||
| @@ -18,7 +18,7 @@ The NE1619 presents some differences with the original ADM1025: · 17 unmodified lines | |||
| 18 | 18 | ||
| 19 | Authors: | 19 | Authors: |
| 20 | Chen-Yuan Wu <gwu@esoft.com>, | 20 | Chen-Yuan Wu <gwu@esoft.com>, |
| 21 | Jean Delvare <khali@linux-fr.org> | 21 | Jean Delvare <jdelvare@suse.de> |
| 22 | 22 | ||
| 23 | Description | 23 | Description |
| 24 | ----------- | 24 | ----------- |
| @@ -16,7 +16,7 @@ Supported chips: · 15 unmodified lines | |||
| 16 | 16 | ||
| 17 | Authors: | 17 | Authors: |
| 18 | Alexandre d'Alton <alex@alexdalton.org> | 18 | Alexandre d'Alton <alex@alexdalton.org> |
| 19 | Jean Delvare <khali@linux-fr.org> | 19 | Jean Delvare <jdelvare@suse.de> |
| 20 | 20 | ||
| 21 | Description | 21 | Description |
| 22 | ----------- | 22 | ----------- |
| @@ -25,7 +25,7 @@ Authors: · 24 unmodified lines | |||
| 25 | Philip Edelbrock <phil@netroedge.com>, | 25 | Philip Edelbrock <phil@netroedge.com>, |
| 26 | Michiel Rook <michiel@grendelproject.nl>, | 26 | Michiel Rook <michiel@grendelproject.nl>, |
| 27 | Grant Coady <gcoady.lk@gmail.com> with guidance | 27 | Grant Coady <gcoady.lk@gmail.com> with guidance |
| 28 | from Jean Delvare <khali@linux-fr.org> | 28 | from Jean Delvare <jdelvare@suse.de> |
| 29 | 29 | ||
| 30 | Interface | 30 | Interface |
| 31 | --------- | 31 | --------- |
| @@ -31,7 +31,7 @@ Authors: · 30 unmodified lines | |||
| 31 | Christian W. Zuckschwerdt <zany@triq.net> | 31 | Christian W. Zuckschwerdt <zany@triq.net> |
| 32 | valuable contributions by Jan M. Sendler <sendler@sendler.de> | 32 | valuable contributions by Jan M. Sendler <sendler@sendler.de> |
| 33 | ported to 2.6 by Aurelien Jarno <aurelien@aurel32.net> | 33 | ported to 2.6 by Aurelien Jarno <aurelien@aurel32.net> |
| 34 | with the help of Jean Delvare <khali@linux-fr.org> | 34 | with the help of Jean Delvare <jdelvare@suse.de> |
| 35 | 35 | ||
| 36 | Module Parameters | 36 | Module Parameters |
| 37 | ------------------ | 37 | ------------------ |
| @@ -7,7 +7,7 @@ Supported chips: · 6 unmodified lines | |||
| 7 | Addresses scanned: I2C 0x2c, 0x2d, 0x2e | 7 | Addresses scanned: I2C 0x2c, 0x2d, 0x2e |
| 8 | Datasheet: Not public | 8 | Datasheet: Not public |
| 9 | 9 | ||
| 10 | Author: Jean Delvare <khali@linux-fr.org> | 10 | Author: Jean Delvare <jdelvare@suse.de> |
| 11 | 11 | ||
| 12 | 12 | ||
| 13 | Description | 13 | Description |
| @@ -15,7 +15,7 @@ Supported chips: · 14 unmodified lines | |||
| 15 | Addresses scanned: none, address read from Super I/O config space | 15 | Addresses scanned: none, address read from Super I/O config space |
| 16 | Datasheet: Available from the Fintek website | 16 | Datasheet: Available from the Fintek website |
| 17 | 17 | ||
| 18 | Author: Jean Delvare <khali@linux-fr.org> | 18 | Author: Jean Delvare <jdelvare@suse.de> |
| 19 | 19 | ||
| 20 | Thanks to Denis Kieft from Barracuda Networks for the donation of a | 20 | Thanks to Denis Kieft from Barracuda Networks for the donation of a |
| 21 | test system (custom Jetway K8M8MS motherboard, with CPU and RAM) and | 21 | test system (custom Jetway K8M8MS motherboard, with CPU and RAM) and |
| @@ -14,7 +14,7 @@ Authors: · 13 unmodified lines | |||
| 14 | Frodo Looijaard <frodol@dds.nl>, | 14 | Frodo Looijaard <frodol@dds.nl>, |
| 15 | Kyösti Mälkki <kmalkki@cc.hut.fi> | 15 | Kyösti Mälkki <kmalkki@cc.hut.fi> |
| 16 | Hong-Gunn Chew <hglinux@gunnet.org> | 16 | Hong-Gunn Chew <hglinux@gunnet.org> |
| 17 | Jean Delvare <khali@linux-fr.org> | 17 | Jean Delvare <jdelvare@suse.de> |
| 18 | 18 | ||
| 19 | Description | 19 | Description |
| 20 | ----------- | 20 | ----------- |
| @@ -2,6 +2,10 @@ Kernel driver it87 · 1 unmodified line | |||
| 2 | ================== | 2 | ================== |
| 3 | 3 | ||
| 4 | Supported chips: | 4 | Supported chips: |
| 5 | * IT8603E | ||
| 6 | Prefix: 'it8603' | ||
| 7 | Addresses scanned: from Super I/O config space (8 I/O ports) | ||
| 8 | Datasheet: Not publicly available | ||
| 5 | * IT8705F | 9 | * IT8705F |
| 6 | Prefix: 'it87' | 10 | Prefix: 'it87' |
| 7 | Addresses scanned: from Super I/O config space (8 I/O ports) | 11 | Addresses scanned: from Super I/O config space (8 I/O ports) |
| @@ -53,7 +57,7 @@ Supported chips: · 45 unmodified lines | |||
| 53 | 57 | ||
| 54 | Authors: | 58 | Authors: |
| 55 | Christophe Gauthron | 59 | Christophe Gauthron |
| 56 | Jean Delvare <khali@linux-fr.org> | 60 | Jean Delvare <jdelvare@suse.de> |
| 57 | 61 | ||
| 58 | 62 | ||
| 59 | Module Parameters | 63 | Module Parameters |
| @@ -90,7 +94,7 @@ motherboard models. · 30 unmodified lines | |||
| 90 | Description | 94 | Description |
| 91 | ----------- | 95 | ----------- |
| 92 | 96 | ||
| 93 | This driver implements support for the IT8705F, IT8712F, IT8716F, | 97 | This driver implements support for the IT8603E, IT8705F, IT8712F, IT8716F, |
| 94 | IT8718F, IT8720F, IT8721F, IT8726F, IT8728F, IT8758E, IT8771E, IT8772E, | 98 | IT8718F, IT8720F, IT8721F, IT8726F, IT8728F, IT8758E, IT8771E, IT8772E, |
| 95 | IT8782F, IT8783E/F, and SiS950 chips. | 99 | IT8782F, IT8783E/F, and SiS950 chips. |
| 96 | 100 | ||
| @@ -129,6 +133,10 @@ to userspace applications. · 32 unmodified lines | |||
| 129 | The IT8728F, IT8771E, and IT8772E are considered compatible with the IT8721F, | 133 | The IT8728F, IT8771E, and IT8772E are considered compatible with the IT8721F, |
| 130 | until a datasheet becomes available (hopefully.) | 134 | until a datasheet becomes available (hopefully.) |
| 131 | 135 | ||
| 136 | The IT8603E is a custom design, hardware monitoring part is similar to | ||
| 137 | IT8728F. It only supports 16-bit fan mode, the full speed mode of the | ||
| 138 | fan is not supported (value 0 of pwmX_enable). | ||
| 139 | |||
| 132 | Temperatures are measured in degrees Celsius. An alarm is triggered once | 140 | Temperatures are measured in degrees Celsius. An alarm is triggered once |
| 133 | when the Overtemperature Shutdown limit is crossed. | 141 | when the Overtemperature Shutdown limit is crossed. |
| 134 | 142 | ||
| @@ -145,13 +153,16 @@ alarm is triggered if the voltage has crossed a programmable minimum or · 10 unmodified lines | |||
| 145 | maximum limit. Note that minimum in this case always means 'closest to | 153 | maximum limit. Note that minimum in this case always means 'closest to |
| 146 | zero'; this is important for negative voltage measurements. All voltage | 154 | zero'; this is important for negative voltage measurements. All voltage |
| 147 | inputs can measure voltages between 0 and 4.08 volts, with a resolution of | 155 | inputs can measure voltages between 0 and 4.08 volts, with a resolution of |
| 148 | 0.016 volt (except IT8721F/IT8758E and IT8728F: 0.012 volt.) The battery | 156 | 0.016 volt (except IT8603E, IT8721F/IT8758E and IT8728F: 0.012 volt.) The |
| 149 | voltage in8 does not have limit registers. | 157 | battery voltage in8 does not have limit registers. |
| 150 | 158 | ||
| 151 | On the IT8721F/IT8758E, IT8782F, and IT8783E/F, some voltage inputs are | 159 | On the IT8603E, IT8721F/IT8758E, IT8782F, and IT8783E/F, some voltage inputs |
| 152 | internal and scaled inside the chip (in7 (optional for IT8782F and IT8783E/F), | 160 | are internal and scaled inside the chip: |
| 153 | in8 and optionally in3). The driver handles this transparently so user-space | 161 | * in3 (optional) |
| 154 | doesn't have to care. | 162 | * in7 (optional for IT8782F and IT8783E/F) |
| 163 | * in8 (always) | ||
| 164 | * in9 (relevant for IT8603E only) | ||
| 165 | The driver handles this transparently so user-space doesn't have to care. | ||
| 155 | 166 | ||
| 156 | The VID lines (IT8712F/IT8716F/IT8718F/IT8720F) encode the core voltage value: | 167 | The VID lines (IT8712F/IT8716F/IT8718F/IT8720F) encode the core voltage value: |
| 157 | the voltage level your processor should work with. This is hardcoded by | 168 | the voltage level your processor should work with. This is hardcoded by |
| @@ -18,7 +18,7 @@ Supported chips: · 17 unmodified lines | |||
| 18 | Datasheet: Publicly available at the National Semiconductor website | 18 | Datasheet: Publicly available at the National Semiconductor website |
| 19 | http://www.national.com/pf/LM/LM96163.html | 19 | http://www.national.com/pf/LM/LM96163.html |
| 20 | 20 | ||
| 21 | Author: Jean Delvare <khali@linux-fr.org> | 21 | Author: Jean Delvare <jdelvare@suse.de> |
| 22 | 22 | ||
| 23 | Thanks go to Tyan and especially Alex Buckingham for setting up a remote | 23 | Thanks go to Tyan and especially Alex Buckingham for setting up a remote |
| 24 | access to their S4882 test platform for this driver. | 24 | access to their S4882 test platform for this driver. |
| @@ -43,5 +43,5 @@ data (0.03125 degrees celsius resolution). · 42 unmodified lines | |||
| 43 | 43 | ||
| 44 | Thanks to | 44 | Thanks to |
| 45 | --------- | 45 | --------- |
| 46 | Jean Delvare <khali@linux-fr.org> for mentoring the hwmon-side driver | 46 | Jean Delvare <jdelvare@suse.de> for mentoring the hwmon-side driver |
| 47 | development. | 47 | development. |
| @@ -14,7 +14,7 @@ Supported chips: · 13 unmodified lines | |||
| 14 | http://www.national.com/ | 14 | http://www.national.com/ |
| 15 | 15 | ||
| 16 | Authors: Frodo Looijaard <frodol@dds.nl> | 16 | Authors: Frodo Looijaard <frodol@dds.nl> |
| 17 | Jean Delvare <khali@linux-fr.org> | 17 | Jean Delvare <jdelvare@suse.de> |
| 18 | 18 | ||
| 19 | Description | 19 | Description |
| 20 | ----------- | 20 | ----------- |
| @@ -13,7 +13,7 @@ Supported chips: · 12 unmodified lines | |||
| 13 | http://www.national.com/pf/LM/LM82.html | 13 | http://www.national.com/pf/LM/LM82.html |
| 14 | 14 | ||
| 15 | 15 | ||
| 16 | Author: Jean Delvare <khali@linux-fr.org> | 16 | Author: Jean Delvare <jdelvare@suse.de> |
| 17 | 17 | ||
| 18 | Description | 18 | Description |
| 19 | ----------- | 19 | ----------- |
| @@ -17,7 +17,7 @@ Authors: · 16 unmodified lines | |||
| 17 | Mark Studebaker <mdsxyz123@yahoo.com>, | 17 | Mark Studebaker <mdsxyz123@yahoo.com>, |
| 18 | Stephen Rousset <stephen.rousset@rocketlogix.com>, | 18 | Stephen Rousset <stephen.rousset@rocketlogix.com>, |
| 19 | Dan Eaton <dan.eaton@rocketlogix.com>, | 19 | Dan Eaton <dan.eaton@rocketlogix.com>, |
| 20 | Jean Delvare <khali@linux-fr.org>, | 20 | Jean Delvare <jdelvare@suse.de>, |
| 21 | Original 2.6 port Jeff Oliver | 21 | Original 2.6 port Jeff Oliver |
| 22 | 22 | ||
| 23 | Description | 23 | Description |
| @@ -129,7 +129,7 @@ Supported chips: · 128 unmodified lines | |||
| 129 | http://www.ti.com/litv/pdf/sbos686 | 129 | http://www.ti.com/litv/pdf/sbos686 |
| 130 | 130 | ||
| 131 | 131 | ||
| 132 | Author: Jean Delvare <khali@linux-fr.org> | 132 | Author: Jean Delvare <jdelvare@suse.de> |
| 133 | 133 | ||
| 134 | 134 | ||
| 135 | Description | 135 | Description |
| @@ -19,7 +19,7 @@ Supported chips: · 18 unmodified lines | |||
| 19 | 19 | ||
| 20 | Authors: | 20 | Authors: |
| 21 | Abraham van der Merwe <abraham@2d3d.co.za> | 21 | Abraham van der Merwe <abraham@2d3d.co.za> |
| 22 | Jean Delvare <khali@linux-fr.org> | 22 | Jean Delvare <jdelvare@suse.de> |
| 23 | 23 | ||
| 24 | 24 | ||
| 25 | Description | 25 | Description |
| @@ -10,7 +10,7 @@ Supported chips: · 9 unmodified lines | |||
| 10 | 10 | ||
| 11 | Authors: | 11 | Authors: |
| 12 | Oleksij Rempel <bug-track@fisher-privat.net>, | 12 | Oleksij Rempel <bug-track@fisher-privat.net>, |
| 13 | Jean Delvare <khali@linux-fr.org> | 13 | Jean Delvare <jdelvare@suse.de> |
| 14 | 14 | ||
| 15 | Description | 15 | Description |
| 16 | ----------- | 16 | ----------- |
| @@ -7,7 +7,7 @@ Supported chips: · 6 unmodified lines | |||
| 7 | Addresses scanned: none, address read from Super I/O config space | 7 | Addresses scanned: none, address read from Super I/O config space |
| 8 | Datasheets: No longer available | 8 | Datasheets: No longer available |
| 9 | 9 | ||
| 10 | Authors: Jean Delvare <khali@linux-fr.org> | 10 | Authors: Jean Delvare <jdelvare@suse.de> |
| 11 | 11 | ||
| 12 | Thanks to Sandeep Mehta, Tonko de Rooy and Daniel Ceregatti for testing. | 12 | Thanks to Sandeep Mehta, Tonko de Rooy and Daniel Ceregatti for testing. |
| 13 | Thanks to Rudolf Marek for helping me investigate conversion issues. | 13 | Thanks to Rudolf Marek for helping me investigate conversion issues. |
| @@ -7,7 +7,7 @@ Supported chips: · 6 unmodified lines | |||
| 7 | Addresses scanned: none, address read from Super I/O config space | 7 | Addresses scanned: none, address read from Super I/O config space |
| 8 | Datasheet: No longer available | 8 | Datasheet: No longer available |
| 9 | 9 | ||
| 10 | Author: Jean Delvare <khali@linux-fr.org> | 10 | Author: Jean Delvare <jdelvare@suse.de> |
| 11 | 11 | ||
| 12 | Thanks to Amir Habibi at Candelis for setting up a test system, and to | 12 | Thanks to Amir Habibi at Candelis for setting up a test system, and to |
| 13 | Michael Kress for testing several iterations of this driver. | 13 | Michael Kress for testing several iterations of this driver. |
| @@ -11,7 +11,7 @@ Supported chips: · 10 unmodified lines | |||
| 11 | Authors: | 11 | Authors: |
| 12 | Aurelien Jarno <aurelien@aurel32.net> | 12 | Aurelien Jarno <aurelien@aurel32.net> |
| 13 | valuable contributions by Jan M. Sendler <sendler@sendler.de>, | 13 | valuable contributions by Jan M. Sendler <sendler@sendler.de>, |
| 14 | Jean Delvare <khali@linux-fr.org> | 14 | Jean Delvare <jdelvare@suse.de> |
| 15 | 15 | ||
| 16 | 16 | ||
| 17 | Description | 17 | Description |
| @@ -25,7 +25,7 @@ Authors: · 24 unmodified lines | |||
| 25 | With assistance from Bruce Allen <ballen@uwm.edu>, and his | 25 | With assistance from Bruce Allen <ballen@uwm.edu>, and his |
| 26 | fan.c program: http://www.lsc-group.phys.uwm.edu/%7Eballen/driver/ | 26 | fan.c program: http://www.lsc-group.phys.uwm.edu/%7Eballen/driver/ |
| 27 | Gabriele Gorla <gorlik@yahoo.com>, | 27 | Gabriele Gorla <gorlik@yahoo.com>, |
| 28 | Jean Delvare <khali@linux-fr.org> | 28 | Jean Delvare <jdelvare@suse.de> |
| 29 | 29 | ||
| 30 | Description | 30 | Description |
| 31 | ----------- | 31 | ----------- |
| @@ -36,7 +36,7 @@ Supported chips: · 35 unmodified lines | |||
| 36 | Datasheet: Available from Nuvoton upon request | 36 | Datasheet: Available from Nuvoton upon request |
| 37 | 37 | ||
| 38 | Authors: | 38 | Authors: |
| 39 | Jean Delvare <khali@linux-fr.org> | 39 | Jean Delvare <jdelvare@suse.de> |
| 40 | Yuan Mu (Winbond) | 40 | Yuan Mu (Winbond) |
| 41 | Rudolf Marek <r.marek@assembler.cz> | 41 | Rudolf Marek <r.marek@assembler.cz> |
| 42 | David Hubbard <david.c.hubbard@gmail.com> | 42 | David Hubbard <david.c.hubbard@gmail.com> |
| @@ -13,7 +13,7 @@ Supported chips: · 12 unmodified lines | |||
| 13 | 13 | ||
| 14 | Authors: | 14 | Authors: |
| 15 | Wei Song (Nuvoton) | 15 | Wei Song (Nuvoton) |
| 16 | Jean Delvare <khali@linux-fr.org> | 16 | Jean Delvare <jdelvare@suse.de> |
| 17 | 17 | ||
| 18 | 18 | ||
| 19 | Pin mapping | 19 | Pin mapping |
| @@ -9,7 +9,7 @@ Supported chips: · 8 unmodified lines | |||
| 9 | http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/W83L785TS-S.pdf | 9 | http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/W83L785TS-S.pdf |
| 10 | 10 | ||
| 11 | Authors: | 11 | Authors: |
| 12 | Jean Delvare <khali@linux-fr.org> | 12 | Jean Delvare <jdelvare@suse.de> |
| 13 | 13 | ||
| 14 | Description | 14 | Description |
| 15 | ----------- | 15 | ----------- |
| @@ -33,7 +33,7 @@ and the additional 'Integrated Device Function' controllers are supported. · 32 unmodified lines | |||
| 33 | 33 | ||
| 34 | Authors: | 34 | Authors: |
| 35 | Mark Studebaker <mdsxyz123@yahoo.com> | 35 | Mark Studebaker <mdsxyz123@yahoo.com> |
| 36 | Jean Delvare <khali@linux-fr.org> | 36 | Jean Delvare <jdelvare@suse.de> |
| 37 | 37 | ||
| 38 | 38 | ||
| 39 | Module Parameters | 39 | Module Parameters |
| @@ -1,6 +1,6 @@ | |||
| 1 | Kernel driver i2c-parport | 1 | Kernel driver i2c-parport |
| 2 | 2 | ||
| 3 | Author: Jean Delvare <khali@linux-fr.org> | 3 | Author: Jean Delvare <jdelvare@suse.de> |
| 4 | 4 | ||
| 5 | This is a unified driver for several i2c-over-parallel-port adapters, | 5 | This is a unified driver for several i2c-over-parallel-port adapters, |
| 6 | such as the ones made by Philips, Velleman or ELV. This driver is | 6 | such as the ones made by Philips, Velleman or ELV. This driver is |
| @@ -1,6 +1,6 @@ | |||
| 1 | Kernel driver i2c-parport-light | 1 | Kernel driver i2c-parport-light |
| 2 | 2 | ||
| 3 | Author: Jean Delvare <khali@linux-fr.org> | 3 | Author: Jean Delvare <jdelvare@suse.de> |
| 4 | 4 | ||
| 5 | This driver is a light version of i2c-parport. It doesn't depend | 5 | This driver is a light version of i2c-parport. It doesn't depend |
| 6 | on the parport driver, and uses direct I/O access instead. This might be | 6 | on the parport driver, and uses direct I/O access instead. This might be |
| @@ -13,7 +13,7 @@ Supported adapters: · 12 unmodified lines | |||
| 13 | * AMD SP5100 (SB700 derivative found on some server mainboards) | 13 | * AMD SP5100 (SB700 derivative found on some server mainboards) |
| 14 | Datasheet: Publicly available at the AMD website | 14 | Datasheet: Publicly available at the AMD website |
| 15 | http://support.amd.com/us/Embedded_TechDocs/44413.pdf | 15 | http://support.amd.com/us/Embedded_TechDocs/44413.pdf |
| 16 | * AMD Hudson-2, CZ | 16 | * AMD Hudson-2, ML, CZ |
| 17 | Datasheet: Not publicly available | 17 | Datasheet: Not publicly available |
| 18 | * Standard Microsystems (SMSC) SLC90E66 (Victory66) southbridge | 18 | * Standard Microsystems (SMSC) SLC90E66 (Victory66) southbridge |
| 19 | Datasheet: Publicly available at the SMSC website http://www.smsc.com | 19 | Datasheet: Publicly available at the SMSC website http://www.smsc.com |
| @@ -1,6 +1,6 @@ | |||
| 1 | Kernel driver i2c-taos-evm | 1 | Kernel driver i2c-taos-evm |
| 2 | 2 | ||
| 3 | Author: Jean Delvare <khali@linux-fr.org> | 3 | Author: Jean Delvare <jdelvare@suse.de> |
| 4 | 4 | ||
| 5 | This is a driver for the evaluation modules for TAOS I2C/SMBus chips. | 5 | This is a driver for the evaluation modules for TAOS I2C/SMBus chips. |
| 6 | The modules include an SMBus master with limited capabilities, which can | 6 | The modules include an SMBus master with limited capabilities, which can |
| @@ -28,7 +28,7 @@ Supported adapters: · 27 unmodified lines | |||
| 28 | Authors: | 28 | Authors: |
| 29 | Kyösti Mälkki <kmalkki@cc.hut.fi>, | 29 | Kyösti Mälkki <kmalkki@cc.hut.fi>, |
| 30 | Mark D. Studebaker <mdsxyz123@yahoo.com>, | 30 | Mark D. Studebaker <mdsxyz123@yahoo.com>, |
| 31 | Jean Delvare <khali@linux-fr.org> | 31 | Jean Delvare <jdelvare@suse.de> |
| 32 | 32 | ||
| 33 | Module Parameters | 33 | Module Parameters |
| 34 | ----------------- | 34 | ----------------- |
| @@ -64,9 +64,6 @@ EINVAL · 63 unmodified lines | |||
| 64 | detected before any I/O operation was started. Use a more | 64 | detected before any I/O operation was started. Use a more |
| 65 | specific fault code when you can. | 65 | specific fault code when you can. |
| 66 | 66 | ||
| 67 | One example would be a driver trying an SMBus Block Write | ||
| 68 | with block size outside the range of 1-32 bytes. | ||
| 69 | |||
| 70 | EIO | 67 | EIO |
| 71 | This rather vague error means something went wrong when | 68 | This rather vague error means something went wrong when |
| 72 | performing an I/O operation. Use a more specific fault | 69 | performing an I/O operation. Use a more specific fault |
| @@ -68,7 +68,7 @@ features that you need, first. How each feature is mapped is described below. · 67 unmodified lines | |||
| 68 | Legacy drivers often don't comply to these rules. As we cannot change them | 68 | Legacy drivers often don't comply to these rules. As we cannot change them |
| 69 | for backwards-compatibility reasons, you need to provide fixup mappings in | 69 | for backwards-compatibility reasons, you need to provide fixup mappings in |
| 70 | user-space yourself. Some of them might also provide module-options that | 70 | user-space yourself. Some of them might also provide module-options that |
| 71 | change the mappings so you can adivce users to set these. | 71 | change the mappings so you can advise users to set these. |
| 72 | 72 | ||
| 73 | All new gamepads are supposed to comply with this mapping. Please report any | 73 | All new gamepads are supposed to comply with this mapping. Please report any |
| 74 | bugs, if they don't. | 74 | bugs, if they don't. |
| @@ -150,10 +150,10 @@ Menu-Pad: · 75 unmodified lines | |||
| 150 | BTN_START | 150 | BTN_START |
| 151 | Many pads also have a third button which is branded or has a special symbol | 151 | Many pads also have a third button which is branded or has a special symbol |
| 152 | and meaning. Such buttons are mapped as BTN_MODE. Examples are the Nintendo | 152 | and meaning. Such buttons are mapped as BTN_MODE. Examples are the Nintendo |
| 153 | "HOME" button, the XBox "X"-button or Sony "P" button. | 153 | "HOME" button, the XBox "X"-button or Sony "PS" button. |
| 154 | 154 | ||
| 155 | Rumble: | 155 | Rumble: |
| 156 | Rumble is adverticed as FF_RUMBLE. | 156 | Rumble is advertised as FF_RUMBLE. |
| 157 | 157 | ||
| 158 | ---------------------------------------------------------------------------- | 158 | ---------------------------------------------------------------------------- |
| 159 | Written 2013 by David Herrmann <dh.herrmann@gmail.com> | 159 | Written 2013 by David Herrmann <dh.herrmann@gmail.com> |
| @@ -16,14 +16,14 @@ joystick. · 15 unmodified lines | |||
| 16 | 16 | ||
| 17 | By default, the device is opened in blocking mode. | 17 | By default, the device is opened in blocking mode. |
| 18 | 18 | ||
| 19 | int fd = open ("/dev/js0", O_RDONLY); | 19 | int fd = open ("/dev/input/js0", O_RDONLY); |
| 20 | 20 | ||
| 21 | 21 | ||
| 22 | 2. Event Reading | 22 | 2. Event Reading |
| 23 | ~~~~~~~~~~~~~~~~ | 23 | ~~~~~~~~~~~~~~~~ |
| 24 | 24 | ||
| 25 | struct js_event e; | 25 | struct js_event e; |
| 26 | read (fd, &e, sizeof(struct js_event)); | 26 | read (fd, &e, sizeof(e)); |
| 27 | 27 | ||
| 28 | where js_event is defined as | 28 | where js_event is defined as |
| 29 | 29 | ||
| @@ -34,8 +34,8 @@ where js_event is defined as · 4 unmodified lines | |||
| 34 | __u8 number; /* axis/button number */ | 34 | __u8 number; /* axis/button number */ |
| 35 | }; | 35 | }; |
| 36 | 36 | ||
| 37 | If the read is successful, it will return sizeof(struct js_event), unless | 37 | If the read is successful, it will return sizeof(e), unless you wanted to read |
| 38 | you wanted to read more than one event per read as described in section 3.1. | 38 | more than one event per read as described in section 3.1. |
| 39 | 39 | ||
| 40 | 40 | ||
| 41 | 2.1 js_event.type | 41 | 2.1 js_event.type |
| @@ -99,9 +99,9 @@ may work well if you handle JS_EVENT_INIT events separately, · 57 unmodified lines | |||
| 99 | 99 | ||
| 100 | if ((js_event.type & ~JS_EVENT_INIT) == JS_EVENT_BUTTON) { | 100 | if ((js_event.type & ~JS_EVENT_INIT) == JS_EVENT_BUTTON) { |
| 101 | if (js_event.value) | 101 | if (js_event.value) |
| 102 | buttons_state |= (1 << js_event.number); | 102 | buttons_state |= (1 << js_event.number); |
| 103 | else | 103 | else |
| 104 | buttons_state &= ~(1 << js_event.number); | 104 | buttons_state &= ~(1 << js_event.number); |
| 105 | } | 105 | } |
| 106 | 106 | ||
| 107 | is much safer since it can't lose sync with the driver. As you would | 107 | is much safer since it can't lose sync with the driver. As you would |
| @@ -144,14 +144,14 @@ all events on the queue (that is, until you get a -1). · 36 unmodified lines | |||
| 144 | For example, | 144 | For example, |
| 145 | 145 | ||
| 146 | while (1) { | 146 | while (1) { |
| 147 | while (read (fd, &e, sizeof(struct js_event)) > 0) { | 147 | while (read (fd, &e, sizeof(e)) > 0) { |
| 148 | process_event (e); | 148 | process_event (e); |
| 149 | } | 149 | } |
| 150 | /* EAGAIN is returned when the queue is empty */ | 150 | /* EAGAIN is returned when the queue is empty */ |
| 151 | if (errno != EAGAIN) { | 151 | if (errno != EAGAIN) { |
| 152 | /* error */ | 152 | /* error */ |
| 153 | } | 153 | } |
| 154 | /* do something interesting with processed events */ | 154 | /* do something interesting with processed events */ |
| 155 | } | 155 | } |
| 156 | 156 | ||
| 157 | One reason for emptying the queue is that if it gets full you'll start | 157 | One reason for emptying the queue is that if it gets full you'll start |
| @@ -181,7 +181,7 @@ at a time using the typical read(2) functionality. For that, you would · 23 unmodified lines | |||
| 181 | replace the read above with something like | 181 | replace the read above with something like |
| 182 | 182 | ||
| 183 | struct js_event mybuffer[0xff]; | 183 | struct js_event mybuffer[0xff]; |
| 184 | int i = read (fd, mybuffer, sizeof(struct mybuffer)); | 184 | int i = read (fd, mybuffer, sizeof(mybuffer)); |
| 185 | 185 | ||
| 186 | In this case, read would return -1 if the queue was empty, or some | 186 | In this case, read would return -1 if the queue was empty, or some |
| 187 | other value in which the number of events read would be i / | 187 | other value in which the number of events read would be i / |
| @@ -269,9 +269,9 @@ The driver offers backward compatibility, though. Here's a quick summary: · 81 unmodified lines | |||
| 269 | struct JS_DATA_TYPE js; | 269 | struct JS_DATA_TYPE js; |
| 270 | while (1) { | 270 | while (1) { |
| 271 | if (read (fd, &js, JS_RETURN) != JS_RETURN) { | 271 | if (read (fd, &js, JS_RETURN) != JS_RETURN) { |
| 272 | /* error */ | 272 | /* error */ |
| 273 | } | 273 | } |
| 274 | usleep (1000); | 274 | usleep (1000); |
| 275 | } | 275 | } |
| 276 | 276 | ||
| 277 | As you can figure out from the example, the read returns immediately, | 277 | As you can figure out from the example, the read returns immediately, |
| @@ -116,7 +116,7 @@ your needs: · 115 unmodified lines | |||
| 116 | For testing the joystick driver functionality, there is the jstest | 116 | For testing the joystick driver functionality, there is the jstest |
| 117 | program in the utilities package. You run it by typing: | 117 | program in the utilities package. You run it by typing: |
| 118 | 118 | ||
| 119 | jstest /dev/js0 | 119 | jstest /dev/input/js0 |
| 120 | 120 | ||
| 121 | And it should show a line with the joystick values, which update as you | 121 | And it should show a line with the joystick values, which update as you |
| 122 | move the stick, and press its buttons. The axes should all be zero when the | 122 | move the stick, and press its buttons. The axes should all be zero when the |
| @@ -136,7 +136,7 @@ joystick should be autocalibrated by the driver automagically. However, with · 13 unmodified lines | |||
| 136 | some analog joysticks, that either do not use linear resistors, or if you | 136 | some analog joysticks, that either do not use linear resistors, or if you |
| 137 | want better precision, you can use the jscal program | 137 | want better precision, you can use the jscal program |
| 138 | 138 | ||
| 139 | jscal -c /dev/js0 | 139 | jscal -c /dev/input/js0 |
| 140 | 140 | ||
| 141 | included in the joystick package to set better correction coefficients than | 141 | included in the joystick package to set better correction coefficients than |
| 142 | what the driver would choose itself. | 142 | what the driver would choose itself. |
| @@ -145,7 +145,7 @@ what the driver would choose itself. · 2 unmodified lines | |||
| 145 | calibration using the jstest command, and if you do, you then can save the | 145 | calibration using the jstest command, and if you do, you then can save the |
| 146 | correction coefficients into a file | 146 | correction coefficients into a file |
| 147 | 147 | ||
| 148 | jscal -p /dev/js0 > /etc/joystick.cal | 148 | jscal -p /dev/input/js0 > /etc/joystick.cal |
| 149 | 149 | ||
| 150 | And add a line to your rc script executing that file | 150 | And add a line to your rc script executing that file |
| 151 | 151 | ||
| @@ -556,7 +556,7 @@ interface, and "old" for the "0.x" interface. You run it by typing: · 404 unmodified lines | |||
| 556 | 556 | ||
| 557 | 5. FAQ | 557 | 5. FAQ |
| 558 | ~~~~~~ | 558 | ~~~~~~ |
| 559 | Q: Running 'jstest /dev/js0' results in "File not found" error. What's the | 559 | Q: Running 'jstest /dev/input/js0' results in "File not found" error. What's the |
| 560 | cause? | 560 | cause? |
| 561 | A: The device files don't exist. Create them (see section 2.2). | 561 | A: The device files don't exist. Create them (see section 2.2). |
| 562 | 562 | ||
| @@ -38,7 +38,7 @@ maps are more efficient: · 37 unmodified lines | |||
| 38 | 38 | ||
| 39 | void io_mapping_unmap_atomic(void *vaddr) | 39 | void io_mapping_unmap_atomic(void *vaddr) |
| 40 | 40 | ||
| 41 | 'vaddr' must be the the value returned by the last | 41 | 'vaddr' must be the value returned by the last |
| 42 | io_mapping_map_atomic_wc call. This unmaps the specified | 42 | io_mapping_map_atomic_wc call. This unmaps the specified |
| 43 | page and allows the task to sleep once again. | 43 | page and allows the task to sleep once again. |
| 44 | 44 | ||
| @@ -73,6 +73,7 @@ Code Seq#(hex) Include File Comments · 72 unmodified lines | |||
| 73 | 0x09 all linux/raid/md_u.h | 73 | 0x09 all linux/raid/md_u.h |
| 74 | 0x10 00-0F drivers/char/s390/vmcp.h | 74 | 0x10 00-0F drivers/char/s390/vmcp.h |
| 75 | 0x10 10-1F arch/s390/include/uapi/sclp_ctl.h | 75 | 0x10 10-1F arch/s390/include/uapi/sclp_ctl.h |
| 76 | 0x10 20-2F arch/s390/include/uapi/asm/hypfs.h | ||
| 76 | 0x12 all linux/fs.h | 77 | 0x12 all linux/fs.h |
| 77 | linux/blkpg.h | 78 | linux/blkpg.h |
| 78 | 0x1b all InfiniBand Subsystem <http://infiniband.sourceforge.net/> | 79 | 0x1b all InfiniBand Subsystem <http://infiniband.sourceforge.net/> |
| @@ -149,7 +149,7 @@ linux-api@ver.kernel.org に送ることを勧めます。 · 148 unmodified lines | |||
| 149 | この他にパッチを作る方法についてのよくできた記述は- | 149 | この他にパッチを作る方法についてのよくできた記述は- |
| 150 | 150 | ||
| 151 | "The Perfect Patch" | 151 | "The Perfect Patch" |
| 152 | http://userweb.kernel.org/~akpm/stuff/tpp.txt | 152 | http://www.ozlabs.org/~akpm/stuff/tpp.txt |
| 153 | "Linux kernel patch submission format" | 153 | "Linux kernel patch submission format" |
| 154 | http://linux.yyz.us/patch-format.html | 154 | http://linux.yyz.us/patch-format.html |
| 155 | 155 | ||
| @@ -622,7 +622,7 @@ Linux カーネルコミュニティは、一度に大量のコードの塊を · 466 unmodified lines | |||
| 622 | これについて全てがどのようにあるべきかについての詳細は、以下のドキュメ | 622 | これについて全てがどのようにあるべきかについての詳細は、以下のドキュメ |
| 623 | ントの ChangeLog セクションを見てください- | 623 | ントの ChangeLog セクションを見てください- |
| 624 | "The Perfect Patch" | 624 | "The Perfect Patch" |
| 625 | http://userweb.kernel.org/~akpm/stuff/tpp.txt | 625 | http://www.ozlabs.org/~akpm/stuff/tpp.txt |
| 626 | 626 | ||
| 627 | これらのどれもが、時にはとても困難です。これらの慣例を完璧に実施するに | 627 | これらのどれもが、時にはとても困難です。これらの慣例を完璧に実施するに |
| 628 | は数年かかるかもしれません。これは継続的な改善のプロセスであり、そのた | 628 | は数年かかるかもしれません。これは継続的な改善のプロセスであり、そのた |
| @@ -343,6 +343,9 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 342 unmodified lines | |||
| 343 | no: ACPI OperationRegions are not marked as reserved, | 343 | no: ACPI OperationRegions are not marked as reserved, |
| 344 | no further checks are performed. | 344 | no further checks are performed. |
| 345 | 345 | ||
| 346 | acpi_no_memhotplug [ACPI] Disable memory hotplug. Useful for kdump | ||
| 347 | kernels. | ||
| 348 | |||
| 346 | add_efi_memmap [EFI; X86] Include EFI memory map in | 349 | add_efi_memmap [EFI; X86] Include EFI memory map in |
| 347 | kernel's map of available physical RAM. | 350 | kernel's map of available physical RAM. |
| 348 | 351 | ||
| @@ -463,6 +466,22 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 114 unmodified lines | |||
| 463 | atkbd.softrepeat= [HW] | 466 | atkbd.softrepeat= [HW] |
| 464 | Use software keyboard repeat | 467 | Use software keyboard repeat |
| 465 | 468 | ||
| 469 | audit= [KNL] Enable the audit sub-system | ||
| 470 | Format: { "0" | "1" } (0 = disabled, 1 = enabled) | ||
| 471 | 0 - kernel audit is disabled and can not be enabled | ||
| 472 | until the next reboot | ||
| 473 | unset - kernel audit is initialized but disabled and | ||
| 474 | will be fully enabled by the userspace auditd. | ||
| 475 | 1 - kernel audit is initialized and partially enabled, | ||
| 476 | storing at most audit_backlog_limit messages in | ||
| 477 | RAM until it is fully enabled by the userspace | ||
| 478 | auditd. | ||
| 479 | Default: unset | ||
| 480 | |||
| 481 | audit_backlog_limit= [KNL] Set the audit queue size limit. | ||
| 482 | Format: <int> (must be >=0) | ||
| 483 | Default: 64 | ||
| 484 | |||
| 466 | baycom_epp= [HW,AX25] | 485 | baycom_epp= [HW,AX25] |
| 467 | Format: <io>,<mode> | 486 | Format: <io>,<mode> |
| 468 | 487 | ||
| @@ -515,7 +534,14 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 46 unmodified lines | |||
| 515 | 534 | ||
| 516 | cgroup_disable= [KNL] Disable a particular controller | 535 | cgroup_disable= [KNL] Disable a particular controller |
| 517 | Format: {name of the controller(s) to disable} | 536 | Format: {name of the controller(s) to disable} |
| 518 | {Currently supported controllers - "memory"} | 537 | The effects of cgroup_disable=foo are: |
| 538 | - foo isn't auto-mounted if you mount all cgroups in | ||
| 539 | a single hierarchy | ||
| 540 | - foo isn't visible as an individually mountable | ||
| 541 | subsystem | ||
| 542 | {Currently only "memory" controller deal with this and | ||
| 543 | cut the overhead, others just disable the usage. So | ||
| 544 | only cgroup_disable=memory is actually worthy} | ||
| 519 | 545 | ||
| 520 | checkreqprot [SELINUX] Set initial checkreqprot flag value. | 546 | checkreqprot [SELINUX] Set initial checkreqprot flag value. |
| 521 | Format: { "0" | "1" } | 547 | Format: { "0" | "1" } |
| @@ -1036,7 +1062,9 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 514 unmodified lines | |||
| 1036 | debugfs files are removed at module unload time. | 1062 | debugfs files are removed at module unload time. |
| 1037 | 1063 | ||
| 1038 | gpt [EFI] Forces disk with valid GPT signature but | 1064 | gpt [EFI] Forces disk with valid GPT signature but |
| 1039 | invalid Protective MBR to be treated as GPT. | 1065 | invalid Protective MBR to be treated as GPT. If the |
| 1066 | primary GPT is corrupted, it enables the backup/alternate | ||
| 1067 | GPT to be used instead. | ||
| 1040 | 1068 | ||
| 1041 | grcan.enable0= [HW] Configuration of physical interface 0. Determines | 1069 | grcan.enable0= [HW] Configuration of physical interface 0. Determines |
| 1042 | the "Enable 0" bit of the configuration register. | 1070 | the "Enable 0" bit of the configuration register. |
| @@ -1438,6 +1466,13 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 395 unmodified lines | |||
| 1438 | Valid arguments: on, off | 1466 | Valid arguments: on, off |
| 1439 | Default: on | 1467 | Default: on |
| 1440 | 1468 | ||
| 1469 | kmemcheck= [X86] Boot-time kmemcheck enable/disable/one-shot mode | ||
| 1470 | Valid arguments: 0, 1, 2 | ||
| 1471 | kmemcheck=0 (disabled) | ||
| 1472 | kmemcheck=1 (enabled) | ||
| 1473 | kmemcheck=2 (one-shot mode) | ||
| 1474 | Default: 2 (one-shot mode) | ||
| 1475 | |||
| 1441 | kstack=N [X86] Print N words from the kernel stack | 1476 | kstack=N [X86] Print N words from the kernel stack |
| 1442 | in oops dumps. | 1477 | in oops dumps. |
| 1443 | 1478 | ||
| @@ -3089,7 +3124,11 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 1645 unmodified lines | |||
| 3089 | controller if no parameter or 1 is given or disable | 3124 | controller if no parameter or 1 is given or disable |
| 3090 | it if 0 is given (See Documentation/cgroups/memory.txt) | 3125 | it if 0 is given (See Documentation/cgroups/memory.txt) |
| 3091 | 3126 | ||
| 3092 | swiotlb= [IA-64] Number of I/O TLB slabs | 3127 | swiotlb= [ARM,IA-64,PPC,MIPS,X86] |
| 3128 | Format: { <int> | force } | ||
| 3129 | <int> -- Number of I/O TLB slabs | ||
| 3130 | force -- force using of bounce buffers even if they | ||
| 3131 | wouldn't be automatically used by the kernel | ||
| 3093 | 3132 | ||
| 3094 | switches= [HW,M68k] | 3133 | switches= [HW,M68k] |
| 3095 | 3134 | ||
| @@ -1,20 +0,0 @@ | |||
| 1 | /*? | ||
| 2 | * Text: "Cryptographic device %x failed and was set offline\n" | ||
| 3 | * Severity: Error | ||
| 4 | * Parameter: | ||
| 5 | * @1: device index | ||
| 6 | * Description: | ||
| 7 | * A cryptographic device failed to process a cryptographic request. | ||
| 8 | * The cryptographic device driver could not correct the error and | ||
| 9 | * set the device offline. The application that issued the | ||
| 10 | * request received an indication that the request has failed. | ||
| 11 | * User action: | ||
| 12 | * Use the lszcrypt command to confirm that the cryptographic | ||
| 13 | * hardware is still configured to your LPAR or z/VM guest virtual | ||
| 14 | * machine. If the device is available to your Linux instance the | ||
| 15 | * command output contains a line that begins with 'card<device index>', | ||
| 16 | * where <device index> is the two-digit decimal number in the message text. | ||
| 17 | * After ensuring that the device is available, use the chzcrypt command to | ||
| 18 | * set it online again. | ||
| 19 | * If the error persists, contact your support organization. | ||
| 20 | */ | ||
| @@ -122,7 +122,7 @@ mtk.manpages@gmail.com의 메인테이너에게 보낼 것을 권장한다. · 121 unmodified lines | |||
| 122 | 122 | ||
| 123 | 올바른 패치들을 만드는 법에 관한 훌륭한 다른 문서들이 있다. | 123 | 올바른 패치들을 만드는 법에 관한 훌륭한 다른 문서들이 있다. |
| 124 | "The Perfect Patch" | 124 | "The Perfect Patch" |
| 125 | http://userweb.kernel.org/~akpm/stuff/tpp.txt | 125 | http://www.ozlabs.org/~akpm/stuff/tpp.txt |
| 126 | "Linux kernel patch submission format" | 126 | "Linux kernel patch submission format" |
| 127 | http://linux.yyz.us/patch-format.html | 127 | http://linux.yyz.us/patch-format.html |
| 128 | 128 | ||
| @@ -213,7 +213,7 @@ Documentation/DocBook/ 디렉토리 내에서 만들어지며 PDF, Postscript, H · 84 unmodified lines | |||
| 213 | 것은 Linux Cross-Reference project이며 그것은 자기 참조 방식이며 | 213 | 것은 Linux Cross-Reference project이며 그것은 자기 참조 방식이며 |
| 214 | 소스코드를 인덱스된 웹 페이지들의 형태로 보여준다. 최신의 멋진 커널 | 214 | 소스코드를 인덱스된 웹 페이지들의 형태로 보여준다. 최신의 멋진 커널 |
| 215 | 코드 저장소는 다음을 통하여 참조할 수 있다. | 215 | 코드 저장소는 다음을 통하여 참조할 수 있다. |
| 216 | http://users.sosdg.org/~qiyong/lxr/ | 216 | http://lxr.linux.no/+trees |
| 217 | 217 | ||
| 218 | 218 | ||
| 219 | 개발 프로세스 | 219 | 개발 프로세스 |
| @@ -222,20 +222,20 @@ Documentation/DocBook/ 디렉토리 내에서 만들어지며 PDF, Postscript, H · 2 unmodified lines | |||
| 222 | 리눅스 커널 개발 프로세스는 현재 몇몇 다른 메인 커널 "브랜치들"과 | 222 | 리눅스 커널 개발 프로세스는 현재 몇몇 다른 메인 커널 "브랜치들"과 |
| 223 | 서브시스템에 특화된 커널 브랜치들로 구성된다. 몇몇 다른 메인 | 223 | 서브시스템에 특화된 커널 브랜치들로 구성된다. 몇몇 다른 메인 |
| 224 | 브랜치들은 다음과 같다. | 224 | 브랜치들은 다음과 같다. |
| 225 | - main 2.6.x 커널 트리 | 225 | - main 3.x 커널 트리 |
| 226 | - 2.6.x.y - 안정된 커널 트리 | 226 | - 3.x.y - 안정된 커널 트리 |
| 227 | - 2.6.x -git 커널 패치들 | 227 | - 3.x -git 커널 패치들 |
| 228 | - 2.6.x -mm 커널 패치들 | ||
| 229 | - 서브시스템을 위한 커널 트리들과 패치들 | 228 | - 서브시스템을 위한 커널 트리들과 패치들 |
| 229 | - 3.x - 통합 테스트를 위한 next 커널 트리 | ||
| 230 | 230 | ||
| 231 | 2.6.x 커널 트리 | 231 | 3.x 커널 트리 |
| 232 | --------------- | 232 | --------------- |
| 233 | 233 | ||
| 234 | 2.6.x 커널들은 Linux Torvalds가 관리하며 kernel.org의 pub/linux/kernel/v2.6/ | 234 | 3.x 커널들은 Linux Torvalds가 관리하며 kernel.org의 pub/linux/kernel/v3.x/ |
| 235 | 디렉토리에서 참조될 수 있다.개발 프로세스는 다음과 같다. | 235 | 디렉토리에서 참조될 수 있다.개발 프로세스는 다음과 같다. |
| 236 | - 새로운 커널이 배포되자마자 2주의 시간이 주어진다. 이 기간동은 | 236 | - 새로운 커널이 배포되자마자 2주의 시간이 주어진다. 이 기간동은 |
| 237 | 메인테이너들은 큰 diff들을 Linus에게 제출할 수 있다. 대개 이 패치들은 | 237 | 메인테이너들은 큰 diff들을 Linus에게 제출할 수 있다. 대개 이 패치들은 |
| 238 | 몇 주 동안 -mm 커널내에 이미 있었던 것들이다. 큰 변경들을 제출하는 데 | 238 | 몇 주 동안 -next 커널내에 이미 있었던 것들이다. 큰 변경들을 제출하는 데 |
| 239 | 선호되는 방법은 git(커널의 소스 관리 툴, 더 많은 정보들은 http://git.or.cz/ | 239 | 선호되는 방법은 git(커널의 소스 관리 툴, 더 많은 정보들은 http://git.or.cz/ |
| 240 | 에서 참조할 수 있다)를 사용하는 것이지만 순수한 패치파일의 형식으로 보내는 | 240 | 에서 참조할 수 있다)를 사용하는 것이지만 순수한 패치파일의 형식으로 보내는 |
| 241 | 것도 무관하다. | 241 | 것도 무관하다. |
| @@ -262,20 +262,20 @@ Andrew Morton의 글이 있다. · 20 unmodified lines | |||
| 262 | 버그의 상황에 따라 배포되는 것이지 미리정해 놓은 시간에 따라 | 262 | 버그의 상황에 따라 배포되는 것이지 미리정해 놓은 시간에 따라 |
| 263 | 배포되는 것은 아니기 때문이다." | 263 | 배포되는 것은 아니기 때문이다." |
| 264 | 264 | ||
| 265 | 2.6.x.y - 안정 커널 트리 | 265 | 3.x.y - 안정 커널 트리 |
| 266 | ------------------------ | 266 | ------------------------ |
| 267 | 267 | ||
| 268 | 4 자리 숫자로 이루어진 버젼의 커널들은 -stable 커널들이다. 그것들은 2.6.x | 268 | 3 자리 숫자로 이루어진 버젼의 커널들은 -stable 커널들이다. 그것들은 3.x |
| 269 | 커널에서 발견된 큰 회귀들이나 보안 문제들 중 비교적 작고 중요한 수정들을 | 269 | 커널에서 발견된 큰 회귀들이나 보안 문제들 중 비교적 작고 중요한 수정들을 |
| 270 | 포함한다. | 270 | 포함한다. |
| 271 | 271 | ||
| 272 | 이것은 가장 최근의 안정적인 커널을 원하는 사용자에게 추천되는 브랜치이며, | 272 | 이것은 가장 최근의 안정적인 커널을 원하는 사용자에게 추천되는 브랜치이며, |
| 273 | 개발/실험적 버젼을 테스트하는 것을 돕고자 하는 사용자들과는 별로 관련이 없다. | 273 | 개발/실험적 버젼을 테스트하는 것을 돕고자 하는 사용자들과는 별로 관련이 없다. |
| 274 | 274 | ||
| 275 | 어떤 2.6.x.y 커널도 사용할 수 없다면 그때는 가장 높은 숫자의 2.6.x | 275 | 어떤 3.x.y 커널도 사용할 수 없다면 그때는 가장 높은 숫자의 3.x |
| 276 | 커널이 현재의 안정 커널이다. | 276 | 커널이 현재의 안정 커널이다. |
| 277 | 277 | ||
| 278 | 2.6.x.y는 "stable" 팀<stable@kernel.org>에 의해 관리되며 거의 매번 격주로 | 278 | 3.x.y는 "stable" 팀<stable@vger.kernel.org>에 의해 관리되며 거의 매번 격주로 |
| 279 | 배포된다. | 279 | 배포된다. |
| 280 | 280 | ||
| 281 | 커널 트리 문서들 내에 Documentation/stable_kernel_rules.txt 파일은 어떤 | 281 | 커널 트리 문서들 내에 Documentation/stable_kernel_rules.txt 파일은 어떤 |
| @@ -283,84 +283,46 @@ Andrew Morton의 글이 있다. · 1 unmodified line | |||
| 283 | 진행되는지를 설명한다. | 283 | 진행되는지를 설명한다. |
| 284 | 284 | ||
| 285 | 285 | ||
| 286 | 2.6.x -git 패치들 | 286 | 3.x -git 패치들 |
| 287 | ------------------ | 287 | ------------------ |
| 288 | git 저장소(그러므로 -git이라는 이름이 붙음)에는 날마다 관리되는 Linus의 | 288 | git 저장소(그러므로 -git이라는 이름이 붙음)에는 날마다 관리되는 Linus의 |
| 289 | 커널 트리의 snapshot 들이 있다. 이 패치들은 일반적으로 날마다 배포되며 | 289 | 커널 트리의 snapshot 들이 있다. 이 패치들은 일반적으로 날마다 배포되며 |
| 290 | Linus의 트리의 현재 상태를 나타낸다. 이 패치들은 정상적인지 조금도 | 290 | Linus의 트리의 현재 상태를 나타낸다. 이 패치들은 정상적인지 조금도 |
| 291 | 살펴보지 않고 자동적으로 생성된 것이므로 -rc 커널들 보다도 더 실험적이다. | 291 | 살펴보지 않고 자동적으로 생성된 것이므로 -rc 커널들 보다도 더 실험적이다. |
| 292 | 292 | ||
| 293 | 2.6.x -mm 커널 패치들 | ||
| 294 | --------------------- | ||
| 295 | Andrew Morton에 의해 배포된 실험적인 커널 패치들이다. Andrew는 모든 다른 | ||
| 296 | 서브시스템 커널 트리와 패치들을 가져와서 리눅스 커널 메일링 리스트로 | ||
| 297 | 온 많은 패치들과 한데 묶는다. 이 트리는 새로운 기능들과 패치들을 위한 | ||
| 298 | 장소를 제공하는 역할을 한다. 하나의 패치가 -mm에 한동안 있으면서 그 가치가 | ||
| 299 | 증명되게 되면 Andrew나 서브시스템 메인테이너는 그것을 메인라인에 포함시키기 | ||
| 300 | 위하여 Linus에게 보낸다. | ||
| 301 | |||
| 302 | 커널 트리에 포함하고 싶은 모든 새로운 패치들은 Linus에게 보내지기 전에 | ||
| 303 | -mm 트리에서 테스트를 하는 것을 적극 추천한다. | ||
| 304 | |||
| 305 | 이 커널들은 안정되게 사용할 시스템에서에 실행하는 것은 적합하지 않으며 | ||
| 306 | 다른 브랜치들의 어떤 것들보다 위험하다. | ||
| 307 | |||
| 308 | 여러분이 커널 개발 프로세스를 돕길 원한다면 이 커널 배포들을 사용하고 | ||
| 309 | 테스트한 후 어떤 문제를 발견하거나 또는 모든 것이 잘 동작한다면 리눅스 | ||
| 310 | 커널 메일링 리스트로 피드백을 해달라. | ||
| 311 | |||
| 312 | 이 커널들은 일반적으로 모든 다른 실험적인 패치들과 배포될 당시의 | ||
| 313 | 사용가능한 메인라인 -git 커널들의 몇몇 변경을 포함한다. | ||
| 314 | |||
| 315 | -mm 커널들은 정해진 일정대로 배포되지 않는다. 하지만 대개 몇몇 -mm 커널들은 | ||
| 316 | 각 -rc 커널(1부터 3이 흔함) 사이에서 배포된다. | ||
| 317 | |||
| 318 | 서브시스템 커널 트리들과 패치들 | 293 | 서브시스템 커널 트리들과 패치들 |
| 319 | ------------------------------- | 294 | ------------------------------- |
| 320 | 많은 다른 커널 서브시스템 개발자들은 커널의 다른 부분들에서 무슨 일이 | 295 | 다양한 커널 서브시스템의 메인테이너들 --- 그리고 많은 커널 서브시스템 개발자들 |
| 321 | 일어나고 있는지를 볼수 있도록 그들의 개발 트리를 공개한다. 이 트리들은 | 296 | --- 은 그들의 현재 개발 상태를 소스 저장소로 노출한다. 이를 통해 다른 사람들도 |
| 322 | 위에서 설명하였던 것 처럼 -mm 커널 배포들로 합쳐진다. | 297 | 커널의 다른 영역에 어떤 변화가 이루어지고 있는지 알 수 있다. 급속히 개발이 |
| 323 | 298 | 진행되는 영역이 있고 그렇지 않은 영역이 있으므로, 개발자는 다른 개발자가 제출한 | |
| 324 | 다음은 활용가능한 커널 트리들을 나열한다. | 299 | 수정 사항과 자신의 수정사항의 충돌이나 동일한 일을 동시에 두사람이 따로 |
| 325 | git trees: | 300 | 진행하는 사태를 방지하기 위해 급속히 개발이 진행되고 있는 영역에 작업의 |
| 326 | - Kbuild development tree, Sam Ravnborg < sam@ravnborg.org> | 301 | 베이스를 맞춰줄 것이 요구된다. |
| 327 | git.kernel.org:/pub/scm/linux/kernel/git/sam/kbuild.git | 302 | |
| 328 | 303 | 대부분의 이러한 저장소는 git 트리지만, git이 아닌 SCM으로 관리되거나, quilt | |
| 329 | - ACPI development tree, Len Brown <len.brown@intel.com > | 304 | 시리즈로 제공되는 패치들도 존재한다. 이러한 서브시스템 저장소들은 MAINTAINERS |
| 330 | git.kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git | 305 | 파일에 나열되어 있다. 대부분은 http://git.kernel.org 에서 볼 수 있다. |
| 331 | 306 | ||
| 332 | - Block development tree, Jens Axboe <jens.axboe@oracle.com> | 307 | 제안된 패치는 서브시스템 트리에 커밋되기 전에 메일링 리스트를 통해 |
| 333 | git.kernel.org:/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git | 308 | 리뷰된다(아래의 관련 섹션을 참고하기 바란다). 일부 커널 서브시스템의 경우, 이 |
| 334 | 309 | 리뷰 프로세스는 patchwork라는 도구를 통해 추적된다. patchwork은 등록된 패치와 | |
| 335 | - DRM development tree, Dave Airlie <airlied@linux.ie> | 310 | 패치에 대한 코멘트, 패치의 버전을 볼 수 있는 웹 인터페이스를 제공하고, |
| 336 | git.kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git | 311 | 메인테이너는 패치를 리뷰 중, 리뷰 통과, 또는 반려됨으로 표시할 수 있다. |
| 337 | 312 | 대부분의 이러한 patchwork 사이트는 http://patchwork.kernel.org/ 또는 | |
| 338 | - ia64 development tree, Tony Luck < tony.luck@intel.com> | 313 | http://patchwork.ozlabs.org/ 에 나열되어 있다. |
| 339 | git.kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git | 314 | |
| 340 | 315 | 3.x - 통합 테스트를 위한 next 커널 트리 | |
| 341 | - infiniband, Roland Dreier <rolandd@cisco.com > | 316 | ----------------------------------------- |
| 342 | git.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git | 317 | 서브시스템 트리들의 변경사항들은 mainline 3.x 트리로 들어오기 전에 통합 |
| 343 | 318 | 테스트를 거쳐야 한다. 이런 목적으로, 모든 서브시스템 트리의 변경사항을 거의 | |
| 344 | - libata, Jeff Garzik <jgarzik@pobox.com> | 319 | 매일 받아가는 특수한 테스트 저장소가 존재한다: |
| 345 | git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git | 320 | http://git.kernel.org/?p=linux/kernel/git/sfr/linux-next.git |
| 346 | 321 | http://linux.f-seidel.de/linux-next/pmwiki/ | |
| 347 | - network drivers, Jeff Garzik <jgarzik@pobox.com> | 322 | |
| 348 | git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git | 323 | 이런 식으로, -next 커널을 통해 다음 머지 기간에 메인라인 커널에 어떤 변경이 |
| 349 | 324 | 가해질 것인지 간략히 알 수 있다. 모험심 강한 테스터라면 -next 커널에서 테스트를 | |
| 350 | - pcmcia, Dominik Brodowski < linux@dominikbrodowski.net> | 325 | 수행하는 것도 좋을 것이다. |
| 351 | git.kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git | ||
| 352 | |||
| 353 | - SCSI, James Bottomley < James.Bottomley@SteelEye.com> | ||
| 354 | git.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git | ||
| 355 | |||
| 356 | quilt trees: | ||
| 357 | - USB, PCI, Driver Core, and I2C, Greg Kroah-Hartman < gregkh@linuxfoundation.org> | ||
| 358 | kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/ | ||
| 359 | - x86-64, partly i386, Andi Kleen < ak@suse.de> | ||
| 360 | ftp.firstfloor.org:/pub/ak/x86_64/quilt/ | ||
| 361 | |||
| 362 | 다른 커널 트리들은 http://kernel.org/git와 MAINTAINERS 파일에서 참조할 수 | ||
| 363 | 있다. | ||
| 364 | 326 | ||
| 365 | 버그 보고 | 327 | 버그 보고 |
| 366 | --------- | 328 | --------- |
| @@ -597,7 +559,7 @@ Pat이라는 이름을 가진 여자가 있을 수도 있는 것이다. 리눅 · 230 unmodified lines | |||
| 597 | 559 | ||
| 598 | 이것이 무엇인지 더 자세한 것을 알고 싶다면 다음 문서의 ChageLog 항을 봐라. | 560 | 이것이 무엇인지 더 자세한 것을 알고 싶다면 다음 문서의 ChageLog 항을 봐라. |
| 599 | "The Perfect Patch" | 561 | "The Perfect Patch" |
| 600 | http://userweb.kernel.org/~akpm/stuff/tpp.txt | 562 | http://www.ozlabs.org/~akpm/stuff/tpp.txt |
| 601 | 563 | ||
| 602 | 564 | ||
| 603 | 565 | ||
| @@ -342,7 +342,10 @@ kset use: · 341 unmodified lines | |||
| 342 | 342 | ||
| 343 | When you are finished with the kset, call: | 343 | When you are finished with the kset, call: |
| 344 | void kset_unregister(struct kset *kset); | 344 | void kset_unregister(struct kset *kset); |
| 345 | to destroy it. | 345 | to destroy it. This removes the kset from sysfs and decrements its reference |
| 346 | count. When the reference count goes to zero, the kset will be released. | ||
| 347 | Because other references to the kset may still exist, the release may happen | ||
| 348 | after kset_unregister() returns. | ||
| 346 | 349 | ||
| 347 | An example of using a kset can be seen in the | 350 | An example of using a kset can be seen in the |
| 348 | samples/kobject/kset-example.c file in the kernel tree. | 351 | samples/kobject/kset-example.c file in the kernel tree. |
| @@ -29,7 +29,7 @@ int set_unload_heads_path(char *device) · 28 unmodified lines | |||
| 29 | return -EINVAL; | 29 | return -EINVAL; |
| 30 | strncpy(devname, device + 5, sizeof(devname)); | 30 | strncpy(devname, device + 5, sizeof(devname)); |
| 31 | 31 | ||
| 32 | snprintf(unload_heads_path, sizeof(unload_heads_path), | 32 | snprintf(unload_heads_path, sizeof(unload_heads_path) - 1, |
| 33 | "/sys/block/%s/device/unload_heads", devname); | 33 | "/sys/block/%s/device/unload_heads", devname); |
| 34 | return 0; | 34 | return 0; |
| 35 | } | 35 | } |
| @@ -73,6 +73,10 @@ select_engine : Select which engine is used for running program · 72 unmodified lines | |||
| 73 | run_engine : Start program which is loaded via the firmware interface | 73 | run_engine : Start program which is loaded via the firmware interface |
| 74 | firmware : Load program data | 74 | firmware : Load program data |
| 75 | 75 | ||
| 76 | In case of LP5523, one more command is required, 'enginex_leds'. | ||
| 77 | It is used for selecting LED output(s) at each engine number. | ||
| 78 | In more details, please refer to 'leds-lp5523.txt'. | ||
| 79 | |||
| 76 | For example, run blinking pattern in engine #1 of LP5521 | 80 | For example, run blinking pattern in engine #1 of LP5521 |
| 77 | echo 1 > /sys/bus/i2c/devices/xxxx/select_engine | 81 | echo 1 > /sys/bus/i2c/devices/xxxx/select_engine |
| 78 | echo 1 > /sys/class/firmware/lp5521/loading | 82 | echo 1 > /sys/class/firmware/lp5521/loading |
| @@ -81,10 +85,12 @@ echo 0 > /sys/class/firmware/lp5521/loading · 2 unmodified lines | |||
| 81 | echo 1 > /sys/bus/i2c/devices/xxxx/run_engine | 85 | echo 1 > /sys/bus/i2c/devices/xxxx/run_engine |
| 82 | 86 | ||
| 83 | For example, run blinking pattern in engine #3 of LP55231 | 87 | For example, run blinking pattern in engine #3 of LP55231 |
| 88 | Two LEDs are configured as pattern output channels. | ||
| 84 | echo 3 > /sys/bus/i2c/devices/xxxx/select_engine | 89 | echo 3 > /sys/bus/i2c/devices/xxxx/select_engine |
| 85 | echo 1 > /sys/class/firmware/lp55231/loading | 90 | echo 1 > /sys/class/firmware/lp55231/loading |
| 86 | echo "9d0740ff7e0040007e00a0010000" > /sys/class/firmware/lp55231/data | 91 | echo "9d0740ff7e0040007e00a0010000" > /sys/class/firmware/lp55231/data |
| 87 | echo 0 > /sys/class/firmware/lp55231/loading | 92 | echo 0 > /sys/class/firmware/lp55231/loading |
| 93 | echo "000001100" > /sys/bus/i2c/devices/xxxx/engine3_leds | ||
| 88 | echo 1 > /sys/bus/i2c/devices/xxxx/run_engine | 94 | echo 1 > /sys/bus/i2c/devices/xxxx/run_engine |
| 89 | 95 | ||
| 90 | To start blinking patterns in engine #2 and #3 simultaneously, | 96 | To start blinking patterns in engine #2 and #3 simultaneously, |
| @@ -99,17 +105,19 @@ done · 8 unmodified lines | |||
| 99 | echo 1 > /sys/class/leds/red/device/run_engine | 105 | echo 1 > /sys/class/leds/red/device/run_engine |
| 100 | 106 | ||
| 101 | Here is another example for LP5523. | 107 | Here is another example for LP5523. |
| 108 | Full LED strings are selected by 'engine2_leds'. | ||
| 102 | echo 2 > /sys/bus/i2c/devices/xxxx/select_engine | 109 | echo 2 > /sys/bus/i2c/devices/xxxx/select_engine |
| 103 | echo 1 > /sys/class/firmware/lp5523/loading | 110 | echo 1 > /sys/class/firmware/lp5523/loading |
| 104 | echo "9d80400004ff05ff437f0000" > /sys/class/firmware/lp5523/data | 111 | echo "9d80400004ff05ff437f0000" > /sys/class/firmware/lp5523/data |
| 105 | echo 0 > /sys/class/firmware/lp5523/loading | 112 | echo 0 > /sys/class/firmware/lp5523/loading |
| 113 | echo "111111111" > /sys/bus/i2c/devices/xxxx/engine2_leds | ||
| 106 | echo 1 > /sys/bus/i2c/devices/xxxx/run_engine | 114 | echo 1 > /sys/bus/i2c/devices/xxxx/run_engine |
| 107 | 115 | ||
| 108 | As soon as 'loading' is set to 0, registered callback is called. | 116 | As soon as 'loading' is set to 0, registered callback is called. |
| 109 | Inside the callback, the selected engine is loaded and memory is updated. | 117 | Inside the callback, the selected engine is loaded and memory is updated. |
| 110 | To run programmed pattern, 'run_engine' attribute should be enabled. | 118 | To run programmed pattern, 'run_engine' attribute should be enabled. |
| 111 | 119 | ||
| 112 | The pattern sqeuence of LP8501 is same as LP5523. | 120 | The pattern sqeuence of LP8501 is similar to LP5523. |
| 113 | However pattern data is specific. | 121 | However pattern data is specific. |
| 114 | Ex 1) Engine 1 is used | 122 | Ex 1) Engine 1 is used |
| 115 | echo 1 > /sys/bus/i2c/devices/xxxx/select_engine | 123 | echo 1 > /sys/bus/i2c/devices/xxxx/select_engine |
| @@ -533,7 +533,7 @@ also have · 532 unmodified lines | |||
| 533 | found. The count in 'mismatch_cnt' is the number of sectors | 533 | found. The count in 'mismatch_cnt' is the number of sectors |
| 534 | that were re-written, or (for 'check') would have been | 534 | that were re-written, or (for 'check') would have been |
| 535 | re-written. As most raid levels work in units of pages rather | 535 | re-written. As most raid levels work in units of pages rather |
| 536 | than sectors, this my be larger than the number of actual errors | 536 | than sectors, this may be larger than the number of actual errors |
| 537 | by a factor of the number of sectors in a page. | 537 | by a factor of the number of sectors in a page. |
| 538 | 538 | ||
| 539 | bitmap_set_bits | 539 | bitmap_set_bits |
| @@ -38,7 +38,7 @@ Supported chips: · 37 unmodified lines | |||
| 38 | Authors: | 38 | Authors: |
| 39 | Frodo Looijaard <frodol@dds.nl>, | 39 | Frodo Looijaard <frodol@dds.nl>, |
| 40 | Philip Edelbrock <phil@netroedge.com>, | 40 | Philip Edelbrock <phil@netroedge.com>, |
| 41 | Jean Delvare <khali@linux-fr.org>, | 41 | Jean Delvare <jdelvare@suse.de>, |
| 42 | Greg Kroah-Hartman <greg@kroah.com>, | 42 | Greg Kroah-Hartman <greg@kroah.com>, |
| 43 | IBM Corp. | 43 | IBM Corp. |
| 44 | 44 | ||
| @@ -115,8 +115,6 @@ static bool mei_init(struct mei *me, const uuid_le *guid, · 114 unmodified lines | |||
| 115 | struct mei_client *cl; | 115 | struct mei_client *cl; |
| 116 | struct mei_connect_client_data data; | 116 | struct mei_connect_client_data data; |
| 117 | 117 | ||
| 118 | mei_deinit(me); | ||
| 119 | |||
| 120 | me->verbose = verbose; | 118 | me->verbose = verbose; |
| 121 | 119 | ||
| 122 | me->fd = open("/dev/mei", O_RDWR); | 120 | me->fd = open("/dev/mei", O_RDWR); |
| @@ -0,0 +1,113 @@ | |||
| 1 | |||
| 2 | About this document | ||
| 3 | =================== | ||
| 4 | |||
| 5 | Some notes about Marvell's NAND controller available in PXA and Armada 370/XP | ||
| 6 | SoC (aka NFCv1 and NFCv2), with an emphasis on the latter. | ||
| 7 | |||
| 8 | NFCv2 controller background | ||
| 9 | =========================== | ||
| 10 | |||
| 11 | The controller has a 2176 bytes FIFO buffer. Therefore, in order to support | ||
| 12 | larger pages, I/O operations on 4 KiB and 8 KiB pages is done with a set of | ||
| 13 | chunked transfers. | ||
| 14 | |||
| 15 | For instance, if we choose a 2048 data chunk and set "BCH" ECC (see below) | ||
| 16 | we'll have this layout in the pages: | ||
| 17 | |||
| 18 | ------------------------------------------------------------------------------ | ||
| 19 | | 2048B data | 32B spare | 30B ECC || 2048B data | 32B spare | 30B ECC | ... | | ||
| 20 | ------------------------------------------------------------------------------ | ||
| 21 | |||
| 22 | The driver reads the data and spare portions independently and builds an internal | ||
| 23 | buffer with this layout (in the 4 KiB page case): | ||
| 24 | |||
| 25 | ------------------------------------------ | ||
| 26 | | 4096B data | 64B spare | | ||
| 27 | ------------------------------------------ | ||
| 28 | |||
| 29 | Also, for the READOOB command the driver disables the ECC and reads a 'spare + ECC' | ||
| 30 | OOB, one per chunk read. | ||
| 31 | |||
| 32 | ------------------------------------------------------------------- | ||
| 33 | | 4096B data | 32B spare | 30B ECC | 32B spare | 30B ECC | | ||
| 34 | ------------------------------------------------------------------- | ||
| 35 | |||
| 36 | So, in order to achieve reading (for instance), we issue several READ0 commands | ||
| 37 | (with some additional controller-specific magic) and read two chunks of 2080B | ||
| 38 | (2048 data + 32 spare) each. | ||
| 39 | The driver accommodates this data to expose the NAND core a contiguous buffer | ||
| 40 | (4096 data + spare) or (4096 + spare + ECC + spare + ECC). | ||
| 41 | |||
| 42 | ECC | ||
| 43 | === | ||
| 44 | |||
| 45 | The controller has built-in hardware ECC capabilities. In addition it is | ||
| 46 | configurable between two modes: 1) Hamming, 2) BCH. | ||
| 47 | |||
| 48 | Note that the actual BCH mode: BCH-4 or BCH-8 will depend on the way | ||
| 49 | the controller is configured to transfer the data. | ||
| 50 | |||
| 51 | In the BCH mode the ECC code will be calculated for each transfered chunk | ||
| 52 | and expected to be located (when reading/programming) right after the spare | ||
| 53 | bytes as the figure above shows. | ||
| 54 | |||
| 55 | So, repeating the above scheme, a 2048B data chunk will be followed by 32B | ||
| 56 | spare, and then the ECC controller will read/write the ECC code (30B in | ||
| 57 | this case): | ||
| 58 | |||
| 59 | ------------------------------------ | ||
| 60 | | 2048B data | 32B spare | 30B ECC | | ||
| 61 | ------------------------------------ | ||
| 62 | |||
| 63 | If the ECC mode is 'BCH' then the ECC is *always* 30 bytes long. | ||
| 64 | If the ECC mode is 'Hamming' the ECC is 6 bytes long, for each 512B block. | ||
| 65 | So in Hamming mode, a 2048B page will have a 24B ECC. | ||
| 66 | |||
| 67 | Despite all of the above, the controller requires the driver to only read or | ||
| 68 | write in multiples of 8-bytes, because the data buffer is 64-bits. | ||
| 69 | |||
| 70 | OOB | ||
| 71 | === | ||
| 72 | |||
| 73 | Because of the above scheme, and because the "spare" OOB is really located in | ||
| 74 | the middle of a page, spare OOB cannot be read or write independently of the | ||
| 75 | data area. In other words, in order to read the OOB (aka READOOB), the entire | ||
| 76 | page (aka READ0) has to be read. | ||
| 77 | |||
| 78 | In the same sense, in order to write to the spare OOB the driver has to write | ||
| 79 | an *entire* page. | ||
| 80 | |||
| 81 | Factory bad blocks handling | ||
| 82 | =========================== | ||
| 83 | |||
| 84 | Given the ECC BCH requires to layout the device's pages in a split | ||
| 85 | data/OOB/data/OOB way, the controller has a view of the flash page that's | ||
| 86 | different from the specified (aka the manufacturer's) view. In other words, | ||
| 87 | |||
| 88 | Factory view: | ||
| 89 | |||
| 90 | ----------------------------------------------- | ||
| 91 | | Data |x OOB | | ||
| 92 | ----------------------------------------------- | ||
| 93 | |||
| 94 | Driver's view: | ||
| 95 | |||
| 96 | ----------------------------------------------- | ||
| 97 | | Data | OOB | Data x | OOB | | ||
| 98 | ----------------------------------------------- | ||
| 99 | |||
| 100 | It can be seen from the above, that the factory bad block marker must be | ||
| 101 | searched within the 'data' region, and not in the usual OOB region. | ||
| 102 | |||
| 103 | In addition, this means under regular usage the driver will write such | ||
| 104 | position (since it belongs to the data region) and every used block is | ||
| 105 | likely to be marked as bad. | ||
| 106 | |||
| 107 | For this reason, marking the block as bad in the OOB is explicitly | ||
| 108 | disabled by using the NAND_BBT_NO_OOB_BBM option in the driver. The rationale | ||
| 109 | for this is that there's no point in marking a block as bad, because good | ||
| 110 | blocks are also 'marked as bad' (in the OOB BBM sense) under normal usage. | ||
| 111 | |||
| 112 | Instead, the driver relies on the bad block table alone, and should only perform | ||
| 113 | the bad block scan on the very first time (when the device hasn't been used). | ||
| @@ -66,11 +66,10 @@ All mesh wide settings can be found in batman's own interface · 65 unmodified lines | |||
| 66 | folder: | 66 | folder: |
| 67 | 67 | ||
| 68 | # ls /sys/class/net/bat0/mesh/ | 68 | # ls /sys/class/net/bat0/mesh/ |
| 69 | # aggregated_ogms gw_bandwidth log_level | 69 | #aggregated_ogms distributed_arp_table gw_sel_class orig_interval |
| 70 | # ap_isolation gw_mode orig_interval | 70 | #ap_isolation fragmentation hop_penalty routing_algo |
| 71 | # bonding gw_sel_class routing_algo | 71 | #bonding gw_bandwidth isolation_mark vlan0 |
| 72 | # bridge_loop_avoidance hop_penalty fragmentation | 72 | #bridge_loop_avoidance gw_mode log_level |
| 73 | |||
| 74 | 73 | ||
| 75 | There is a special folder for debugging information: | 74 | There is a special folder for debugging information: |
| 76 | 75 | ||
| @@ -657,7 +657,8 @@ primary · 656 unmodified lines | |||
| 657 | one slave is preferred over another, e.g., when one slave has | 657 | one slave is preferred over another, e.g., when one slave has |
| 658 | higher throughput than another. | 658 | higher throughput than another. |
| 659 | 659 | ||
| 660 | The primary option is only valid for active-backup mode. | 660 | The primary option is only valid for active-backup(1), |
| 661 | balance-tlb (5) and balance-alb (6) mode. | ||
| 661 | 662 | ||
| 662 | primary_reselect | 663 | primary_reselect |
| 663 | 664 | ||
| @@ -853,6 +854,14 @@ resend_igmp · 189 unmodified lines | |||
| 853 | 854 | ||
| 854 | This option was added for bonding version 3.7.0. | 855 | This option was added for bonding version 3.7.0. |
| 855 | 856 | ||
| 857 | lp_interval | ||
| 858 | |||
| 859 | Specifies the number of seconds between instances where the bonding | ||
| 860 | driver sends learning packets to each slaves peer switch. | ||
| 861 | |||
| 862 | The valid range is 1 - 0x7fffffff; the default value is 1. This Option | ||
| 863 | has effect only in balance-tlb and balance-alb modes. | ||
| 864 | |||
| 856 | 3. Configuring Bonding Devices | 865 | 3. Configuring Bonding Devices |
| 857 | ============================== | 866 | ============================== |
| 858 | 867 | ||
| @@ -2,21 +2,20 @@ · 1 unmodified line | |||
| 2 | 2 | ||
| 3 | can.txt | 3 | can.txt |
| 4 | 4 | ||
| 5 | Readme file for the Controller Area Network Protocol Family (aka Socket CAN) | 5 | Readme file for the Controller Area Network Protocol Family (aka SocketCAN) |
| 6 | 6 | ||
| 7 | This file contains | 7 | This file contains |
| 8 | 8 | ||
| 9 | 1 Overview / What is Socket CAN | 9 | 1 Overview / What is SocketCAN |
| 10 | 10 | ||
| 11 | 2 Motivation / Why using the socket API | 11 | 2 Motivation / Why using the socket API |
| 12 | 12 | ||
| 13 | 3 Socket CAN concept | 13 | 3 SocketCAN concept |
| 14 | 3.1 receive lists | 14 | 3.1 receive lists |
| 15 | 3.2 local loopback of sent frames | 15 | 3.2 local loopback of sent frames |
| 16 | 3.3 network security issues (capabilities) | 16 | 3.3 network problem notifications |
| 17 | 3.4 network problem notifications | ||
| 18 | 17 | ||
| 19 | 4 How to use Socket CAN | 18 | 4 How to use SocketCAN |
| 20 | 4.1 RAW protocol sockets with can_filters (SOCK_RAW) | 19 | 4.1 RAW protocol sockets with can_filters (SOCK_RAW) |
| 21 | 4.1.1 RAW socket option CAN_RAW_FILTER | 20 | 4.1.1 RAW socket option CAN_RAW_FILTER |
| 22 | 4.1.2 RAW socket option CAN_RAW_ERR_FILTER | 21 | 4.1.2 RAW socket option CAN_RAW_ERR_FILTER |
| @@ -34,7 +33,7 @@ This file contains · 11 unmodified lines | |||
| 34 | 4.3 connected transport protocols (SOCK_SEQPACKET) | 33 | 4.3 connected transport protocols (SOCK_SEQPACKET) |
| 35 | 4.4 unconnected transport protocols (SOCK_DGRAM) | 34 | 4.4 unconnected transport protocols (SOCK_DGRAM) |
| 36 | 35 | ||
| 37 | 5 Socket CAN core module | 36 | 5 SocketCAN core module |
| 38 | 5.1 can.ko module params | 37 | 5.1 can.ko module params |
| 39 | 5.2 procfs content | 38 | 5.2 procfs content |
| 40 | 5.3 writing own CAN protocol modules | 39 | 5.3 writing own CAN protocol modules |
| @@ -51,20 +50,20 @@ This file contains · 10 unmodified lines | |||
| 51 | 6.6 CAN FD (flexible data rate) driver support | 50 | 6.6 CAN FD (flexible data rate) driver support |
| 52 | 6.7 supported CAN hardware | 51 | 6.7 supported CAN hardware |
| 53 | 52 | ||
| 54 | 7 Socket CAN resources | 53 | 7 SocketCAN resources |
| 55 | 54 | ||
| 56 | 8 Credits | 55 | 8 Credits |
| 57 | 56 | ||
| 58 | ============================================================================ | 57 | ============================================================================ |
| 59 | 58 | ||
| 60 | 1. Overview / What is Socket CAN | 59 | 1. Overview / What is SocketCAN |
| 61 | -------------------------------- | 60 | -------------------------------- |
| 62 | 61 | ||
| 63 | The socketcan package is an implementation of CAN protocols | 62 | The socketcan package is an implementation of CAN protocols |
| 64 | (Controller Area Network) for Linux. CAN is a networking technology | 63 | (Controller Area Network) for Linux. CAN is a networking technology |
| 65 | which has widespread use in automation, embedded devices, and | 64 | which has widespread use in automation, embedded devices, and |
| 66 | automotive fields. While there have been other CAN implementations | 65 | automotive fields. While there have been other CAN implementations |
| 67 | for Linux based on character devices, Socket CAN uses the Berkeley | 66 | for Linux based on character devices, SocketCAN uses the Berkeley |
| 68 | socket API, the Linux network stack and implements the CAN device | 67 | socket API, the Linux network stack and implements the CAN device |
| 69 | drivers as network interfaces. The CAN socket API has been designed | 68 | drivers as network interfaces. The CAN socket API has been designed |
| 70 | as similar as possible to the TCP/IP protocols to allow programmers, | 69 | as similar as possible to the TCP/IP protocols to allow programmers, |
| @@ -74,7 +73,7 @@ sockets. · 3 unmodified lines | |||
| 74 | 2. Motivation / Why using the socket API | 73 | 2. Motivation / Why using the socket API |
| 75 | ---------------------------------------- | 74 | ---------------------------------------- |
| 76 | 75 | ||
| 77 | There have been CAN implementations for Linux before Socket CAN so the | 76 | There have been CAN implementations for Linux before SocketCAN so the |
| 78 | question arises, why we have started another project. Most existing | 77 | question arises, why we have started another project. Most existing |
| 79 | implementations come as a device driver for some CAN hardware, they | 78 | implementations come as a device driver for some CAN hardware, they |
| 80 | are based on character devices and provide comparatively little | 79 | are based on character devices and provide comparatively little |
| @@ -89,10 +88,10 @@ the CAN controller requires employment of another device driver and · 8 unmodified lines | |||
| 89 | often the need for adaption of large parts of the application to the | 88 | often the need for adaption of large parts of the application to the |
| 90 | new driver's API. | 89 | new driver's API. |
| 91 | 90 | ||
| 92 | Socket CAN was designed to overcome all of these limitations. A new | 91 | SocketCAN was designed to overcome all of these limitations. A new |
| 93 | protocol family has been implemented which provides a socket interface | 92 | protocol family has been implemented which provides a socket interface |
| 94 | to user space applications and which builds upon the Linux network | 93 | to user space applications and which builds upon the Linux network |
| 95 | layer, so to use all of the provided queueing functionality. A device | 94 | layer, enabling use all of the provided queueing functionality. A device |
| 96 | driver for CAN controller hardware registers itself with the Linux | 95 | driver for CAN controller hardware registers itself with the Linux |
| 97 | network layer as a network device, so that CAN frames from the | 96 | network layer as a network device, so that CAN frames from the |
| 98 | controller can be passed up to the network layer and on to the CAN | 97 | controller can be passed up to the network layer and on to the CAN |
| @@ -146,15 +145,15 @@ solution for a couple of reasons: · 47 unmodified lines | |||
| 146 | providing an API for device drivers to register with. However, then | 145 | providing an API for device drivers to register with. However, then |
| 147 | it would be no more difficult, or may be even easier, to use the | 146 | it would be no more difficult, or may be even easier, to use the |
| 148 | networking framework provided by the Linux kernel, and this is what | 147 | networking framework provided by the Linux kernel, and this is what |
| 149 | Socket CAN does. | 148 | SocketCAN does. |
| 150 | 149 | ||
| 151 | The use of the networking framework of the Linux kernel is just the | 150 | The use of the networking framework of the Linux kernel is just the |
| 152 | natural and most appropriate way to implement CAN for Linux. | 151 | natural and most appropriate way to implement CAN for Linux. |
| 153 | 152 | ||
| 154 | 3. Socket CAN concept | 153 | 3. SocketCAN concept |
| 155 | --------------------- | 154 | --------------------- |
| 156 | 155 | ||
| 157 | As described in chapter 2 it is the main goal of Socket CAN to | 156 | As described in chapter 2 it is the main goal of SocketCAN to |
| 158 | provide a socket interface to user space applications which builds | 157 | provide a socket interface to user space applications which builds |
| 159 | upon the Linux network layer. In contrast to the commonly known | 158 | upon the Linux network layer. In contrast to the commonly known |
| 160 | TCP/IP and ethernet networking, the CAN bus is a broadcast-only(!) | 159 | TCP/IP and ethernet networking, the CAN bus is a broadcast-only(!) |
| @@ -168,11 +167,11 @@ solution for a couple of reasons: · 7 unmodified lines | |||
| 168 | 167 | ||
| 169 | The network transparent access of multiple applications leads to the | 168 | The network transparent access of multiple applications leads to the |
| 170 | problem that different applications may be interested in the same | 169 | problem that different applications may be interested in the same |
| 171 | CAN-IDs from the same CAN network interface. The Socket CAN core | 170 | CAN-IDs from the same CAN network interface. The SocketCAN core |
| 172 | module - which implements the protocol family CAN - provides several | 171 | module - which implements the protocol family CAN - provides several |
| 173 | high efficient receive lists for this reason. If e.g. a user space | 172 | high efficient receive lists for this reason. If e.g. a user space |
| 174 | application opens a CAN RAW socket, the raw protocol module itself | 173 | application opens a CAN RAW socket, the raw protocol module itself |
| 175 | requests the (range of) CAN-IDs from the Socket CAN core that are | 174 | requests the (range of) CAN-IDs from the SocketCAN core that are |
| 176 | requested by the user. The subscription and unsubscription of | 175 | requested by the user. The subscription and unsubscription of |
| 177 | CAN-IDs can be done for specific CAN interfaces or for all(!) known | 176 | CAN-IDs can be done for specific CAN interfaces or for all(!) known |
| 178 | CAN interfaces with the can_rx_(un)register() functions provided to | 177 | CAN interfaces with the can_rx_(un)register() functions provided to |
| @@ -217,21 +216,7 @@ solution for a couple of reasons: · 38 unmodified lines | |||
| 217 | * = you really like to have this when you're running analyser tools | 216 | * = you really like to have this when you're running analyser tools |
| 218 | like 'candump' or 'cansniffer' on the (same) node. | 217 | like 'candump' or 'cansniffer' on the (same) node. |
| 219 | 218 | ||
| 220 | 3.3 network security issues (capabilities) | 219 | 3.3 network problem notifications |
| 221 | |||
| 222 | The Controller Area Network is a local field bus transmitting only | ||
| 223 | broadcast messages without any routing and security concepts. | ||
| 224 | In the majority of cases the user application has to deal with | ||
| 225 | raw CAN frames. Therefore it might be reasonable NOT to restrict | ||
| 226 | the CAN access only to the user root, as known from other networks. | ||
| 227 | Since the currently implemented CAN_RAW and CAN_BCM sockets can only | ||
| 228 | send and receive frames to/from CAN interfaces it does not affect | ||
| 229 | security of others networks to allow all users to access the CAN. | ||
| 230 | To enable non-root users to access CAN_RAW and CAN_BCM protocol | ||
| 231 | sockets the Kconfig options CAN_RAW_USER and/or CAN_BCM_USER may be | ||
| 232 | selected at kernel compile time. | ||
| 233 | |||
| 234 | 3.4 network problem notifications | ||
| 235 | 220 | ||
| 236 | The use of the CAN bus may lead to several problems on the physical | 221 | The use of the CAN bus may lead to several problems on the physical |
| 237 | and media access control layer. Detecting and logging of these lower | 222 | and media access control layer. Detecting and logging of these lower |
| @@ -251,11 +236,11 @@ solution for a couple of reasons: · 13 unmodified lines | |||
| 251 | by default. The format of the CAN error message frame is briefly | 236 | by default. The format of the CAN error message frame is briefly |
| 252 | described in the Linux header file "include/linux/can/error.h". | 237 | described in the Linux header file "include/linux/can/error.h". |
| 253 | 238 | ||
| 254 | 4. How to use Socket CAN | 239 | 4. How to use SocketCAN |
| 255 | ------------------------ | 240 | ------------------------ |
| 256 | 241 | ||
| 257 | Like TCP/IP, you first need to open a socket for communicating over a | 242 | Like TCP/IP, you first need to open a socket for communicating over a |
| 258 | CAN network. Since Socket CAN implements a new protocol family, you | 243 | CAN network. Since SocketCAN implements a new protocol family, you |
| 259 | need to pass PF_CAN as the first argument to the socket(2) system | 244 | need to pass PF_CAN as the first argument to the socket(2) system |
| 260 | call. Currently, there are two CAN protocols to choose from, the raw | 245 | call. Currently, there are two CAN protocols to choose from, the raw |
| 261 | socket protocol and the broadcast manager (BCM). So to open a socket, | 246 | socket protocol and the broadcast manager (BCM). So to open a socket, |
| @@ -286,8 +271,8 @@ solution for a couple of reasons: · 24 unmodified lines | |||
| 286 | }; | 271 | }; |
| 287 | 272 | ||
| 288 | The alignment of the (linear) payload data[] to a 64bit boundary | 273 | The alignment of the (linear) payload data[] to a 64bit boundary |
| 289 | allows the user to define own structs and unions to easily access the | 274 | allows the user to define their own structs and unions to easily access |
| 290 | CAN payload. There is no given byteorder on the CAN bus by | 275 | the CAN payload. There is no given byteorder on the CAN bus by |
| 291 | default. A read(2) system call on a CAN_RAW socket transfers a | 276 | default. A read(2) system call on a CAN_RAW socket transfers a |
| 292 | struct can_frame to the user space. | 277 | struct can_frame to the user space. |
| 293 | 278 | ||
| @@ -479,7 +464,7 @@ solution for a couple of reasons: · 185 unmodified lines | |||
| 479 | 464 | ||
| 480 | setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0); | 465 | setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0); |
| 481 | 466 | ||
| 482 | To set the filters to zero filters is quite obsolete as not read | 467 | To set the filters to zero filters is quite obsolete as to not read |
| 483 | data causes the raw socket to discard the received CAN frames. But | 468 | data causes the raw socket to discard the received CAN frames. But |
| 484 | having this 'send only' use-case we may remove the receive list in the | 469 | having this 'send only' use-case we may remove the receive list in the |
| 485 | Kernel to save a little (really a very little!) CPU usage. | 470 | Kernel to save a little (really a very little!) CPU usage. |
| @@ -814,17 +799,17 @@ solution for a couple of reasons: · 328 unmodified lines | |||
| 814 | 4.4 unconnected transport protocols (SOCK_DGRAM) | 799 | 4.4 unconnected transport protocols (SOCK_DGRAM) |
| 815 | 800 | ||
| 816 | 801 | ||
| 817 | 5. Socket CAN core module | 802 | 5. SocketCAN core module |
| 818 | ------------------------- | 803 | ------------------------- |
| 819 | 804 | ||
| 820 | The Socket CAN core module implements the protocol family | 805 | The SocketCAN core module implements the protocol family |
| 821 | PF_CAN. CAN protocol modules are loaded by the core module at | 806 | PF_CAN. CAN protocol modules are loaded by the core module at |
| 822 | runtime. The core module provides an interface for CAN protocol | 807 | runtime. The core module provides an interface for CAN protocol |
| 823 | modules to subscribe needed CAN IDs (see chapter 3.1). | 808 | modules to subscribe needed CAN IDs (see chapter 3.1). |
| 824 | 809 | ||
| 825 | 5.1 can.ko module params | 810 | 5.1 can.ko module params |
| 826 | 811 | ||
| 827 | - stats_timer: To calculate the Socket CAN core statistics | 812 | - stats_timer: To calculate the SocketCAN core statistics |
| 828 | (e.g. current/maximum frames per second) this 1 second timer is | 813 | (e.g. current/maximum frames per second) this 1 second timer is |
| 829 | invoked at can.ko module start time by default. This timer can be | 814 | invoked at can.ko module start time by default. This timer can be |
| 830 | disabled by using stattimer=0 on the module commandline. | 815 | disabled by using stattimer=0 on the module commandline. |
| @@ -833,7 +818,7 @@ solution for a couple of reasons: · 2 unmodified lines | |||
| 833 | 818 | ||
| 834 | 5.2 procfs content | 819 | 5.2 procfs content |
| 835 | 820 | ||
| 836 | As described in chapter 3.1 the Socket CAN core uses several filter | 821 | As described in chapter 3.1 the SocketCAN core uses several filter |
| 837 | lists to deliver received CAN frames to CAN protocol modules. These | 822 | lists to deliver received CAN frames to CAN protocol modules. These |
| 838 | receive lists, their filters and the count of filter matches can be | 823 | receive lists, their filters and the count of filter matches can be |
| 839 | checked in the appropriate receive list. All entries contain the | 824 | checked in the appropriate receive list. All entries contain the |
| @@ -860,15 +845,15 @@ solution for a couple of reasons: · 20 unmodified lines | |||
| 860 | 845 | ||
| 861 | Additional procfs files in /proc/net/can | 846 | Additional procfs files in /proc/net/can |
| 862 | 847 | ||
| 863 | stats - Socket CAN core statistics (rx/tx frames, match ratios, ...) | 848 | stats - SocketCAN core statistics (rx/tx frames, match ratios, ...) |
| 864 | reset_stats - manual statistic reset | 849 | reset_stats - manual statistic reset |
| 865 | version - prints the Socket CAN core version and the ABI version | 850 | version - prints the SocketCAN core version and the ABI version |
| 866 | 851 | ||
| 867 | 5.3 writing own CAN protocol modules | 852 | 5.3 writing own CAN protocol modules |
| 868 | 853 | ||
| 869 | To implement a new protocol in the protocol family PF_CAN a new | 854 | To implement a new protocol in the protocol family PF_CAN a new |
| 870 | protocol has to be defined in include/linux/can.h . | 855 | protocol has to be defined in include/linux/can.h . |
| 871 | The prototypes and definitions to use the Socket CAN core can be | 856 | The prototypes and definitions to use the SocketCAN core can be |
| 872 | accessed by including include/linux/can/core.h . | 857 | accessed by including include/linux/can/core.h . |
| 873 | In addition to functions that register the CAN protocol and the | 858 | In addition to functions that register the CAN protocol and the |
| 874 | CAN device notifier chain there are functions to subscribe CAN | 859 | CAN device notifier chain there are functions to subscribe CAN |
| @@ -1105,7 +1090,7 @@ solution for a couple of reasons: · 230 unmodified lines | |||
| 1105 | 1090 | ||
| 1106 | $ ip link set canX up type can bitrate 125000 | 1091 | $ ip link set canX up type can bitrate 125000 |
| 1107 | 1092 | ||
| 1108 | A device may enter the "bus-off" state if too much errors occurred on | 1093 | A device may enter the "bus-off" state if too many errors occurred on |
| 1109 | the CAN bus. Then no more messages are received or sent. An automatic | 1094 | the CAN bus. Then no more messages are received or sent. An automatic |
| 1110 | bus-off recovery can be enabled by setting the "restart-ms" to a | 1095 | bus-off recovery can be enabled by setting the "restart-ms" to a |
| 1111 | non-zero value, e.g.: | 1096 | non-zero value, e.g.: |
| @@ -1125,7 +1110,7 @@ solution for a couple of reasons: · 13 unmodified lines | |||
| 1125 | 1110 | ||
| 1126 | CAN FD capable CAN controllers support two different bitrates for the | 1111 | CAN FD capable CAN controllers support two different bitrates for the |
| 1127 | arbitration phase and the payload phase of the CAN FD frame. Therefore a | 1112 | arbitration phase and the payload phase of the CAN FD frame. Therefore a |
| 1128 | second bittiming has to be specified in order to enable the CAN FD bitrate. | 1113 | second bit timing has to be specified in order to enable the CAN FD bitrate. |
| 1129 | 1114 | ||
| 1130 | Additionally CAN FD capable CAN controllers support up to 64 bytes of | 1115 | Additionally CAN FD capable CAN controllers support up to 64 bytes of |
| 1131 | payload. The representation of this length in can_frame.can_dlc and | 1116 | payload. The representation of this length in can_frame.can_dlc and |
| @@ -1150,21 +1135,16 @@ solution for a couple of reasons: · 18 unmodified lines | |||
| 1150 | 6.7 Supported CAN hardware | 1135 | 6.7 Supported CAN hardware |
| 1151 | 1136 | ||
| 1152 | Please check the "Kconfig" file in "drivers/net/can" to get an actual | 1137 | Please check the "Kconfig" file in "drivers/net/can" to get an actual |
| 1153 | list of the support CAN hardware. On the Socket CAN project website | 1138 | list of the support CAN hardware. On the SocketCAN project website |
| 1154 | (see chapter 7) there might be further drivers available, also for | 1139 | (see chapter 7) there might be further drivers available, also for |
| 1155 | older kernel versions. | 1140 | older kernel versions. |
| 1156 | 1141 | ||
| 1157 | 7. Socket CAN resources | 1142 | 7. SocketCAN resources |
| 1158 | ----------------------- | 1143 | ----------------------- |
| 1159 | 1144 | ||
| 1160 | You can find further resources for Socket CAN like user space tools, | 1145 | The Linux CAN / SocketCAN project ressources (project site / mailing list) |
| 1161 | support for old kernel versions, more drivers, mailing lists, etc. | 1146 | are referenced in the MAINTAINERS file in the Linux source tree. |
| 1162 | at the BerliOS OSS project website for Socket CAN: | 1147 | Search for CAN NETWORK [LAYERS|DRIVERS]. |
| 1163 | |||
| 1164 | http://developer.berlios.de/projects/socketcan | ||
| 1165 | |||
| 1166 | If you have questions, bug fixes, etc., don't hesitate to post them to | ||
| 1167 | the Socketcan-Users mailing list. But please search the archives first. | ||
| 1168 | 1148 | ||
| 1169 | 8. Credits | 1149 | 8. Credits |
| 1170 | ---------- | 1150 | ---------- |
| @@ -1,49 +1,563 @@ | |||
| 1 | filter.txt: Linux Socket Filtering | 1 | Linux Socket Filtering aka Berkeley Packet Filter (BPF) |
| 2 | Written by: Jay Schulist <jschlst@samba.org> | 2 | ======================================================= |
| 3 | 3 | ||
| 4 | Introduction | 4 | Introduction |
| 5 | ============ | 5 | ------------ |
| 6 | 6 | ||
| 7 | Linux Socket Filtering is derived from the Berkeley | 7 | Linux Socket Filtering (LSF) is derived from the Berkeley Packet Filter. |
| 8 | Packet Filter. There are some distinct differences between | 8 | Though there are some distinct differences between the BSD and Linux |
| 9 | the BSD and Linux Kernel Filtering. | 9 | Kernel filtering, but when we speak of BPF or LSF in Linux context, we |
| 10 | 10 | mean the very same mechanism of filtering in the Linux kernel. | |
| 11 | Linux Socket Filtering (LSF) allows a user-space program to | 11 | |
| 12 | attach a filter onto any socket and allow or disallow certain | 12 | BPF allows a user-space program to attach a filter onto any socket and |
| 13 | types of data to come through the socket. LSF follows exactly | 13 | allow or disallow certain types of data to come through the socket. LSF |
| 14 | the same filter code structure as the BSD Berkeley Packet Filter | 14 | follows exactly the same filter code structure as BSD's BPF, so referring |
| 15 | (BPF), so referring to the BSD bpf.4 manpage is very helpful in | 15 | to the BSD bpf.4 manpage is very helpful in creating filters. |
| 16 | creating filters. | 16 | |
| 17 | 17 | On Linux, BPF is much simpler than on BSD. One does not have to worry | |
| 18 | LSF is much simpler than BPF. One does not have to worry about | 18 | about devices or anything like that. You simply create your filter code, |
| 19 | devices or anything like that. You simply create your filter | 19 | send it to the kernel via the SO_ATTACH_FILTER option and if your filter |
| 20 | code, send it to the kernel via the SO_ATTACH_FILTER option and | 20 | code passes the kernel check on it, you then immediately begin filtering |
| 21 | if your filter code passes the kernel check on it, you then | 21 | data on that socket. |
| 22 | immediately begin filtering data on that socket. | 22 | |
| 23 | 23 | You can also detach filters from your socket via the SO_DETACH_FILTER | |
| 24 | You can also detach filters from your socket via the | 24 | option. This will probably not be used much since when you close a socket |
| 25 | SO_DETACH_FILTER option. This will probably not be used much | 25 | that has a filter on it the filter is automagically removed. The other |
| 26 | since when you close a socket that has a filter on it the | 26 | less common case may be adding a different filter on the same socket where |
| 27 | filter is automagically removed. The other less common case | 27 | you had another filter that is still running: the kernel takes care of |
| 28 | may be adding a different filter on the same socket where you had another | 28 | removing the old one and placing your new one in its place, assuming your |
| 29 | filter that is still running: the kernel takes care of removing | 29 | filter has passed the checks, otherwise if it fails the old filter will |
| 30 | the old one and placing your new one in its place, assuming your | 30 | remain on that socket. |
| 31 | filter has passed the checks, otherwise if it fails the old filter | 31 | |
| 32 | will remain on that socket. | 32 | SO_LOCK_FILTER option allows to lock the filter attached to a socket. Once |
| 33 | 33 | set, a filter cannot be removed or changed. This allows one process to | |
| 34 | SO_LOCK_FILTER option allows to lock the filter attached to a | 34 | setup a socket, attach a filter, lock it then drop privileges and be |
| 35 | socket. Once set, a filter cannot be removed or changed. This allows | 35 | assured that the filter will be kept until the socket is closed. |
| 36 | one process to setup a socket, attach a filter, lock it then drop | 36 | |
| 37 | privileges and be assured that the filter will be kept until the | 37 | The biggest user of this construct might be libpcap. Issuing a high-level |
| 38 | socket is closed. | 38 | filter command like `tcpdump -i em1 port 22` passes through the libpcap |
| 39 | 39 | internal compiler that generates a structure that can eventually be loaded | |
| 40 | Examples | 40 | via SO_ATTACH_FILTER to the kernel. `tcpdump -i em1 port 22 -ddd` |
| 41 | ======== | 41 | displays what is being placed into this structure. |
| 42 | 42 | ||
| 43 | Ioctls- | 43 | Although we were only speaking about sockets here, BPF in Linux is used |
| 44 | setsockopt(sockfd, SOL_SOCKET, SO_ATTACH_FILTER, &Filter, sizeof(Filter)); | 44 | in many more places. There's xt_bpf for netfilter, cls_bpf in the kernel |
| 45 | setsockopt(sockfd, SOL_SOCKET, SO_DETACH_FILTER, &value, sizeof(value)); | 45 | qdisc layer, SECCOMP-BPF (SECure COMPuting [1]), and lots of other places |
| 46 | setsockopt(sockfd, SOL_SOCKET, SO_LOCK_FILTER, &value, sizeof(value)); | 46 | such as team driver, PTP code, etc where BPF is being used. |
| 47 | 47 | ||
| 48 | See the BSD bpf.4 manpage and the BSD Packet Filter paper written by | 48 | [1] Documentation/prctl/seccomp_filter.txt |
| 49 | Steven McCanne and Van Jacobson of Lawrence Berkeley Laboratory. | 49 | |
| 50 | Original BPF paper: | ||
| 51 | |||
| 52 | Steven McCanne and Van Jacobson. 1993. The BSD packet filter: a new | ||
| 53 | architecture for user-level packet capture. In Proceedings of the | ||
| 54 | USENIX Winter 1993 Conference Proceedings on USENIX Winter 1993 | ||
| 55 | Conference Proceedings (USENIX'93). USENIX Association, Berkeley, | ||
| 56 | CA, USA, 2-2. [http://www.tcpdump.org/papers/bpf-usenix93.pdf] | ||
| 57 | |||
| 58 | Structure | ||
| 59 | --------- | ||
| 60 | |||
| 61 | User space applications include <linux/filter.h> which contains the | ||
| 62 | following relevant structures: | ||
| 63 | |||
| 64 | struct sock_filter { /* Filter block */ | ||
| 65 | __u16 code; /* Actual filter code */ | ||
| 66 | __u8 jt; /* Jump true */ | ||
| 67 | __u8 jf; /* Jump false */ | ||
| 68 | __u32 k; /* Generic multiuse field */ | ||
| 69 | }; | ||
| 70 | |||
| 71 | Such a structure is assembled as an array of 4-tuples, that contains | ||
| 72 | a code, jt, jf and k value. jt and jf are jump offsets and k a generic | ||
| 73 | value to be used for a provided code. | ||
| 74 | |||
| 75 | struct sock_fprog { /* Required for SO_ATTACH_FILTER. */ | ||
| 76 | unsigned short len; /* Number of filter blocks */ | ||
| 77 | struct sock_filter __user *filter; | ||
| 78 | }; | ||
| 79 | |||
| 80 | For socket filtering, a pointer to this structure (as shown in | ||
| 81 | follow-up example) is being passed to the kernel through setsockopt(2). | ||
| 82 | |||
| 83 | Example | ||
| 84 | ------- | ||
| 85 | |||
| 86 | #include <sys/socket.h> | ||
| 87 | #include <sys/types.h> | ||
| 88 | #include <arpa/inet.h> | ||
| 89 | #include <linux/if_ether.h> | ||
| 90 | /* ... */ | ||
| 91 | |||
| 92 | /* From the example above: tcpdump -i em1 port 22 -dd */ | ||
| 93 | struct sock_filter code[] = { | ||
| 94 | { 0x28, 0, 0, 0x0000000c }, | ||
| 95 | { 0x15, 0, 8, 0x000086dd }, | ||
| 96 | { 0x30, 0, 0, 0x00000014 }, | ||
| 97 | { 0x15, 2, 0, 0x00000084 }, | ||
| 98 | { 0x15, 1, 0, 0x00000006 }, | ||
| 99 | { 0x15, 0, 17, 0x00000011 }, | ||
| 100 | { 0x28, 0, 0, 0x00000036 }, | ||
| 101 | { 0x15, 14, 0, 0x00000016 }, | ||
| 102 | { 0x28, 0, 0, 0x00000038 }, | ||
| 103 | { 0x15, 12, 13, 0x00000016 }, | ||
| 104 | { 0x15, 0, 12, 0x00000800 }, | ||
| 105 | { 0x30, 0, 0, 0x00000017 }, | ||
| 106 | { 0x15, 2, 0, 0x00000084 }, | ||
| 107 | { 0x15, 1, 0, 0x00000006 }, | ||
| 108 | { 0x15, 0, 8, 0x00000011 }, | ||
| 109 | { 0x28, 0, 0, 0x00000014 }, | ||
| 110 | { 0x45, 6, 0, 0x00001fff }, | ||
| 111 | { 0xb1, 0, 0, 0x0000000e }, | ||
| 112 | { 0x48, 0, 0, 0x0000000e }, | ||
| 113 | { 0x15, 2, 0, 0x00000016 }, | ||
| 114 | { 0x48, 0, 0, 0x00000010 }, | ||
| 115 | { 0x15, 0, 1, 0x00000016 }, | ||
| 116 | { 0x06, 0, 0, 0x0000ffff }, | ||
| 117 | { 0x06, 0, 0, 0x00000000 }, | ||
| 118 | }; | ||
| 119 | |||
| 120 | struct sock_fprog bpf = { | ||
| 121 | .len = ARRAY_SIZE(code), | ||
| 122 | .filter = code, | ||
| 123 | }; | ||
| 124 | |||
| 125 | sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); | ||
| 126 | if (sock < 0) | ||
| 127 | /* ... bail out ... */ | ||
| 128 | |||
| 129 | ret = setsockopt(sock, SOL_SOCKET, SO_ATTACH_FILTER, &bpf, sizeof(bpf)); | ||
| 130 | if (ret < 0) | ||
| 131 | /* ... bail out ... */ | ||
| 132 | |||
| 133 | /* ... */ | ||
| 134 | close(sock); | ||
| 135 | |||
| 136 | The above example code attaches a socket filter for a PF_PACKET socket | ||
| 137 | in order to let all IPv4/IPv6 packets with port 22 pass. The rest will | ||
| 138 | be dropped for this socket. | ||
| 139 | |||
| 140 | The setsockopt(2) call to SO_DETACH_FILTER doesn't need any arguments | ||
| 141 | and SO_LOCK_FILTER for preventing the filter to be detached, takes an | ||
| 142 | integer value with 0 or 1. | ||
| 143 | |||
| 144 | Note that socket filters are not restricted to PF_PACKET sockets only, | ||
| 145 | but can also be used on other socket families. | ||
| 146 | |||
| 147 | Summary of system calls: | ||
| 148 | |||
| 149 | * setsockopt(sockfd, SOL_SOCKET, SO_ATTACH_FILTER, &val, sizeof(val)); | ||
| 150 | * setsockopt(sockfd, SOL_SOCKET, SO_DETACH_FILTER, &val, sizeof(val)); | ||
| 151 | * setsockopt(sockfd, SOL_SOCKET, SO_LOCK_FILTER, &val, sizeof(val)); | ||
| 152 | |||
| 153 | Normally, most use cases for socket filtering on packet sockets will be | ||
| 154 | covered by libpcap in high-level syntax, so as an application developer | ||
| 155 | you should stick to that. libpcap wraps its own layer around all that. | ||
| 156 | |||
| 157 | Unless i) using/linking to libpcap is not an option, ii) the required BPF | ||
| 158 | filters use Linux extensions that are not supported by libpcap's compiler, | ||
| 159 | iii) a filter might be more complex and not cleanly implementable with | ||
| 160 | libpcap's compiler, or iv) particular filter codes should be optimized | ||
| 161 | differently than libpcap's internal compiler does; then in such cases | ||
| 162 | writing such a filter "by hand" can be of an alternative. For example, | ||
| 163 | xt_bpf and cls_bpf users might have requirements that could result in | ||
| 164 | more complex filter code, or one that cannot be expressed with libpcap | ||
| 165 | (e.g. different return codes for various code paths). Moreover, BPF JIT | ||
| 166 | implementors may wish to manually write test cases and thus need low-level | ||
| 167 | access to BPF code as well. | ||
| 168 | |||
| 169 | BPF engine and instruction set | ||
| 170 | ------------------------------ | ||
| 171 | |||
| 172 | Under tools/net/ there's a small helper tool called bpf_asm which can | ||
| 173 | be used to write low-level filters for example scenarios mentioned in the | ||
| 174 | previous section. Asm-like syntax mentioned here has been implemented in | ||
| 175 | bpf_asm and will be used for further explanations (instead of dealing with | ||
| 176 | less readable opcodes directly, principles are the same). The syntax is | ||
| 177 | closely modelled after Steven McCanne's and Van Jacobson's BPF paper. | ||
| 178 | |||
| 179 | The BPF architecture consists of the following basic elements: | ||
| 180 | |||
| 181 | Element Description | ||
| 182 | |||
| 183 | A 32 bit wide accumulator | ||
| 184 | X 32 bit wide X register | ||
| 185 | M[] 16 x 32 bit wide misc registers aka "scratch memory | ||
| 186 | store", addressable from 0 to 15 | ||
| 187 | |||
| 188 | A program, that is translated by bpf_asm into "opcodes" is an array that | ||
| 189 | consists of the following elements (as already mentioned): | ||
| 190 | |||
| 191 | op:16, jt:8, jf:8, k:32 | ||
| 192 | |||
| 193 | The element op is a 16 bit wide opcode that has a particular instruction | ||
| 194 | encoded. jt and jf are two 8 bit wide jump targets, one for condition | ||
| 195 | "jump if true", the other one "jump if false". Eventually, element k | ||
| 196 | contains a miscellaneous argument that can be interpreted in different | ||
| 197 | ways depending on the given instruction in op. | ||
| 198 | |||
| 199 | The instruction set consists of load, store, branch, alu, miscellaneous | ||
| 200 | and return instructions that are also represented in bpf_asm syntax. This | ||
| 201 | table lists all bpf_asm instructions available resp. what their underlying | ||
| 202 | opcodes as defined in linux/filter.h stand for: | ||
| 203 | |||
| 204 | Instruction Addressing mode Description | ||
| 205 | |||
| 206 | ld 1, 2, 3, 4, 10 Load word into A | ||
| 207 | ldi 4 Load word into A | ||
| 208 | ldh 1, 2 Load half-word into A | ||
| 209 | ldb 1, 2 Load byte into A | ||
| 210 | ldx 3, 4, 5, 10 Load word into X | ||
| 211 | ldxi 4 Load word into X | ||
| 212 | ldxb 5 Load byte into X | ||
| 213 | |||
| 214 | st 3 Store A into M[] | ||
| 215 | stx 3 Store X into M[] | ||
| 216 | |||
| 217 | jmp 6 Jump to label | ||
| 218 | ja 6 Jump to label | ||
| 219 | jeq 7, 8 Jump on k == A | ||
| 220 | jneq 8 Jump on k != A | ||
| 221 | jne 8 Jump on k != A | ||
| 222 | jlt 8 Jump on k < A | ||
| 223 | jle 8 Jump on k <= A | ||
| 224 | jgt 7, 8 Jump on k > A | ||
| 225 | jge 7, 8 Jump on k >= A | ||
| 226 | jset 7, 8 Jump on k & A | ||
| 227 | |||
| 228 | add 0, 4 A + <x> | ||
| 229 | sub 0, 4 A - <x> | ||
| 230 | mul 0, 4 A * <x> | ||
| 231 | div 0, 4 A / <x> | ||
| 232 | mod 0, 4 A % <x> | ||
| 233 | neg 0, 4 !A | ||
| 234 | and 0, 4 A & <x> | ||
| 235 | or 0, 4 A | <x> | ||
| 236 | xor 0, 4 A ^ <x> | ||
| 237 | lsh 0, 4 A << <x> | ||
| 238 | rsh 0, 4 A >> <x> | ||
| 239 | |||
| 240 | tax Copy A into X | ||
| 241 | txa Copy X into A | ||
| 242 | |||
| 243 | ret 4, 9 Return | ||
| 244 | |||
| 245 | The next table shows addressing formats from the 2nd column: | ||
| 246 | |||
| 247 | Addressing mode Syntax Description | ||
| 248 | |||
| 249 | 0 x/%x Register X | ||
| 250 | 1 [k] BHW at byte offset k in the packet | ||
| 251 | 2 [x + k] BHW at the offset X + k in the packet | ||
| 252 | 3 M[k] Word at offset k in M[] | ||
| 253 | 4 #k Literal value stored in k | ||
| 254 | 5 4*([k]&0xf) Lower nibble * 4 at byte offset k in the packet | ||
| 255 | 6 L Jump label L | ||
| 256 | 7 #k,Lt,Lf Jump to Lt if true, otherwise jump to Lf | ||
| 257 | 8 #k,Lt Jump to Lt if predicate is true | ||
| 258 | 9 a/%a Accumulator A | ||
| 259 | 10 extension BPF extension | ||
| 260 | |||
| 261 | The Linux kernel also has a couple of BPF extensions that are used along | ||
| 262 | with the class of load instructions by "overloading" the k argument with | ||
| 263 | a negative offset + a particular extension offset. The result of such BPF | ||
| 264 | extensions are loaded into A. | ||
| 265 | |||
| 266 | Possible BPF extensions are shown in the following table: | ||
| 267 | |||
| 268 | Extension Description | ||
| 269 | |||
| 270 | len skb->len | ||
| 271 | proto skb->protocol | ||
| 272 | type skb->pkt_type | ||
| 273 | poff Payload start offset | ||
| 274 | ifidx skb->dev->ifindex | ||
| 275 | nla Netlink attribute of type X with offset A | ||
| 276 | nlan Nested Netlink attribute of type X with offset A | ||
| 277 | mark skb->mark | ||
| 278 | queue skb->queue_mapping | ||
| 279 | hatype skb->dev->type | ||
| 280 | rxhash skb->rxhash | ||
| 281 | cpu raw_smp_processor_id() | ||
| 282 | vlan_tci vlan_tx_tag_get(skb) | ||
| 283 | vlan_pr vlan_tx_tag_present(skb) | ||
| 284 | |||
| 285 | These extensions can also be prefixed with '#'. | ||
| 286 | Examples for low-level BPF: | ||
| 287 | |||
| 288 | ** ARP packets: | ||
| 289 | |||
| 290 | ldh [12] | ||
| 291 | jne #0x806, drop | ||
| 292 | ret #-1 | ||
| 293 | drop: ret #0 | ||
| 294 | |||
| 295 | ** IPv4 TCP packets: | ||
| 296 | |||
| 297 | ldh [12] | ||
| 298 | jne #0x800, drop | ||
| 299 | ldb [23] | ||
| 300 | jneq #6, drop | ||
| 301 | ret #-1 | ||
| 302 | drop: ret #0 | ||
| 303 | |||
| 304 | ** (Accelerated) VLAN w/ id 10: | ||
| 305 | |||
| 306 | ld vlan_tci | ||
| 307 | jneq #10, drop | ||
| 308 | ret #-1 | ||
| 309 | drop: ret #0 | ||
| 310 | |||
| 311 | ** SECCOMP filter example: | ||
| 312 | |||
| 313 | ld [4] /* offsetof(struct seccomp_data, arch) */ | ||
| 314 | jne #0xc000003e, bad /* AUDIT_ARCH_X86_64 */ | ||
| 315 | ld [0] /* offsetof(struct seccomp_data, nr) */ | ||
| 316 | jeq #15, good /* __NR_rt_sigreturn */ | ||
| 317 | jeq #231, good /* __NR_exit_group */ | ||
| 318 | jeq #60, good /* __NR_exit */ | ||
| 319 | jeq #0, good /* __NR_read */ | ||
| 320 | jeq #1, good /* __NR_write */ | ||
| 321 | jeq #5, good /* __NR_fstat */ | ||
| 322 | jeq #9, good /* __NR_mmap */ | ||
| 323 | jeq #14, good /* __NR_rt_sigprocmask */ | ||
| 324 | jeq #13, good /* __NR_rt_sigaction */ | ||
| 325 | jeq #35, good /* __NR_nanosleep */ | ||
| 326 | bad: ret #0 /* SECCOMP_RET_KILL */ | ||
| 327 | good: ret #0x7fff0000 /* SECCOMP_RET_ALLOW */ | ||
| 328 | |||
| 329 | The above example code can be placed into a file (here called "foo"), and | ||
| 330 | then be passed to the bpf_asm tool for generating opcodes, output that xt_bpf | ||
| 331 | and cls_bpf understands and can directly be loaded with. Example with above | ||
| 332 | ARP code: | ||
| 333 | |||
| 334 | $ ./bpf_asm foo | ||
| 335 | 4,40 0 0 12,21 0 1 2054,6 0 0 4294967295,6 0 0 0, | ||
| 336 | |||
| 337 | In copy and paste C-like output: | ||
| 338 | |||
| 339 | $ ./bpf_asm -c foo | ||
| 340 | { 0x28, 0, 0, 0x0000000c }, | ||
| 341 | { 0x15, 0, 1, 0x00000806 }, | ||
| 342 | { 0x06, 0, 0, 0xffffffff }, | ||
| 343 | { 0x06, 0, 0, 0000000000 }, | ||
| 344 | |||
| 345 | In particular, as usage with xt_bpf or cls_bpf can result in more complex BPF | ||
| 346 | filters that might not be obvious at first, it's good to test filters before | ||
| 347 | attaching to a live system. For that purpose, there's a small tool called | ||
| 348 | bpf_dbg under tools/net/ in the kernel source directory. This debugger allows | ||
| 349 | for testing BPF filters against given pcap files, single stepping through the | ||
| 350 | BPF code on the pcap's packets and to do BPF machine register dumps. | ||
| 351 | |||
| 352 | Starting bpf_dbg is trivial and just requires issuing: | ||
| 353 | |||
| 354 | # ./bpf_dbg | ||
| 355 | |||
| 356 | In case input and output do not equal stdin/stdout, bpf_dbg takes an | ||
| 357 | alternative stdin source as a first argument, and an alternative stdout | ||
| 358 | sink as a second one, e.g. `./bpf_dbg test_in.txt test_out.txt`. | ||
| 359 | |||
| 360 | Other than that, a particular libreadline configuration can be set via | ||
| 361 | file "~/.bpf_dbg_init" and the command history is stored in the file | ||
| 362 | "~/.bpf_dbg_history". | ||
| 363 | |||
| 364 | Interaction in bpf_dbg happens through a shell that also has auto-completion | ||
| 365 | support (follow-up example commands starting with '>' denote bpf_dbg shell). | ||
| 366 | The usual workflow would be to ... | ||
| 367 | |||
| 368 | > load bpf 6,40 0 0 12,21 0 3 2048,48 0 0 23,21 0 1 1,6 0 0 65535,6 0 0 0 | ||
| 369 | Loads a BPF filter from standard output of bpf_asm, or transformed via | ||
| 370 | e.g. `tcpdump -iem1 -ddd port 22 | tr '\n' ','`. Note that for JIT | ||
| 371 | debugging (next section), this command creates a temporary socket and | ||
| 372 | loads the BPF code into the kernel. Thus, this will also be useful for | ||
| 373 | JIT developers. | ||
| 374 | |||
| 375 | > load pcap foo.pcap | ||
| 376 | Loads standard tcpdump pcap file. | ||
| 377 | |||
| 378 | > run [<n>] | ||
| 379 | bpf passes:1 fails:9 | ||
| 380 | Runs through all packets from a pcap to account how many passes and fails | ||
| 381 | the filter will generate. A limit of packets to traverse can be given. | ||
| 382 | |||
| 383 | > disassemble | ||
| 384 | l0: ldh [12] | ||
| 385 | l1: jeq #0x800, l2, l5 | ||
| 386 | l2: ldb [23] | ||
| 387 | l3: jeq #0x1, l4, l5 | ||
| 388 | l4: ret #0xffff | ||
| 389 | l5: ret #0 | ||
| 390 | Prints out BPF code disassembly. | ||
| 391 | |||
| 392 | > dump | ||
| 393 | /* { op, jt, jf, k }, */ | ||
| 394 | { 0x28, 0, 0, 0x0000000c }, | ||
| 395 | { 0x15, 0, 3, 0x00000800 }, | ||
| 396 | { 0x30, 0, 0, 0x00000017 }, | ||
| 397 | { 0x15, 0, 1, 0x00000001 }, | ||
| 398 | { 0x06, 0, 0, 0x0000ffff }, | ||
| 399 | { 0x06, 0, 0, 0000000000 }, | ||
| 400 | Prints out C-style BPF code dump. | ||
| 401 | |||
| 402 | > breakpoint 0 | ||
| 403 | breakpoint at: l0: ldh [12] | ||
| 404 | > breakpoint 1 | ||
| 405 | breakpoint at: l1: jeq #0x800, l2, l5 | ||
| 406 | ... | ||
| 407 | Sets breakpoints at particular BPF instructions. Issuing a `run` command | ||
| 408 | will walk through the pcap file continuing from the current packet and | ||
| 409 | break when a breakpoint is being hit (another `run` will continue from | ||
| 410 | the currently active breakpoint executing next instructions): | ||
| 411 | |||
| 412 | > run | ||
| 413 | -- register dump -- | ||
| 414 | pc: [0] <-- program counter | ||
| 415 | code: [40] jt[0] jf[0] k[12] <-- plain BPF code of current instruction | ||
| 416 | curr: l0: ldh [12] <-- disassembly of current instruction | ||
| 417 | A: [00000000][0] <-- content of A (hex, decimal) | ||
| 418 | X: [00000000][0] <-- content of X (hex, decimal) | ||
| 419 | M[0,15]: [00000000][0] <-- folded content of M (hex, decimal) | ||
| 420 | -- packet dump -- <-- Current packet from pcap (hex) | ||
| 421 | len: 42 | ||
| 422 | 0: 00 19 cb 55 55 a4 00 14 a4 43 78 69 08 06 00 01 | ||
| 423 | 16: 08 00 06 04 00 01 00 14 a4 43 78 69 0a 3b 01 26 | ||
| 424 | 32: 00 00 00 00 00 00 0a 3b 01 01 | ||
| 425 | (breakpoint) | ||
| 426 | > | ||
| 427 | |||
| 428 | > breakpoint | ||
| 429 | breakpoints: 0 1 | ||
| 430 | Prints currently set breakpoints. | ||
| 431 | |||
| 432 | > step [-<n>, +<n>] | ||
| 433 | Performs single stepping through the BPF program from the current pc | ||
| 434 | offset. Thus, on each step invocation, above register dump is issued. | ||
| 435 | This can go forwards and backwards in time, a plain `step` will break | ||
| 436 | on the next BPF instruction, thus +1. (No `run` needs to be issued here.) | ||
| 437 | |||
| 438 | > select <n> | ||
| 439 | Selects a given packet from the pcap file to continue from. Thus, on | ||
| 440 | the next `run` or `step`, the BPF program is being evaluated against | ||
| 441 | the user pre-selected packet. Numbering starts just as in Wireshark | ||
| 442 | with index 1. | ||
| 443 | |||
| 444 | > quit | ||
| 445 | # | ||
| 446 | Exits bpf_dbg. | ||
| 447 | |||
| 448 | JIT compiler | ||
| 449 | ------------ | ||
| 450 | |||
| 451 | The Linux kernel has a built-in BPF JIT compiler for x86_64, SPARC, PowerPC, | ||
| 452 | ARM and s390 and can be enabled through CONFIG_BPF_JIT. The JIT compiler is | ||
| 453 | transparently invoked for each attached filter from user space or for internal | ||
| 454 | kernel users if it has been previously enabled by root: | ||
| 455 | |||
| 456 | echo 1 > /proc/sys/net/core/bpf_jit_enable | ||
| 457 | |||
| 458 | For JIT developers, doing audits etc, each compile run can output the generated | ||
| 459 | opcode image into the kernel log via: | ||
| 460 | |||
| 461 | echo 2 > /proc/sys/net/core/bpf_jit_enable | ||
| 462 | |||
| 463 | Example output from dmesg: | ||
| 464 | |||
| 465 | [ 3389.935842] flen=6 proglen=70 pass=3 image=ffffffffa0069c8f | ||
| 466 | [ 3389.935847] JIT code: 00000000: 55 48 89 e5 48 83 ec 60 48 89 5d f8 44 8b 4f 68 | ||
| 467 | [ 3389.935849] JIT code: 00000010: 44 2b 4f 6c 4c 8b 87 d8 00 00 00 be 0c 00 00 00 | ||
| 468 | [ 3389.935850] JIT code: 00000020: e8 1d 94 ff e0 3d 00 08 00 00 75 16 be 17 00 00 | ||
| 469 | [ 3389.935851] JIT code: 00000030: 00 e8 28 94 ff e0 83 f8 01 75 07 b8 ff ff 00 00 | ||
| 470 | [ 3389.935852] JIT code: 00000040: eb 02 31 c0 c9 c3 | ||
| 471 | |||
| 472 | In the kernel source tree under tools/net/, there's bpf_jit_disasm for | ||
| 473 | generating disassembly out of the kernel log's hexdump: | ||
| 474 | |||
| 475 | # ./bpf_jit_disasm | ||
| 476 | 70 bytes emitted from JIT compiler (pass:3, flen:6) | ||
| 477 | ffffffffa0069c8f + <x>: | ||
| 478 | 0: push %rbp | ||
| 479 | 1: mov %rsp,%rbp | ||
| 480 | 4: sub $0x60,%rsp | ||
| 481 | 8: mov %rbx,-0x8(%rbp) | ||
| 482 | c: mov 0x68(%rdi),%r9d | ||
| 483 | 10: sub 0x6c(%rdi),%r9d | ||
| 484 | 14: mov 0xd8(%rdi),%r8 | ||
| 485 | 1b: mov $0xc,%esi | ||
| 486 | 20: callq 0xffffffffe0ff9442 | ||
| 487 | 25: cmp $0x800,%eax | ||
| 488 | 2a: jne 0x0000000000000042 | ||
| 489 | 2c: mov $0x17,%esi | ||
| 490 | 31: callq 0xffffffffe0ff945e | ||
| 491 | 36: cmp $0x1,%eax | ||
| 492 | 39: jne 0x0000000000000042 | ||
| 493 | 3b: mov $0xffff,%eax | ||
| 494 | 40: jmp 0x0000000000000044 | ||
| 495 | 42: xor %eax,%eax | ||
| 496 | 44: leaveq | ||
| 497 | 45: retq | ||
| 498 | |||
| 499 | Issuing option `-o` will "annotate" opcodes to resulting assembler | ||
| 500 | instructions, which can be very useful for JIT developers: | ||
| 501 | |||
| 502 | # ./bpf_jit_disasm -o | ||
| 503 | 70 bytes emitted from JIT compiler (pass:3, flen:6) | ||
| 504 | ffffffffa0069c8f + <x>: | ||
| 505 | 0: push %rbp | ||
| 506 | 55 | ||
| 507 | 1: mov %rsp,%rbp | ||
| 508 | 48 89 e5 | ||
| 509 | 4: sub $0x60,%rsp | ||
| 510 | 48 83 ec 60 | ||
| 511 | 8: mov %rbx,-0x8(%rbp) | ||
| 512 | 48 89 5d f8 | ||
| 513 | c: mov 0x68(%rdi),%r9d | ||
| 514 | 44 8b 4f 68 | ||
| 515 | 10: sub 0x6c(%rdi),%r9d | ||
| 516 | 44 2b 4f 6c | ||
| 517 | 14: mov 0xd8(%rdi),%r8 | ||
| 518 | 4c 8b 87 d8 00 00 00 | ||
| 519 | 1b: mov $0xc,%esi | ||
| 520 | be 0c 00 00 00 | ||
| 521 | 20: callq 0xffffffffe0ff9442 | ||
| 522 | e8 1d 94 ff e0 | ||
| 523 | 25: cmp $0x800,%eax | ||
| 524 | 3d 00 08 00 00 | ||
| 525 | 2a: jne 0x0000000000000042 | ||
| 526 | 75 16 | ||
| 527 | 2c: mov $0x17,%esi | ||
| 528 | be 17 00 00 00 | ||
| 529 | 31: callq 0xffffffffe0ff945e | ||
| 530 | e8 28 94 ff e0 | ||
| 531 | 36: cmp $0x1,%eax | ||
| 532 | 83 f8 01 | ||
| 533 | 39: jne 0x0000000000000042 | ||
| 534 | 75 07 | ||
| 535 | 3b: mov $0xffff,%eax | ||
| 536 | b8 ff ff 00 00 | ||
| 537 | 40: jmp 0x0000000000000044 | ||
| 538 | eb 02 | ||
| 539 | 42: xor %eax,%eax | ||
| 540 | 31 c0 | ||
| 541 | 44: leaveq | ||
| 542 | c9 | ||
| 543 | 45: retq | ||
| 544 | c3 | ||
| 545 | |||
| 546 | For BPF JIT developers, bpf_jit_disasm, bpf_asm and bpf_dbg provides a useful | ||
| 547 | toolchain for developing and testing the kernel's JIT compiler. | ||
| 548 | |||
| 549 | Misc | ||
| 550 | ---- | ||
| 551 | |||
| 552 | Also trinity, the Linux syscall fuzzer, has built-in support for BPF and | ||
| 553 | SECCOMP-BPF kernel fuzzing. | ||
| 554 | |||
| 555 | Written by | ||
| 556 | ---------- | ||
| 557 | |||
| 558 | The document was written in the hope that it is found useful and in order | ||
| 559 | to give potential BPF hackers or security auditors a better overview of | ||
| 560 | the underlying architecture. | ||
| 561 | |||
| 562 | Jay Schulist <jschlst@samba.org> | ||
| 563 | Daniel Borkmann <dborkman@redhat.com> | ||
| @@ -0,0 +1,47 @@ | |||
| 1 | Linux* Base Driver for Intel(R) Network Connection | ||
| 2 | ================================================== | ||
| 3 | |||
| 4 | Intel XL710 X710 Virtual Function Linux driver. | ||
| 5 | Copyright(c) 2013 Intel Corporation. | ||
| 6 | |||
| 7 | Contents | ||
| 8 | ======== | ||
| 9 | |||
| 10 | - Identifying Your Adapter | ||
| 11 | - Known Issues/Troubleshooting | ||
| 12 | - Support | ||
| 13 | |||
| 14 | This file describes the i40evf Linux* Base Driver for the Intel(R) XL710 | ||
| 15 | X710 Virtual Function. | ||
| 16 | |||
| 17 | The i40evf driver supports XL710 and X710 virtual function devices that | ||
| 18 | can only be activated on kernels with CONFIG_PCI_IOV enabled. | ||
| 19 | |||
| 20 | The guest OS loading the i40evf driver must support MSI-X interrupts. | ||
| 21 | |||
| 22 | Identifying Your Adapter | ||
| 23 | ======================== | ||
| 24 | |||
| 25 | For more information on how to identify your adapter, go to the Adapter & | ||
| 26 | Driver ID Guide at: | ||
| 27 | |||
| 28 | http://support.intel.com/support/go/network/adapter/idguide.htm | ||
| 29 | |||
| 30 | Known Issues/Troubleshooting | ||
| 31 | ============================ | ||
| 32 | |||
| 33 | |||
| 34 | Support | ||
| 35 | ======= | ||
| 36 | |||
| 37 | For general information, go to the Intel support website at: | ||
| 38 | |||
| 39 | http://support.intel.com | ||
| 40 | |||
| 41 | or the Intel Wired Networking project hosted by Sourceforge at: | ||
| 42 | |||
| 43 | http://sourceforge.net/projects/e1000 | ||
| 44 | |||
| 45 | If an issue is identified with the released source code on the supported | ||
| 46 | kernel with a supported adapter, email the specific information related | ||
| 47 | to the issue to e1000-devel@lists.sf.net | ||
| @@ -15,17 +15,47 @@ ip_default_ttl - INTEGER · 14 unmodified lines | |||
| 15 | forwarded) IP packets. Should be between 1 and 255 inclusive. | 15 | forwarded) IP packets. Should be between 1 and 255 inclusive. |
| 16 | Default: 64 (as recommended by RFC1700) | 16 | Default: 64 (as recommended by RFC1700) |
| 17 | 17 | ||
| 18 | ip_no_pmtu_disc - BOOLEAN | 18 | ip_no_pmtu_disc - INTEGER |
| 19 | Disable Path MTU Discovery. If enabled and a | 19 | Disable Path MTU Discovery. If enabled in mode 1 and a |
| 20 | fragmentation-required ICMP is received, the PMTU to this | 20 | fragmentation-required ICMP is received, the PMTU to this |
| 21 | destination will be set to min_pmtu (see below). You will need | 21 | destination will be set to min_pmtu (see below). You will need |
| 22 | to raise min_pmtu to the smallest interface MTU on your system | 22 | to raise min_pmtu to the smallest interface MTU on your system |
| 23 | manually if you want to avoid locally generated fragments. | 23 | manually if you want to avoid locally generated fragments. |
| 24 | |||
| 25 | In mode 2 incoming Path MTU Discovery messages will be | ||
| 26 | discarded. Outgoing frames are handled the same as in mode 1, | ||
| 27 | implicitly setting IP_PMTUDISC_DONT on every created socket. | ||
| 28 | |||
| 29 | Mode 3 is a hardend pmtu discover mode. The kernel will only | ||
| 30 | accept fragmentation-needed errors if the underlying protocol | ||
| 31 | can verify them besides a plain socket lookup. Current | ||
| 32 | protocols for which pmtu events will be honored are TCP, SCTP | ||
| 33 | and DCCP as they verify e.g. the sequence number or the | ||
| 34 | association. This mode should not be enabled globally but is | ||
| 35 | only intended to secure e.g. name servers in namespaces where | ||
| 36 | TCP path mtu must still work but path MTU information of other | ||
| 37 | protocols should be discarded. If enabled globally this mode | ||
| 38 | could break other protocols. | ||
| 39 | |||
| 40 | Possible values: 0-3 | ||
| 24 | Default: FALSE | 41 | Default: FALSE |
| 25 | 42 | ||
| 26 | min_pmtu - INTEGER | 43 | min_pmtu - INTEGER |
| 27 | default 552 - minimum discovered Path MTU | 44 | default 552 - minimum discovered Path MTU |
| 28 | 45 | ||
| 46 | ip_forward_use_pmtu - BOOLEAN | ||
| 47 | By default we don't trust protocol path MTUs while forwarding | ||
| 48 | because they could be easily forged and can lead to unwanted | ||
| 49 | fragmentation by the router. | ||
| 50 | You only need to enable this if you have user-space software | ||
| 51 | which tries to discover path mtus by itself and depends on the | ||
| 52 | kernel honoring this information. This is normally not the | ||
| 53 | case. | ||
| 54 | Default: 0 (disabled) | ||
| 55 | Possible values: | ||
| 56 | 0 - disabled | ||
| 57 | 1 - enabled | ||
| 58 | |||
| 29 | route/max_size - INTEGER | 59 | route/max_size - INTEGER |
| 30 | Maximum number of routes allowed in the kernel. Increase | 60 | Maximum number of routes allowed in the kernel. Increase |
| 31 | this when using large numbers of interfaces and/or routes. | 61 | this when using large numbers of interfaces and/or routes. |
| @@ -160,6 +190,16 @@ tcp_app_win - INTEGER · 128 unmodified lines | |||
| 160 | buffer. Value 0 is special, it means that nothing is reserved. | 190 | buffer. Value 0 is special, it means that nothing is reserved. |
| 161 | Default: 31 | 191 | Default: 31 |
| 162 | 192 | ||
| 193 | tcp_autocorking - BOOLEAN | ||
| 194 | Enable TCP auto corking : | ||
| 195 | When applications do consecutive small write()/sendmsg() system calls, | ||
| 196 | we try to coalesce these small writes as much as possible, to lower | ||
| 197 | total amount of sent packets. This is done if at least one prior | ||
| 198 | packet for the flow is waiting in Qdisc queues or device transmit | ||
| 199 | queue. Applications can still use TCP_CORK for optimal behavior | ||
| 200 | when they know how/when to uncork their sockets. | ||
| 201 | Default : 1 | ||
| 202 | |||
| 163 | tcp_available_congestion_control - STRING | 203 | tcp_available_congestion_control - STRING |
| 164 | Shows the available congestion control choices that are registered. | 204 | Shows the available congestion control choices that are registered. |
| 165 | More congestion control algorithms may be available as modules, | 205 | More congestion control algorithms may be available as modules, |
| @@ -1048,6 +1088,12 @@ igmpv3_unsolicited_report_interval - INTEGER · 882 unmodified lines | |||
| 1048 | IGMPv3 report retransmit will take place. | 1088 | IGMPv3 report retransmit will take place. |
| 1049 | Default: 1000 (1 seconds) | 1089 | Default: 1000 (1 seconds) |
| 1050 | 1090 | ||
| 1091 | promote_secondaries - BOOLEAN | ||
| 1092 | When a primary IP address is removed from this interface | ||
| 1093 | promote a corresponding secondary IP address instead of | ||
| 1094 | removing all the corresponding secondary IP addresses. | ||
| 1095 | |||
| 1096 | |||
| 1051 | tag - INTEGER | 1097 | tag - INTEGER |
| 1052 | Allows you to write a number, which can be used as required. | 1098 | Allows you to write a number, which can be used as required. |
| 1053 | Default value is 0. | 1099 | Default value is 0. |
| @@ -1078,6 +1124,21 @@ bindv6only - BOOLEAN · 24 unmodified lines | |||
| 1078 | 1124 | ||
| 1079 | Default: FALSE (as specified in RFC3493) | 1125 | Default: FALSE (as specified in RFC3493) |
| 1080 | 1126 | ||
| 1127 | flowlabel_consistency - BOOLEAN | ||
| 1128 | Protect the consistency (and unicity) of flow label. | ||
| 1129 | You have to disable it to use IPV6_FL_F_REFLECT flag on the | ||
| 1130 | flow label manager. | ||
| 1131 | TRUE: enabled | ||
| 1132 | FALSE: disabled | ||
| 1133 | Default: TRUE | ||
| 1134 | |||
| 1135 | anycast_src_echo_reply - BOOLEAN | ||
| 1136 | Controls the use of anycast addresses as source addresses for ICMPv6 | ||
| 1137 | echo reply | ||
| 1138 | TRUE: enabled | ||
| 1139 | FALSE: disabled | ||
| 1140 | Default: FALSE | ||
| 1141 | |||
| 1081 | IPv6 Fragmentation: | 1142 | IPv6 Fragmentation: |
| 1082 | 1143 | ||
| 1083 | ip6frag_high_thresh - INTEGER | 1144 | ip6frag_high_thresh - INTEGER |
| @@ -0,0 +1,38 @@ | |||
| 1 | |||
| 2 | Here documents known IPsec corner cases which need to be keep in mind when | ||
| 3 | deploy various IPsec configuration in real world production environment. | ||
| 4 | |||
| 5 | 1. IPcomp: Small IP packet won't get compressed at sender, and failed on | ||
| 6 | policy check on receiver. | ||
| 7 | |||
| 8 | Quote from RFC3173: | ||
| 9 | 2.2. Non-Expansion Policy | ||
| 10 | |||
| 11 | If the total size of a compressed payload and the IPComp header, as | ||
| 12 | defined in section 3, is not smaller than the size of the original | ||
| 13 | payload, the IP datagram MUST be sent in the original non-compressed | ||
| 14 | form. To clarify: If an IP datagram is sent non-compressed, no | ||
| 15 | |||
| 16 | IPComp header is added to the datagram. This policy ensures saving | ||
| 17 | the decompression processing cycles and avoiding incurring IP | ||
| 18 | datagram fragmentation when the expanded datagram is larger than the | ||
| 19 | MTU. | ||
| 20 | |||
| 21 | Small IP datagrams are likely to expand as a result of compression. | ||
| 22 | Therefore, a numeric threshold should be applied before compression, | ||
| 23 | where IP datagrams of size smaller than the threshold are sent in the | ||
| 24 | original form without attempting compression. The numeric threshold | ||
| 25 | is implementation dependent. | ||
| 26 | |||
| 27 | Current IPComp implementation is indeed by the book, while as in practice | ||
| 28 | when sending non-compressed packet to the peer(whether or not packet len | ||
| 29 | is smaller than the threshold or the compressed len is large than original | ||
| 30 | packet len), the packet is dropped when checking the policy as this packet | ||
| 31 | matches the selector but not coming from any XFRM layer, i.e., with no | ||
| 32 | security path. Such naked packet will not eventually make it to upper layer. | ||
| 33 | The result is much more wired to the user when ping peer with different | ||
| 34 | payload length. | ||
| 35 | |||
| 36 | One workaround is try to set "level use" for each policy if user observed | ||
| 37 | above scenario. The consequence of doing so is small packet(uncompressed) | ||
| 38 | will skip policy checking on receiver side. | ||
| @@ -98,6 +98,11 @@ by the kernel. · 97 unmodified lines | |||
| 98 | The destruction of the socket and all associated resources | 98 | The destruction of the socket and all associated resources |
| 99 | is done by a simple call to close(fd). | 99 | is done by a simple call to close(fd). |
| 100 | 100 | ||
| 101 | Similarly as without PACKET_MMAP, it is possible to use one socket | ||
| 102 | for capture and transmission. This can be done by mapping the | ||
| 103 | allocated RX and TX buffer ring with a single mmap() call. | ||
| 104 | See "Mapping and use of the circular buffer (ring)". | ||
| 105 | |||
| 101 | Next I will describe PACKET_MMAP settings and its constraints, | 106 | Next I will describe PACKET_MMAP settings and its constraints, |
| 102 | also the mapping of the circular buffer in the user process and | 107 | also the mapping of the circular buffer in the user process and |
| 103 | the use of this buffer. | 108 | the use of this buffer. |
| @@ -414,6 +419,19 @@ tp_block_size/tp_frame_size frames there will be a gap between · 310 unmodified lines | |||
| 414 | the frames. This is because a frame cannot be spawn across two | 419 | the frames. This is because a frame cannot be spawn across two |
| 415 | blocks. | 420 | blocks. |
| 416 | 421 | ||
| 422 | To use one socket for capture and transmission, the mapping of both the | ||
| 423 | RX and TX buffer ring has to be done with one call to mmap: | ||
| 424 | |||
| 425 | ... | ||
| 426 | setsockopt(fd, SOL_PACKET, PACKET_RX_RING, &foo, sizeof(foo)); | ||
| 427 | setsockopt(fd, SOL_PACKET, PACKET_TX_RING, &bar, sizeof(bar)); | ||
| 428 | ... | ||
| 429 | rx_ring = mmap(0, size * 2, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); | ||
| 430 | tx_ring = rx_ring + size; | ||
| 431 | |||
| 432 | RX must be the first as the kernel maps the TX ring memory right | ||
| 433 | after the RX one. | ||
| 434 | |||
| 417 | At the beginning of each frame there is an status field (see | 435 | At the beginning of each frame there is an status field (see |
| 418 | struct tpacket_hdr). If this field is 0 means that the frame is ready | 436 | struct tpacket_hdr). If this field is 0 means that the frame is ready |
| 419 | to be used for the kernel, If not, there is a frame the user can read | 437 | to be used for the kernel, If not, there is a frame the user can read |
| @@ -517,8 +535,6 @@ where 'tpacket_version' can be TPACKET_V1 (default), TPACKET_V2, TPACKET_V3. · 97 unmodified lines | |||
| 517 | TPACKET_V1: | 535 | TPACKET_V1: |
| 518 | - Default if not otherwise specified by setsockopt(2) | 536 | - Default if not otherwise specified by setsockopt(2) |
| 519 | - RX_RING, TX_RING available | 537 | - RX_RING, TX_RING available |
| 520 | - VLAN metadata information available for packets | ||
| 521 | (TP_STATUS_VLAN_VALID) | ||
| 522 | 538 | ||
| 523 | TPACKET_V1 --> TPACKET_V2: | 539 | TPACKET_V1 --> TPACKET_V2: |
| 524 | - Made 64 bit clean due to unsigned long usage in TPACKET_V1 | 540 | - Made 64 bit clean due to unsigned long usage in TPACKET_V1 |
| @@ -526,6 +542,13 @@ TPACKET_V1 --> TPACKET_V2: · 1 unmodified line | |||
| 526 | userspace and the like | 542 | userspace and the like |
| 527 | - Timestamp resolution in nanoseconds instead of microseconds | 543 | - Timestamp resolution in nanoseconds instead of microseconds |
| 528 | - RX_RING, TX_RING available | 544 | - RX_RING, TX_RING available |
| 545 | - VLAN metadata information available for packets | ||
| 546 | (TP_STATUS_VLAN_VALID, TP_STATUS_VLAN_TPID_VALID), | ||
| 547 | in the tpacket2_hdr structure: | ||
| 548 | - TP_STATUS_VLAN_VALID bit being set into the tp_status field indicates | ||
| 549 | that the tp_vlan_tci field has valid VLAN TCI value | ||
| 550 | - TP_STATUS_VLAN_TPID_VALID bit being set into the tp_status field | ||
| 551 | indicates that the tp_vlan_tpid field has valid VLAN TPID value | ||
| 529 | - How to switch to TPACKET_V2: | 552 | - How to switch to TPACKET_V2: |
| 530 | 1. Replace struct tpacket_hdr by struct tpacket2_hdr | 553 | 1. Replace struct tpacket_hdr by struct tpacket2_hdr |
| 531 | 2. Query header len and save | 554 | 2. Query header len and save |
| @@ -560,6 +583,7 @@ Currently implemented fanout policies are: · 28 unmodified lines | |||
| 560 | - PACKET_FANOUT_CPU: schedule to socket by CPU packet arrives on | 583 | - PACKET_FANOUT_CPU: schedule to socket by CPU packet arrives on |
| 561 | - PACKET_FANOUT_RND: schedule to socket by random selection | 584 | - PACKET_FANOUT_RND: schedule to socket by random selection |
| 562 | - PACKET_FANOUT_ROLLOVER: if one socket is full, rollover to another | 585 | - PACKET_FANOUT_ROLLOVER: if one socket is full, rollover to another |
| 586 | - PACKET_FANOUT_QM: schedule to socket by skbs recorded queue_mapping | ||
| 563 | 587 | ||
| 564 | Minimal example code by David S. Miller (try things like "./test eth0 hash", | 588 | Minimal example code by David S. Miller (try things like "./test eth0 hash", |
| 565 | "./test eth0 lb", etc.): | 589 | "./test eth0 lb", etc.): |
| @@ -952,6 +976,27 @@ int main(int argc, char **argp) · 386 unmodified lines | |||
| 952 | return 0; | 976 | return 0; |
| 953 | } | 977 | } |
| 954 | 978 | ||
| 979 | ------------------------------------------------------------------------------- | ||
| 980 | + PACKET_QDISC_BYPASS | ||
| 981 | ------------------------------------------------------------------------------- | ||
| 982 | |||
| 983 | If there is a requirement to load the network with many packets in a similar | ||
| 984 | fashion as pktgen does, you might set the following option after socket | ||
| 985 | creation: | ||
| 986 | |||
| 987 | int one = 1; | ||
| 988 | setsockopt(fd, SOL_PACKET, PACKET_QDISC_BYPASS, &one, sizeof(one)); | ||
| 989 | |||
| 990 | This has the side-effect, that packets sent through PF_PACKET will bypass the | ||
| 991 | kernel's qdisc layer and are forcedly pushed to the driver directly. Meaning, | ||
| 992 | packet are not buffered, tc disciplines are ignored, increased loss can occur | ||
| 993 | and such packets are also not visible to other PF_PACKET sockets anymore. So, | ||
| 994 | you have been warned; generally, this can be useful for stress testing various | ||
| 995 | components of a system. | ||
| 996 | |||
| 997 | On default, PACKET_QDISC_BYPASS is disabled and needs to be explicitly enabled | ||
| 998 | on PF_PACKET sockets. | ||
| 999 | |||
| 955 | ------------------------------------------------------------------------------- | 1000 | ------------------------------------------------------------------------------- |
| 956 | + PACKET_TIMESTAMP | 1001 | + PACKET_TIMESTAMP |
| 957 | ------------------------------------------------------------------------------- | 1002 | ------------------------------------------------------------------------------- |
| @@ -255,7 +255,8 @@ Writing a PHY driver · 254 unmodified lines | |||
| 255 | 255 | ||
| 256 | config_init: configures PHY into a sane state after a reset. | 256 | config_init: configures PHY into a sane state after a reset. |
| 257 | For instance, a Davicom PHY requires descrambling disabled. | 257 | For instance, a Davicom PHY requires descrambling disabled. |
| 258 | probe: Does any setup needed by the driver | 258 | probe: Allocate phy->priv, optionally refuse to bind. |
| 259 | PHY may not have been reset or had fixups run yet. | ||
| 259 | suspend/resume: power management | 260 | suspend/resume: power management |
| 260 | config_aneg: Changes the speed/duplex/negotiation settings | 261 | config_aneg: Changes the speed/duplex/negotiation settings |
| 261 | read_status: Reads the current speed/duplex/negotiation settings | 262 | read_status: Reads the current speed/duplex/negotiation settings |
| @@ -108,7 +108,9 @@ Examples: · 107 unmodified lines | |||
| 108 | MPLS_RND, VID_RND, SVID_RND | 108 | MPLS_RND, VID_RND, SVID_RND |
| 109 | QUEUE_MAP_RND # queue map random | 109 | QUEUE_MAP_RND # queue map random |
| 110 | QUEUE_MAP_CPU # queue map mirrors smp_processor_id() | 110 | QUEUE_MAP_CPU # queue map mirrors smp_processor_id() |
| 111 | IPSEC # Make IPsec encapsulation for packet | ||
| 111 | 112 | ||
| 113 | pgset spi SPI_VALUE Set specific SA used to transform packet. | ||
| 112 | 114 | ||
| 113 | pgset "udp_src_min 9" set UDP source port min, If < udp_src_max, then | 115 | pgset "udp_src_min 9" set UDP source port min, If < udp_src_max, then |
| 114 | cycle through the port range. | 116 | cycle through the port range. |
| @@ -177,6 +179,18 @@ Note when adding devices to a specific CPU there good idea to also assign · 62 unmodified lines | |||
| 177 | /proc/irq/XX/smp_affinity so the TX-interrupts gets bound to the same CPU. | 179 | /proc/irq/XX/smp_affinity so the TX-interrupts gets bound to the same CPU. |
| 178 | as this reduces cache bouncing when freeing skb's. | 180 | as this reduces cache bouncing when freeing skb's. |
| 179 | 181 | ||
| 182 | Enable IPsec | ||
| 183 | ============ | ||
| 184 | Default IPsec transformation with ESP encapsulation plus Transport mode | ||
| 185 | could be enabled by simply setting: | ||
| 186 | |||
| 187 | pgset "flag IPSEC" | ||
| 188 | pgset "flows 1" | ||
| 189 | |||
| 190 | To avoid breaking existing testbed scripts for using AH type and tunnel mode, | ||
| 191 | user could use "pgset spi SPI_VALUE" to specify which formal of transformation | ||
| 192 | to employ. | ||
| 193 | |||
| 180 | 194 | ||
| 181 | Current commands and configuration options | 195 | Current commands and configuration options |
| 182 | ========================================== | 196 | ========================================== |
| @@ -225,6 +239,7 @@ flag · 42 unmodified lines | |||
| 225 | UDPDST_RND | 239 | UDPDST_RND |
| 226 | MACSRC_RND | 240 | MACSRC_RND |
| 227 | MACDST_RND | 241 | MACDST_RND |
| 242 | IPSEC | ||
| 228 | 243 | ||
| 229 | dst_min | 244 | dst_min |
| 230 | dst_max | 245 | dst_max |
| @@ -159,10 +159,10 @@ struct ieee80211_regdomain mydriver_jp_regdom = { · 158 unmodified lines | |||
| 159 | REG_RULE(2412-20, 2484+20, 40, 6, 20, 0), | 159 | REG_RULE(2412-20, 2484+20, 40, 6, 20, 0), |
| 160 | /* IEEE 802.11a, channels 34..48 */ | 160 | /* IEEE 802.11a, channels 34..48 */ |
| 161 | REG_RULE(5170-20, 5240+20, 40, 6, 20, | 161 | REG_RULE(5170-20, 5240+20, 40, 6, 20, |
| 162 | NL80211_RRF_PASSIVE_SCAN), | 162 | NL80211_RRF_NO_IR), |
| 163 | /* IEEE 802.11a, channels 52..64 */ | 163 | /* IEEE 802.11a, channels 52..64 */ |
| 164 | REG_RULE(5260-20, 5320+20, 40, 6, 20, | 164 | REG_RULE(5260-20, 5320+20, 40, 6, 20, |
| 165 | NL80211_RRF_NO_IBSS | | 165 | NL80211_RRF_NO_IR| |
| 166 | NL80211_RRF_DFS), | 166 | NL80211_RRF_DFS), |
| 167 | } | 167 | } |
| 168 | }; | 168 | }; |
| @@ -127,8 +127,9 @@ struct plat_stmmacenet_data { · 126 unmodified lines | |||
| 127 | int riwt_off; | 127 | int riwt_off; |
| 128 | void (*fix_mac_speed)(void *priv, unsigned int speed); | 128 | void (*fix_mac_speed)(void *priv, unsigned int speed); |
| 129 | void (*bus_setup)(void __iomem *ioaddr); | 129 | void (*bus_setup)(void __iomem *ioaddr); |
| 130 | int (*init)(struct platform_device *pdev); | 130 | void *(*setup)(struct platform_device *pdev); |
| 131 | void (*exit)(struct platform_device *pdev); | 131 | int (*init)(struct platform_device *pdev, void *priv); |
| 132 | void (*exit)(struct platform_device *pdev, void *priv); | ||
| 132 | void *custom_cfg; | 133 | void *custom_cfg; |
| 133 | void *custom_data; | 134 | void *custom_data; |
| 134 | void *bsp_priv; | 135 | void *bsp_priv; |
| @@ -169,10 +170,13 @@ Where: · 34 unmodified lines | |||
| 169 | o bus_setup: perform HW setup of the bus. For example, on some ST platforms | 170 | o bus_setup: perform HW setup of the bus. For example, on some ST platforms |
| 170 | this field is used to configure the AMBA bridge to generate more | 171 | this field is used to configure the AMBA bridge to generate more |
| 171 | efficient STBus traffic. | 172 | efficient STBus traffic. |
| 172 | o init/exit: callbacks used for calling a custom initialization; | 173 | o setup/init/exit: callbacks used for calling a custom initialization; |
| 173 | this is sometime necessary on some platforms (e.g. ST boxes) | 174 | this is sometime necessary on some platforms (e.g. ST boxes) |
| 174 | where the HW needs to have set some PIO lines or system cfg | 175 | where the HW needs to have set some PIO lines or system cfg |
| 175 | registers. | 176 | registers. setup should return a pointer to private data, |
| 177 | which will be stored in bsp_priv, and then passed to init and | ||
| 178 | exit callbacks. init/exit callbacks should not use or modify | ||
| 179 | platform data. | ||
| 176 | o custom_cfg/custom_data: this is a custom configuration that can be passed | 180 | o custom_cfg/custom_data: this is a custom configuration that can be passed |
| 177 | while initializing the resources. | 181 | while initializing the resources. |
| 178 | o bsp_priv: another private pointer. | 182 | o bsp_priv: another private pointer. |
| @@ -85,7 +85,7 @@ Filled in if SOF_TIMESTAMPING_SYS_HARDWARE is set. Requires support · 84 unmodified lines | |||
| 85 | by the network device and will be empty without that support. | 85 | by the network device and will be empty without that support. |
| 86 | 86 | ||
| 87 | 87 | ||
| 88 | SIOCSHWTSTAMP: | 88 | SIOCSHWTSTAMP, SIOCGHWTSTAMP: |
| 89 | 89 | ||
| 90 | Hardware time stamping must also be initialized for each device driver | 90 | Hardware time stamping must also be initialized for each device driver |
| 91 | that is expected to do hardware time stamping. The parameter is defined in | 91 | that is expected to do hardware time stamping. The parameter is defined in |
| @@ -115,6 +115,10 @@ Only a processes with admin rights may change the configuration. User · 23 unmodified lines | |||
| 115 | space is responsible to ensure that multiple processes don't interfere | 115 | space is responsible to ensure that multiple processes don't interfere |
| 116 | with each other and that the settings are reset. | 116 | with each other and that the settings are reset. |
| 117 | 117 | ||
| 118 | Any process can read the actual configuration by passing this | ||
| 119 | structure to ioctl(SIOCGHWTSTAMP) in the same way. However, this has | ||
| 120 | not been implemented in all drivers. | ||
| 121 | |||
| 118 | /* possible values for hwtstamp_config->tx_type */ | 122 | /* possible values for hwtstamp_config->tx_type */ |
| 119 | enum { | 123 | enum { |
| 120 | /* | 124 | /* |
| @@ -157,7 +161,8 @@ DEVICE IMPLEMENTATION · 36 unmodified lines | |||
| 157 | 161 | ||
| 158 | A driver which supports hardware time stamping must support the | 162 | A driver which supports hardware time stamping must support the |
| 159 | SIOCSHWTSTAMP ioctl and update the supplied struct hwtstamp_config with | 163 | SIOCSHWTSTAMP ioctl and update the supplied struct hwtstamp_config with |
| 160 | the actual values as described in the section on SIOCSHWTSTAMP. | 164 | the actual values as described in the section on SIOCSHWTSTAMP. It |
| 165 | should also support SIOCGHWTSTAMP. | ||
| 161 | 166 | ||
| 162 | Time stamps for received packets must be stored in the skb. To get a pointer | 167 | Time stamps for received packets must be stored in the skb. To get a pointer |
| 163 | to the shared time stamp structure of the skb call skb_hwtstamps(). Then | 168 | to the shared time stamp structure of the skb call skb_hwtstamps(). Then |
| @@ -1 +1,2 @@ | |||
| 1 | timestamping | 1 | timestamping |
| 2 | hwtstamp_config | ||
| @@ -2,12 +2,13 @@ · 1 unmodified line | |||
| 2 | obj- := dummy.o | 2 | obj- := dummy.o |
| 3 | 3 | ||
| 4 | # List of programs to build | 4 | # List of programs to build |
| 5 | hostprogs-y := timestamping | 5 | hostprogs-y := timestamping hwtstamp_config |
| 6 | 6 | ||
| 7 | # Tell kbuild to always build the programs | 7 | # Tell kbuild to always build the programs |
| 8 | always := $(hostprogs-y) | 8 | always := $(hostprogs-y) |
| 9 | 9 | ||
| 10 | HOSTCFLAGS_timestamping.o += -I$(objtree)/usr/include | 10 | HOSTCFLAGS_timestamping.o += -I$(objtree)/usr/include |
| 11 | HOSTCFLAGS_hwtstamp_config.o += -I$(objtree)/usr/include | ||
| 11 | 12 | ||
| 12 | clean: | 13 | clean: |
| 13 | rm -f timestamping | 14 | rm -f timestamping hwtstamp_config |
| @@ -0,0 +1,134 @@ | |||
| 1 | /* Test program for SIOC{G,S}HWTSTAMP | ||
| 2 | * Copyright 2013 Solarflare Communications | ||
| 3 | * Author: Ben Hutchings | ||
| 4 | */ | ||
| 5 | |||
| 6 | #include <errno.h> | ||
| 7 | #include <stdio.h> | ||
| 8 | #include <stdlib.h> | ||
| 9 | #include <string.h> | ||
| 10 | |||
| 11 | #include <sys/socket.h> | ||
| 12 | #include <sys/ioctl.h> | ||
| 13 | |||
| 14 | #include <linux/if.h> | ||
| 15 | #include <linux/net_tstamp.h> | ||
| 16 | #include <linux/sockios.h> | ||
| 17 | |||
| 18 | static int | ||
| 19 | lookup_value(const char **names, int size, const char *name) | ||
| 20 | { | ||
| 21 | int value; | ||
| 22 | |||
| 23 | for (value = 0; value < size; value++) | ||
| 24 | if (names[value] && strcasecmp(names[value], name) == 0) | ||
| 25 | return value; | ||
| 26 | |||
| 27 | return -1; | ||
| 28 | } | ||
| 29 | |||
| 30 | static const char * | ||
| 31 | lookup_name(const char **names, int size, int value) | ||
| 32 | { | ||
| 33 | return (value >= 0 && value < size) ? names[value] : NULL; | ||
| 34 | } | ||
| 35 | |||
| 36 | static void list_names(FILE *f, const char **names, int size) | ||
| 37 | { | ||
| 38 | int value; | ||
| 39 | |||
| 40 | for (value = 0; value < size; value++) | ||
| 41 | if (names[value]) | ||
| 42 | fprintf(f, " %s\n", names[value]); | ||
| 43 | } | ||
| 44 | |||
| 45 | static const char *tx_types[] = { | ||
| 46 | #define TX_TYPE(name) [HWTSTAMP_TX_ ## name] = #name | ||
| 47 | TX_TYPE(OFF), | ||
| 48 | TX_TYPE(ON), | ||
| 49 | TX_TYPE(ONESTEP_SYNC) | ||
| 50 | #undef TX_TYPE | ||
| 51 | }; | ||
| 52 | #define N_TX_TYPES ((int)(sizeof(tx_types) / sizeof(tx_types[0]))) | ||
| 53 | |||
| 54 | static const char *rx_filters[] = { | ||
| 55 | #define RX_FILTER(name) [HWTSTAMP_FILTER_ ## name] = #name | ||
| 56 | RX_FILTER(NONE), | ||
| 57 | RX_FILTER(ALL), | ||
| 58 | RX_FILTER(SOME), | ||
| 59 | RX_FILTER(PTP_V1_L4_EVENT), | ||
| 60 | RX_FILTER(PTP_V1_L4_SYNC), | ||
| 61 | RX_FILTER(PTP_V1_L4_DELAY_REQ), | ||
| 62 | RX_FILTER(PTP_V2_L4_EVENT), | ||
| 63 | RX_FILTER(PTP_V2_L4_SYNC), | ||
| 64 | RX_FILTER(PTP_V2_L4_DELAY_REQ), | ||
| 65 | RX_FILTER(PTP_V2_L2_EVENT), | ||
| 66 | RX_FILTER(PTP_V2_L2_SYNC), | ||
| 67 | RX_FILTER(PTP_V2_L2_DELAY_REQ), | ||
| 68 | RX_FILTER(PTP_V2_EVENT), | ||
| 69 | RX_FILTER(PTP_V2_SYNC), | ||
| 70 | RX_FILTER(PTP_V2_DELAY_REQ), | ||
| 71 | #undef RX_FILTER | ||
| 72 | }; | ||
| 73 | #define N_RX_FILTERS ((int)(sizeof(rx_filters) / sizeof(rx_filters[0]))) | ||
| 74 | |||
| 75 | static void usage(void) | ||
| 76 | { | ||
| 77 | fputs("Usage: hwtstamp_config if_name [tx_type rx_filter]\n" | ||
| 78 | "tx_type is any of (case-insensitive):\n", | ||
| 79 | stderr); | ||
| 80 | list_names(stderr, tx_types, N_TX_TYPES); | ||
| 81 | fputs("rx_filter is any of (case-insensitive):\n", stderr); | ||
| 82 | list_names(stderr, rx_filters, N_RX_FILTERS); | ||
| 83 | } | ||
| 84 | |||
| 85 | int main(int argc, char **argv) | ||
| 86 | { | ||
| 87 | struct ifreq ifr; | ||
| 88 | struct hwtstamp_config config; | ||
| 89 | const char *name; | ||
| 90 | int sock; | ||
| 91 | |||
| 92 | if ((argc != 2 && argc != 4) || (strlen(argv[1]) >= IFNAMSIZ)) { | ||
| 93 | usage(); | ||
| 94 | return 2; | ||
| 95 | } | ||
| 96 | |||
| 97 | if (argc == 4) { | ||
| 98 | config.flags = 0; | ||
| 99 | config.tx_type = lookup_value(tx_types, N_TX_TYPES, argv[2]); | ||
| 100 | config.rx_filter = lookup_value(rx_filters, N_RX_FILTERS, argv[3]); | ||
| 101 | if (config.tx_type < 0 || config.rx_filter < 0) { | ||
| 102 | usage(); | ||
| 103 | return 2; | ||
| 104 | } | ||
| 105 | } | ||
| 106 | |||
| 107 | sock = socket(AF_INET, SOCK_DGRAM, 0); | ||
| 108 | if (sock < 0) { | ||
| 109 | perror("socket"); | ||
| 110 | return 1; | ||
| 111 | } | ||
| 112 | |||
| 113 | strcpy(ifr.ifr_name, argv[1]); | ||
| 114 | ifr.ifr_data = (caddr_t)&config; | ||
| 115 | |||
| 116 | if (ioctl(sock, (argc == 2) ? SIOCGHWTSTAMP : SIOCSHWTSTAMP, &ifr)) { | ||
| 117 | perror("ioctl"); | ||
| 118 | return 1; | ||
| 119 | } | ||
| 120 | |||
| 121 | printf("flags = %#x\n", config.flags); | ||
| 122 | name = lookup_name(tx_types, N_TX_TYPES, config.tx_type); | ||
| 123 | if (name) | ||
| 124 | printf("tx_type = %s\n", name); | ||
| 125 | else | ||
| 126 | printf("tx_type = %d\n", config.tx_type); | ||
| 127 | name = lookup_name(rx_filters, N_RX_FILTERS, config.rx_filter); | ||
| 128 | if (name) | ||
| 129 | printf("rx_filter = %s\n", name); | ||
| 130 | else | ||
| 131 | printf("rx_filter = %d\n", config.rx_filter); | ||
| 132 | |||
| 133 | return 0; | ||
| 134 | } | ||
| @@ -18,7 +18,7 @@ Definition of PIN CONTROLLER: · 17 unmodified lines | |||
| 18 | 18 | ||
| 19 | - A pin controller is a piece of hardware, usually a set of registers, that | 19 | - A pin controller is a piece of hardware, usually a set of registers, that |
| 20 | can control PINs. It may be able to multiplex, bias, set load capacitance, | 20 | can control PINs. It may be able to multiplex, bias, set load capacitance, |
| 21 | set drive strength etc for individual pins or groups of pins. | 21 | set drive strength, etc. for individual pins or groups of pins. |
| 22 | 22 | ||
| 23 | Definition of PIN: | 23 | Definition of PIN: |
| 24 | 24 | ||
| @@ -90,7 +90,7 @@ selected drivers, you need to select them from your machine's Kconfig entry, · 65 unmodified lines | |||
| 90 | since these are so tightly integrated with the machines they are used on. | 90 | since these are so tightly integrated with the machines they are used on. |
| 91 | See for example arch/arm/mach-u300/Kconfig for an example. | 91 | See for example arch/arm/mach-u300/Kconfig for an example. |
| 92 | 92 | ||
| 93 | Pins usually have fancier names than this. You can find these in the dataheet | 93 | Pins usually have fancier names than this. You can find these in the datasheet |
| 94 | for your chip. Notice that the core pinctrl.h file provides a fancy macro | 94 | for your chip. Notice that the core pinctrl.h file provides a fancy macro |
| 95 | called PINCTRL_PIN() to create the struct entries. As you can see I enumerated | 95 | called PINCTRL_PIN() to create the struct entries. As you can see I enumerated |
| 96 | the pins from 0 in the upper left corner to 63 in the lower right corner. | 96 | the pins from 0 in the upper left corner to 63 in the lower right corner. |
| @@ -185,7 +185,7 @@ static struct pinctrl_desc foo_desc = { · 88 unmodified lines | |||
| 185 | }; | 185 | }; |
| 186 | 186 | ||
| 187 | The pin control subsystem will call the .get_groups_count() function to | 187 | The pin control subsystem will call the .get_groups_count() function to |
| 188 | determine total number of legal selectors, then it will call the other functions | 188 | determine the total number of legal selectors, then it will call the other functions |
| 189 | to retrieve the name and pins of the group. Maintaining the data structure of | 189 | to retrieve the name and pins of the group. Maintaining the data structure of |
| 190 | the groups is up to the driver, this is just a simple example - in practice you | 190 | the groups is up to the driver, this is just a simple example - in practice you |
| 191 | may need more entries in your group structure, for example specific register | 191 | may need more entries in your group structure, for example specific register |
| @@ -195,7 +195,7 @@ ranges associated with each group and so on. · 3 unmodified lines | |||
| 195 | Pin configuration | 195 | Pin configuration |
| 196 | ================= | 196 | ================= |
| 197 | 197 | ||
| 198 | Pins can sometimes be software-configured in an various ways, mostly related | 198 | Pins can sometimes be software-configured in various ways, mostly related |
| 199 | to their electronic properties when used as inputs or outputs. For example you | 199 | to their electronic properties when used as inputs or outputs. For example you |
| 200 | may be able to make an output pin high impedance, or "tristate" meaning it is | 200 | may be able to make an output pin high impedance, or "tristate" meaning it is |
| 201 | effectively disconnected. You may be able to connect an input pin to VDD or GND | 201 | effectively disconnected. You may be able to connect an input pin to VDD or GND |
| @@ -291,7 +291,7 @@ Since the pin controller subsystem have its pinspace local to the pin · 89 unmodified lines | |||
| 291 | controller we need a mapping so that the pin control subsystem can figure out | 291 | controller we need a mapping so that the pin control subsystem can figure out |
| 292 | which pin controller handles control of a certain GPIO pin. Since a single | 292 | which pin controller handles control of a certain GPIO pin. Since a single |
| 293 | pin controller may be muxing several GPIO ranges (typically SoCs that have | 293 | pin controller may be muxing several GPIO ranges (typically SoCs that have |
| 294 | one set of pins but internally several GPIO silicon blocks, each modelled as | 294 | one set of pins, but internally several GPIO silicon blocks, each modelled as |
| 295 | a struct gpio_chip) any number of GPIO ranges can be added to a pin controller | 295 | a struct gpio_chip) any number of GPIO ranges can be added to a pin controller |
| 296 | instance like this: | 296 | instance like this: |
| 297 | 297 | ||
| @@ -373,9 +373,9 @@ will be called on that specific pin controller. · 75 unmodified lines | |||
| 373 | 373 | ||
| 374 | For all functionalities dealing with pin biasing, pin muxing etc, the pin | 374 | For all functionalities dealing with pin biasing, pin muxing etc, the pin |
| 375 | controller subsystem will look up the corresponding pin number from the passed | 375 | controller subsystem will look up the corresponding pin number from the passed |
| 376 | in gpio number, and use the range's internals to retrive a pin number. After | 376 | in gpio number, and use the range's internals to retrieve a pin number. After |
| 377 | that, the subsystem passes it on to the pin control driver, so the driver | 377 | that, the subsystem passes it on to the pin control driver, so the driver |
| 378 | will get an pin number into its handled number range. Further it is also passed | 378 | will get a pin number into its handled number range. Further it is also passed |
| 379 | the range ID value, so that the pin controller knows which range it should | 379 | the range ID value, so that the pin controller knows which range it should |
| 380 | deal with. | 380 | deal with. |
| 381 | 381 | ||
| @@ -430,8 +430,8 @@ pins you see some will be taken by things like a few VCC and GND to feed power · 48 unmodified lines | |||
| 430 | to the chip, and quite a few will be taken by large ports like an external | 430 | to the chip, and quite a few will be taken by large ports like an external |
| 431 | memory interface. The remaining pins will often be subject to pin multiplexing. | 431 | memory interface. The remaining pins will often be subject to pin multiplexing. |
| 432 | 432 | ||
| 433 | The example 8x8 PGA package above will have pin numbers 0 thru 63 assigned to | 433 | The example 8x8 PGA package above will have pin numbers 0 through 63 assigned |
| 434 | its physical pins. It will name the pins { A1, A2, A3 ... H6, H7, H8 } using | 434 | to its physical pins. It will name the pins { A1, A2, A3 ... H6, H7, H8 } using |
| 435 | pinctrl_register_pins() and a suitable data set as shown earlier. | 435 | pinctrl_register_pins() and a suitable data set as shown earlier. |
| 436 | 436 | ||
| 437 | In this 8x8 BGA package the pins { A8, A7, A6, A5 } can be used as an SPI port | 437 | In this 8x8 BGA package the pins { A8, A7, A6, A5 } can be used as an SPI port |
| @@ -442,7 +442,7 @@ we cannot use the SPI port and I2C port at the same time. However in the inside · 4 unmodified lines | |||
| 442 | of the package the silicon performing the SPI logic can alternatively be routed | 442 | of the package the silicon performing the SPI logic can alternatively be routed |
| 443 | out on pins { G4, G3, G2, G1 }. | 443 | out on pins { G4, G3, G2, G1 }. |
| 444 | 444 | ||
| 445 | On the botton row at { A1, B1, C1, D1, E1, F1, G1, H1 } we have something | 445 | On the bottom row at { A1, B1, C1, D1, E1, F1, G1, H1 } we have something |
| 446 | special - it's an external MMC bus that can be 2, 4 or 8 bits wide, and it will | 446 | special - it's an external MMC bus that can be 2, 4 or 8 bits wide, and it will |
| 447 | consume 2, 4 or 8 pins respectively, so either { A1, B1 } are taken or | 447 | consume 2, 4 or 8 pins respectively, so either { A1, B1 } are taken or |
| 448 | { A1, B1, C1, D1 } or all of them. If we use all 8 bits, we cannot use the SPI | 448 | { A1, B1, C1, D1 } or all of them. If we use all 8 bits, we cannot use the SPI |
| @@ -549,7 +549,7 @@ Assumptions: · 100 unmodified lines | |||
| 549 | 549 | ||
| 550 | We assume that the number of possible function maps to pin groups is limited by | 550 | We assume that the number of possible function maps to pin groups is limited by |
| 551 | the hardware. I.e. we assume that there is no system where any function can be | 551 | the hardware. I.e. we assume that there is no system where any function can be |
| 552 | mapped to any pin, like in a phone exchange. So the available pins groups for | 552 | mapped to any pin, like in a phone exchange. So the available pin groups for |
| 553 | a certain function will be limited to a few choices (say up to eight or so), | 553 | a certain function will be limited to a few choices (say up to eight or so), |
| 554 | not hundreds or any amount of choices. This is the characteristic we have found | 554 | not hundreds or any amount of choices. This is the characteristic we have found |
| 555 | by inspecting available pinmux hardware, and a necessary assumption since we | 555 | by inspecting available pinmux hardware, and a necessary assumption since we |
| @@ -564,7 +564,7 @@ The pinmux core takes care of preventing conflicts on pins and calling · 8 unmodified lines | |||
| 564 | the pin controller driver to execute different settings. | 564 | the pin controller driver to execute different settings. |
| 565 | 565 | ||
| 566 | It is the responsibility of the pinmux driver to impose further restrictions | 566 | It is the responsibility of the pinmux driver to impose further restrictions |
| 567 | (say for example infer electronic limitations due to load etc) to determine | 567 | (say for example infer electronic limitations due to load, etc.) to determine |
| 568 | whether or not the requested function can actually be allowed, and in case it | 568 | whether or not the requested function can actually be allowed, and in case it |
| 569 | is possible to perform the requested mux setting, poke the hardware so that | 569 | is possible to perform the requested mux setting, poke the hardware so that |
| 570 | this happens. | 570 | this happens. |
| @@ -755,7 +755,7 @@ Pin control interaction with the GPIO subsystem · 184 unmodified lines | |||
| 755 | Note that the following implies that the use case is to use a certain pin | 755 | Note that the following implies that the use case is to use a certain pin |
| 756 | from the Linux kernel using the API in <linux/gpio.h> with gpio_request() | 756 | from the Linux kernel using the API in <linux/gpio.h> with gpio_request() |
| 757 | and similar functions. There are cases where you may be using something | 757 | and similar functions. There are cases where you may be using something |
| 758 | that your datasheet calls "GPIO mode" but actually is just an electrical | 758 | that your datasheet calls "GPIO mode", but actually is just an electrical |
| 759 | configuration for a certain device. See the section below named | 759 | configuration for a certain device. See the section below named |
| 760 | "GPIO mode pitfalls" for more details on this scenario. | 760 | "GPIO mode pitfalls" for more details on this scenario. |
| 761 | 761 | ||
| @@ -871,7 +871,7 @@ hardware and shall be put into different subsystems: · 109 unmodified lines | |||
| 871 | 871 | ||
| 872 | - Registers (or fields within registers) that control muxing of signals | 872 | - Registers (or fields within registers) that control muxing of signals |
| 873 | from various other HW blocks (e.g. I2C, MMC, or GPIO) onto pins should | 873 | from various other HW blocks (e.g. I2C, MMC, or GPIO) onto pins should |
| 874 | be exposed through the pinctrl subssytem, as mux functions. | 874 | be exposed through the pinctrl subsystem, as mux functions. |
| 875 | 875 | ||
| 876 | - Registers (or fields within registers) that control GPIO functionality | 876 | - Registers (or fields within registers) that control GPIO functionality |
| 877 | such as setting a GPIO's output value, reading a GPIO's input value, or | 877 | such as setting a GPIO's output value, reading a GPIO's input value, or |
| @@ -895,7 +895,7 @@ Example: a pin is usually muxed in to be used as a UART TX line. But during · 17 unmodified lines | |||
| 895 | system sleep, we need to put this pin into "GPIO mode" and ground it. | 895 | system sleep, we need to put this pin into "GPIO mode" and ground it. |
| 896 | 896 | ||
| 897 | If you make a 1-to-1 map to the GPIO subsystem for this pin, you may start | 897 | If you make a 1-to-1 map to the GPIO subsystem for this pin, you may start |
| 898 | to think that you need to come up with something real complex, that the | 898 | to think that you need to come up with something really complex, that the |
| 899 | pin shall be used for UART TX and GPIO at the same time, that you will grab | 899 | pin shall be used for UART TX and GPIO at the same time, that you will grab |
| 900 | a pin control handle and set it to a certain state to enable UART TX to be | 900 | a pin control handle and set it to a certain state to enable UART TX to be |
| 901 | muxed in, then twist it over to GPIO mode and use gpio_direction_output() | 901 | muxed in, then twist it over to GPIO mode and use gpio_direction_output() |
| @@ -964,12 +964,12 @@ GPIO mode. · 62 unmodified lines | |||
| 964 | This will give the desired effect without any bogus interaction with the | 964 | This will give the desired effect without any bogus interaction with the |
| 965 | GPIO subsystem. It is just an electrical configuration used by that device | 965 | GPIO subsystem. It is just an electrical configuration used by that device |
| 966 | when going to sleep, it might imply that the pin is set into something the | 966 | when going to sleep, it might imply that the pin is set into something the |
| 967 | datasheet calls "GPIO mode" but that is not the point: it is still used | 967 | datasheet calls "GPIO mode", but that is not the point: it is still used |
| 968 | by that UART device to control the pins that pertain to that very UART | 968 | by that UART device to control the pins that pertain to that very UART |
| 969 | driver, putting them into modes needed by the UART. GPIO in the Linux | 969 | driver, putting them into modes needed by the UART. GPIO in the Linux |
| 970 | kernel sense are just some 1-bit line, and is a different use case. | 970 | kernel sense are just some 1-bit line, and is a different use case. |
| 971 | 971 | ||
| 972 | How the registers are poked to attain the push/pull and output low | 972 | How the registers are poked to attain the push or pull, and output low |
| 973 | configuration and the muxing of the "u0" or "gpio-mode" group onto these | 973 | configuration and the muxing of the "u0" or "gpio-mode" group onto these |
| 974 | pins is a question for the driver. | 974 | pins is a question for the driver. |
| 975 | 975 | ||
| @@ -977,7 +977,7 @@ Some datasheets will be more helpful and refer to the "GPIO mode" as · 1 unmodified line | |||
| 977 | "low power mode" rather than anything to do with GPIO. This often means | 977 | "low power mode" rather than anything to do with GPIO. This often means |
| 978 | the same thing electrically speaking, but in this latter case the | 978 | the same thing electrically speaking, but in this latter case the |
| 979 | software engineers will usually quickly identify that this is some | 979 | software engineers will usually quickly identify that this is some |
| 980 | specific muxing/configuration rather than anything related to the GPIO | 980 | specific muxing or configuration rather than anything related to the GPIO |
| 981 | API. | 981 | API. |
| 982 | 982 | ||
| 983 | 983 | ||
| @@ -1024,8 +1024,7 @@ up the device struct (just like with clockdev or regulators). The function name · 40 unmodified lines | |||
| 1024 | must match a function provided by the pinmux driver handling this pin range. | 1024 | must match a function provided by the pinmux driver handling this pin range. |
| 1025 | 1025 | ||
| 1026 | As you can see we may have several pin controllers on the system and thus | 1026 | As you can see we may have several pin controllers on the system and thus |
| 1027 | we need to specify which one of them that contain the functions we wish | 1027 | we need to specify which one of them contains the functions we wish to map. |
| 1028 | to map. | ||
| 1029 | 1028 | ||
| 1030 | You register this pinmux mapping to the pinmux subsystem by simply: | 1029 | You register this pinmux mapping to the pinmux subsystem by simply: |
| 1031 | 1030 | ||
| @@ -1254,10 +1253,10 @@ The semantics of the pinctrl APIs are: · 222 unmodified lines | |||
| 1254 | pinctrl_get(). | 1253 | pinctrl_get(). |
| 1255 | 1254 | ||
| 1256 | - pinctrl_lookup_state() is called in process context to obtain a handle to a | 1255 | - pinctrl_lookup_state() is called in process context to obtain a handle to a |
| 1257 | specific state for a the client device. This operation may be slow too. | 1256 | specific state for a client device. This operation may be slow, too. |
| 1258 | 1257 | ||
| 1259 | - pinctrl_select_state() programs pin controller hardware according to the | 1258 | - pinctrl_select_state() programs pin controller hardware according to the |
| 1260 | definition of the state as given by the mapping table. In theory this is a | 1259 | definition of the state as given by the mapping table. In theory, this is a |
| 1261 | fast-path operation, since it only involved blasting some register settings | 1260 | fast-path operation, since it only involved blasting some register settings |
| 1262 | into hardware. However, note that some pin controllers may have their | 1261 | into hardware. However, note that some pin controllers may have their |
| 1263 | registers on a slow/IRQ-based bus, so client devices should not assume they | 1262 | registers on a slow/IRQ-based bus, so client devices should not assume they |
| @@ -172,7 +172,7 @@ you can boot the kernel with the 'no_console_suspend' parameter and try to log · 171 unmodified lines | |||
| 172 | kernel messages using the serial console. This may provide you with some | 172 | kernel messages using the serial console. This may provide you with some |
| 173 | information about the reasons of the suspend (resume) failure. Alternatively, | 173 | information about the reasons of the suspend (resume) failure. Alternatively, |
| 174 | it may be possible to use a FireWire port for debugging with firescope | 174 | it may be possible to use a FireWire port for debugging with firescope |
| 175 | (ftp://ftp.firstfloor.org/pub/ak/firescope/). On x86 it is also possible to | 175 | (http://v3.sk/~lkundrak/firescope/). On x86 it is also possible to |
| 176 | use the PM_TRACE mechanism documented in Documentation/power/s2ram.txt . | 176 | use the PM_TRACE mechanism documented in Documentation/power/s2ram.txt . |
| 177 | 177 | ||
| 178 | 2. Testing suspend to RAM (STR) | 178 | 2. Testing suspend to RAM (STR) |
| @@ -55,14 +55,21 @@ Struct Resources: · 54 unmodified lines | |||
| 55 | For printing struct resources. The 'R' and 'r' specifiers result in a | 55 | For printing struct resources. The 'R' and 'r' specifiers result in a |
| 56 | printed resource with ('R') or without ('r') a decoded flags member. | 56 | printed resource with ('R') or without ('r') a decoded flags member. |
| 57 | 57 | ||
| 58 | Physical addresses: | 58 | Physical addresses types phys_addr_t: |
| 59 | 59 | ||
| 60 | %pa 0x01234567 or 0x0123456789abcdef | 60 | %pa[p] 0x01234567 or 0x0123456789abcdef |
| 61 | 61 | ||
| 62 | For printing a phys_addr_t type (and its derivatives, such as | 62 | For printing a phys_addr_t type (and its derivatives, such as |
| 63 | resource_size_t) which can vary based on build options, regardless of | 63 | resource_size_t) which can vary based on build options, regardless of |
| 64 | the width of the CPU data path. Passed by reference. | 64 | the width of the CPU data path. Passed by reference. |
| 65 | 65 | ||
| 66 | DMA addresses types dma_addr_t: | ||
| 67 | |||
| 68 | %pad 0x01234567 or 0x0123456789abcdef | ||
| 69 | |||
| 70 | For printing a dma_addr_t type which can vary based on build options, | ||
| 71 | regardless of the width of the CPU data path. Passed by reference. | ||
| 72 | |||
| 66 | Raw buffer as a hex string: | 73 | Raw buffer as a hex string: |
| 67 | %*ph 00 01 02 ... 3f | 74 | %*ph 00 01 02 ... 3f |
| 68 | %*phC 00:01:02: ... :3f | 75 | %*phC 00:01:02: ... :3f |
| @@ -71,7 +71,7 @@ To create an rfkill driver, driver's Kconfig needs to have · 70 unmodified lines | |||
| 71 | depends on RFKILL || !RFKILL | 71 | depends on RFKILL || !RFKILL |
| 72 | 72 | ||
| 73 | to ensure the driver cannot be built-in when rfkill is modular. The !RFKILL | 73 | to ensure the driver cannot be built-in when rfkill is modular. The !RFKILL |
| 74 | case allows the driver to be built when rfkill is not configured, which which | 74 | case allows the driver to be built when rfkill is not configured, which |
| 75 | case all rfkill API can still be used but will be provided by static inlines | 75 | case all rfkill API can still be used but will be provided by static inlines |
| 76 | which compile to almost nothing. | 76 | which compile to almost nothing. |
| 77 | 77 | ||
| @@ -30,7 +30,7 @@ is something called unbounded priority inversion. That is when the high · 29 unmodified lines | |||
| 30 | priority process is prevented from running by a lower priority process for | 30 | priority process is prevented from running by a lower priority process for |
| 31 | an undetermined amount of time. | 31 | an undetermined amount of time. |
| 32 | 32 | ||
| 33 | The classic example of unbounded priority inversion is were you have three | 33 | The classic example of unbounded priority inversion is where you have three |
| 34 | processes, let's call them processes A, B, and C, where A is the highest | 34 | processes, let's call them processes A, B, and C, where A is the highest |
| 35 | priority process, C is the lowest, and B is in between. A tries to grab a lock | 35 | priority process, C is the lowest, and B is in between. A tries to grab a lock |
| 36 | that C owns and must wait and lets C run to release the lock. But in the | 36 | that C owns and must wait and lets C run to release the lock. But in the |
| @@ -0,0 +1,50 @@ | |||
| 1 | IBM s390 QDIO Ethernet Driver | ||
| 2 | |||
| 3 | HiperSockets Bridge Port Support | ||
| 4 | |||
| 5 | Uevents | ||
| 6 | |||
| 7 | To generate the events the device must be assigned a role of either | ||
| 8 | a primary or a secondary Bridge Port. For more information, see | ||
| 9 | "z/VM Connectivity, SC24-6174". | ||
| 10 | |||
| 11 | When run on HiperSockets Bridge Capable Port hardware, and the state | ||
| 12 | of some configured Bridge Port device on the channel changes, a udev | ||
| 13 | event with ACTION=CHANGE is emitted on behalf of the corresponding | ||
| 14 | ccwgroup device. The event has the following attributes: | ||
| 15 | |||
| 16 | BRIDGEPORT=statechange - indicates that the Bridge Port device changed | ||
| 17 | its state. | ||
| 18 | |||
| 19 | ROLE={primary|secondary|none} - the role assigned to the port. | ||
| 20 | |||
| 21 | STATE={active|standby|inactive} - the newly assumed state of the port. | ||
| 22 | |||
| 23 | When run on HiperSockets Bridge Capable Port hardware with host address | ||
| 24 | notifications enabled, a udev event with ACTION=CHANGE is emitted. | ||
| 25 | It is emitted on behalf of the corresponding ccwgroup device when a host | ||
| 26 | or a VLAN is registered or unregistered on the network served by the device. | ||
| 27 | The event has the following attributes: | ||
| 28 | |||
| 29 | BRIDGEDHOST={reset|register|deregister|abort} - host address | ||
| 30 | notifications are started afresh, a new host or VLAN is registered or | ||
| 31 | deregistered on the Bridge Port HiperSockets channel, or address | ||
| 32 | notifications are aborted. | ||
| 33 | |||
| 34 | VLAN=numeric-vlan-id - VLAN ID on which the event occurred. Not included | ||
| 35 | if no VLAN is involved in the event. | ||
| 36 | |||
| 37 | MAC=xx:xx:xx:xx:xx:xx - MAC address of the host that is being registered | ||
| 38 | or deregistered from the HiperSockets channel. Not reported if the | ||
| 39 | event reports the creation or destruction of a VLAN. | ||
| 40 | |||
| 41 | NTOK_BUSID=x.y.zzzz - device bus ID (CSSID, SSID and device number). | ||
| 42 | |||
| 43 | NTOK_IID=xx - device IID. | ||
| 44 | |||
| 45 | NTOK_CHPID=xx - device CHPID. | ||
| 46 | |||
| 47 | NTOK_CHID=xxxx - device channel ID. | ||
| 48 | |||
| 49 | Note that the NTOK_* attributes refer to devices other than the one | ||
| 50 | connected to the system on which the OS is running. | ||
| @@ -42,8 +42,6 @@ aic79xx.txt · 41 unmodified lines | |||
| 42 | - Adaptec Ultra320 SCSI host adapters | 42 | - Adaptec Ultra320 SCSI host adapters |
| 43 | aic7xxx.txt | 43 | aic7xxx.txt |
| 44 | - info on driver for Adaptec controllers | 44 | - info on driver for Adaptec controllers |
| 45 | aic7xxx_old.txt | ||
| 46 | - info on driver for Adaptec controllers, old generation | ||
| 47 | arcmsr_spec.txt | 45 | arcmsr_spec.txt |
| 48 | - ARECA FIRMWARE SPEC (for IOP331 adapter) | 46 | - ARECA FIRMWARE SPEC (for IOP331 adapter) |
| 49 | dc395x.txt | 47 | dc395x.txt |
| @@ -1,511 +0,0 @@ | |||
| 1 | AIC7xxx Driver for Linux | ||
| 2 | |||
| 3 | Introduction | ||
| 4 | ---------------------------- | ||
| 5 | The AIC7xxx SCSI driver adds support for Adaptec (http://www.adaptec.com) | ||
| 6 | SCSI controllers and chipsets. Major portions of the driver and driver | ||
| 7 | development are shared between both Linux and FreeBSD. Support for the | ||
| 8 | AIC-7xxx chipsets have been in the default Linux kernel since approximately | ||
| 9 | linux-1.1.x and fairly stable since linux-1.2.x, and are also in FreeBSD | ||
| 10 | 2.1.0 or later. | ||
| 11 | |||
| 12 | Supported cards/chipsets | ||
| 13 | ---------------------------- | ||
| 14 | Adaptec Cards | ||
| 15 | ---------------------------- | ||
| 16 | AHA-274x | ||
| 17 | AHA-274xT | ||
| 18 | AHA-2842 | ||
| 19 | AHA-2910B | ||
| 20 | AHA-2920C | ||
| 21 | AHA-2930 | ||
| 22 | AHA-2930U | ||
| 23 | AHA-2930CU | ||
| 24 | AHA-2930U2 | ||
| 25 | AHA-2940 | ||
| 26 | AHA-2940W | ||
| 27 | AHA-2940U | ||
| 28 | AHA-2940UW | ||
| 29 | AHA-2940UW-PRO | ||
| 30 | AHA-2940AU | ||
| 31 | AHA-2940U2W | ||
| 32 | AHA-2940U2 | ||
| 33 | AHA-2940U2B | ||
| 34 | AHA-2940U2BOEM | ||
| 35 | AHA-2944D | ||
| 36 | AHA-2944WD | ||
| 37 | AHA-2944UD | ||
| 38 | AHA-2944UWD | ||
| 39 | AHA-2950U2 | ||
| 40 | AHA-2950U2W | ||
| 41 | AHA-2950U2B | ||
| 42 | AHA-29160M | ||
| 43 | AHA-3940 | ||
| 44 | AHA-3940U | ||
| 45 | AHA-3940W | ||
| 46 | AHA-3940UW | ||
| 47 | AHA-3940AUW | ||
| 48 | AHA-3940U2W | ||
| 49 | AHA-3950U2B | ||
| 50 | AHA-3950U2D | ||
| 51 | AHA-3960D | ||
| 52 | AHA-39160M | ||
| 53 | AHA-3985 | ||
| 54 | AHA-3985U | ||
| 55 | AHA-3985W | ||
| 56 | AHA-3985UW | ||
| 57 | |||
| 58 | Motherboard Chipsets | ||
| 59 | ---------------------------- | ||
| 60 | AIC-777x | ||
| 61 | AIC-785x | ||
| 62 | AIC-786x | ||
| 63 | AIC-787x | ||
| 64 | AIC-788x | ||
| 65 | AIC-789x | ||
| 66 | AIC-3860 | ||
| 67 | |||
| 68 | Bus Types | ||
| 69 | ---------------------------- | ||
| 70 | W - Wide SCSI, SCSI-3, 16bit bus, 68pin connector, will also support | ||
| 71 | SCSI-1/SCSI-2 50pin devices, transfer rates up to 20MB/s. | ||
| 72 | U - Ultra SCSI, transfer rates up to 40MB/s. | ||
| 73 | U2- Ultra 2 SCSI, transfer rates up to 80MB/s. | ||
| 74 | D - Differential SCSI. | ||
| 75 | T - Twin Channel SCSI. Up to 14 SCSI devices. | ||
| 76 | |||
| 77 | AHA-274x - EISA SCSI controller | ||
| 78 | AHA-284x - VLB SCSI controller | ||
| 79 | AHA-29xx - PCI SCSI controller | ||
| 80 | AHA-394x - PCI controllers with two separate SCSI controllers on-board. | ||
| 81 | AHA-398x - PCI RAID controllers with three separate SCSI controllers | ||
| 82 | on-board. | ||
| 83 | |||
| 84 | Not Supported Devices | ||
| 85 | ------------------------------ | ||
| 86 | Adaptec Cards | ||
| 87 | ---------------------------- | ||
| 88 | AHA-2920 (Only the cards that use the Future Domain chipset are not | ||
| 89 | supported, any 2920 cards based on Adaptec AIC chipsets, | ||
| 90 | such as the 2920C, are supported) | ||
| 91 | AAA-13x Raid Adapters | ||
| 92 | AAA-113x Raid Port Card | ||
| 93 | |||
| 94 | Motherboard Chipsets | ||
| 95 | ---------------------------- | ||
| 96 | AIC-7810 | ||
| 97 | |||
| 98 | Bus Types | ||
| 99 | ---------------------------- | ||
| 100 | R - Raid Port busses are not supported. | ||
| 101 | |||
| 102 | The hardware RAID devices sold by Adaptec are *NOT* supported by this | ||
| 103 | driver (and will people please stop emailing me about them, they are | ||
| 104 | a totally separate beast from the bare SCSI controllers and this driver | ||
| 105 | cannot be retrofitted in any sane manner to support the hardware RAID | ||
| 106 | features on those cards - Doug Ledford). | ||
| 107 | |||
| 108 | |||
| 109 | People | ||
| 110 | ------------------------------ | ||
| 111 | Justin T Gibbs gibbs@plutotech.com | ||
| 112 | (BSD Driver Author) | ||
| 113 | Dan Eischen deischen@iworks.InterWorks.org | ||
| 114 | (Original Linux Driver Co-maintainer) | ||
| 115 | Dean Gehnert deang@teleport.com | ||
| 116 | (Original Linux FTP/patch maintainer) | ||
| 117 | Jess Johnson jester@frenzy.com | ||
| 118 | (AIC7xxx FAQ author) | ||
| 119 | Doug Ledford dledford@redhat.com | ||
| 120 | (Current Linux aic7xxx-5.x.x Driver/Patch/FTP maintainer) | ||
| 121 | |||
| 122 | Special thanks go to John Aycock (aycock@cpsc.ucalgary.ca), the original | ||
| 123 | author of the driver. John has since retired from the project. Thanks | ||
| 124 | again for all his work! | ||
| 125 | |||
| 126 | Mailing list | ||
| 127 | ------------------------------ | ||
| 128 | There is a mailing list available for users who want to track development | ||
| 129 | and converse with other users and developers. This list is for both | ||
| 130 | FreeBSD and Linux support of the AIC7xxx chipsets. | ||
| 131 | |||
| 132 | To subscribe to the AIC7xxx mailing list send mail to the list server, | ||
| 133 | with "subscribe AIC7xxx" in the body (no Subject: required): | ||
| 134 | To: majordomo@FreeBSD.ORG | ||
| 135 | --- | ||
| 136 | subscribe AIC7xxx | ||
| 137 | |||
| 138 | To unsubscribe from the list, send mail to the list server with: | ||
| 139 | To: majordomo@FreeBSD.ORG | ||
| 140 | --- | ||
| 141 | unsubscribe AIC7xxx | ||
| 142 | |||
| 143 | Send regular messages and replies to: AIC7xxx@FreeBSD.ORG | ||
| 144 | |||
| 145 | Boot Command line options | ||
| 146 | ------------------------------ | ||
| 147 | "aic7xxx=no_reset" - Eliminate the SCSI bus reset during startup. | ||
| 148 | Some SCSI devices need the initial reset that this option disables | ||
| 149 | in order to work. If you have problems at bootup, please make sure | ||
| 150 | you aren't using this option. | ||
| 151 | |||
| 152 | "aic7xxx=reverse_scan" - Certain PCI motherboards scan for devices at | ||
| 153 | bootup by scanning from the highest numbered PCI device to the | ||
| 154 | lowest numbered PCI device, others do just the opposite and scan | ||
| 155 | from lowest to highest numbered PCI device. There is no reliable | ||
| 156 | way to autodetect this ordering. So, we default to the most common | ||
| 157 | order, which is lowest to highest. Then, in case your motherboard | ||
| 158 | scans from highest to lowest, we have this option. If your BIOS | ||
| 159 | finds the drives on controller A before controller B but the linux | ||
| 160 | kernel finds your drives on controller B before A, then you should | ||
| 161 | use this option. | ||
| 162 | |||
| 163 | "aic7xxx=extended" - Force the driver to detect extended drive translation | ||
| 164 | on your controller. This helps those people who have cards without | ||
| 165 | a SEEPROM make sure that linux and all other operating systems think | ||
| 166 | the same way about your hard drives. | ||
| 167 | |||
| 168 | "aic7xxx=scbram" - Some cards have external SCB RAM that can be used to | ||
| 169 | give the card more hardware SCB slots. This allows the driver to use | ||
| 170 | that SCB RAM. Without this option, the driver won't touch the SCB | ||
| 171 | RAM because it is known to cause problems on a few cards out there | ||
| 172 | (such as 3985 class cards). | ||
| 173 | |||
| 174 | "aic7xxx=irq_trigger:x" - Replace x with either 0 or 1 to force the kernel | ||
| 175 | to use the correct IRQ type for your card. This only applies to EISA | ||
| 176 | based controllers. On these controllers, 0 is for Edge triggered | ||
| 177 | interrupts, and 1 is for Level triggered interrupts. If you aren't | ||
| 178 | sure or don't know which IRQ trigger type your EISA card uses, then | ||
| 179 | let the kernel autodetect the trigger type. | ||
| 180 | |||
| 181 | "aic7xxx=verbose" - This option can be used in one of two ways. If you | ||
| 182 | simply specify aic7xxx=verbose, then the kernel will automatically | ||
| 183 | pick the default set of verbose messages for you to see. | ||
| 184 | Alternatively, you can specify the command as | ||
| 185 | "aic7xxx=verbose:0xXXXX" where the X entries are replaced with | ||
| 186 | hexadecimal digits. This option is a bit field type option. For | ||
| 187 | a full listing of the available options, search for the | ||
| 188 | #define VERBOSE_xxxxxx lines in the aic7xxx.c file. If you want | ||
| 189 | verbose messages, then it is recommended that you simply use the | ||
| 190 | aic7xxx=verbose variant of this command. | ||
| 191 | |||
| 192 | "aic7xxx=pci_parity:x" - This option controls whether or not the driver | ||
| 193 | enables PCI parity error checking on the PCI bus. By default, this | ||
| 194 | checking is disabled. To enable the checks, simply specify pci_parity | ||
| 195 | with no value afterwords. To reverse the parity from even to odd, | ||
| 196 | supply any number other than 0 or 255. In short: | ||
| 197 | pci_parity - Even parity checking (even is the normal PCI parity) | ||
| 198 | pci_parity:x - Where x > 0, Odd parity checking | ||
| 199 | pci_parity:0 - No check (default) | ||
| 200 | NOTE: In order to get Even PCI parity checking, you must use the | ||
| 201 | version of the option that does not include the : and a number at | ||
| 202 | the end (unless you want to enter exactly 2^32 - 1 as the number). | ||
| 203 | |||
| 204 | "aic7xxx=no_probe" - This option will disable the probing for any VLB | ||
| 205 | based 2842 controllers and any EISA based controllers. This is | ||
| 206 | needed on certain newer motherboards where the normal EISA I/O ranges | ||
| 207 | have been claimed by other PCI devices. Probing on those machines | ||
| 208 | will often result in the machine crashing or spontaneously rebooting | ||
| 209 | during startup. Examples of machines that need this are the | ||
| 210 | Dell PowerEdge 6300 machines. | ||
| 211 | |||
| 212 | "aic7xxx=seltime:2" - This option controls how long the card waits | ||
| 213 | during a device selection sequence for the device to respond. | ||
| 214 | The original SCSI spec says that this "should be" 256ms. This | ||
| 215 | is generally not required with modern devices. However, some | ||
| 216 | very old SCSI I devices need the full 256ms. Most modern devices | ||
| 217 | can run fine with only 64ms. The default for this option is | ||
| 218 | 64ms. If you need to change this option, then use the following | ||
| 219 | table to set the proper value in the example above: | ||
| 220 | 0 - 256ms | ||
| 221 | 1 - 128ms | ||
| 222 | 2 - 64ms | ||
| 223 | 3 - 32ms | ||
| 224 | |||
| 225 | "aic7xxx=panic_on_abort" - This option is for debugging and will cause | ||
| 226 | the driver to panic the linux kernel and freeze the system the first | ||
| 227 | time the drivers abort or reset routines are called. This is most | ||
| 228 | helpful when some problem causes infinite reset loops that scroll too | ||
| 229 | fast to see. By using this option, you can write down what the errors | ||
| 230 | actually are and send that information to me so it can be fixed. | ||
| 231 | |||
| 232 | "aic7xxx=dump_card" - This option will print out the *entire* set of | ||
| 233 | configuration registers on the card during the init sequence. This | ||
| 234 | is a debugging aid used to see exactly what state the card is in | ||
| 235 | when we finally finish our initialization routines. If you don't | ||
| 236 | have documentation on the chipsets, this will do you absolutely | ||
| 237 | no good unless you are simply trying to write all the information | ||
| 238 | down in order to send it to me. | ||
| 239 | |||
| 240 | "aic7xxx=dump_sequencer" - This is the same as the above options except | ||
| 241 | that instead of dumping the register contents on the card, this | ||
| 242 | option dumps the contents of the sequencer program RAM. This gives | ||
| 243 | the ability to verify that the instructions downloaded to the | ||
| 244 | card's sequencer are indeed what they are supposed to be. Again, | ||
| 245 | unless you have documentation to tell you how to interpret these | ||
| 246 | numbers, then it is totally useless. | ||
| 247 | |||
| 248 | "aic7xxx=override_term:0xffffffff" - This option is used to force the | ||
| 249 | termination on your SCSI controllers to a particular setting. This | ||
| 250 | is a bit mask variable that applies for up to 8 aic7xxx SCSI channels. | ||
| 251 | Each channel gets 4 bits, divided as follows: | ||
| 252 | bit 3 2 1 0 | ||
| 253 | | | | Enable/Disable Single Ended Low Byte Termination | ||
| 254 | | | En/Disable Single Ended High Byte Termination | ||
| 255 | | En/Disable Low Byte LVD Termination | ||
| 256 | En/Disable High Byte LVD Termination | ||
| 257 | |||
| 258 | The upper 2 bits that deal with LVD termination only apply to Ultra2 | ||
| 259 | controllers. Furthermore, due to the current Ultra2 controller | ||
| 260 | designs, these bits are tied together such that setting either bit | ||
| 261 | enables both low and high byte LVD termination. It is not possible | ||
| 262 | to only set high or low byte LVD termination in this manner. This is | ||
| 263 | an artifact of the BIOS definition on Ultra2 controllers. For other | ||
| 264 | controllers, the only important bits are the two lowest bits. Setting | ||
| 265 | the higher bits on non-Ultra2 controllers has no effect. A few | ||
| 266 | examples of how to use this option: | ||
| 267 | |||
| 268 | Enable low and high byte termination on a non-ultra2 controller that | ||
| 269 | is the first aic7xxx controller (the correct bits are 0011), | ||
| 270 | aic7xxx=override_term:0x3 | ||
| 271 | |||
| 272 | Enable all termination on the third aic7xxx controller, high byte | ||
| 273 | termination on the second aic7xxx controller, and low and high byte | ||
| 274 | SE termination on the first aic7xxx controller | ||
| 275 | (bits are 1111 0010 0011), | ||
| 276 | aic7xxx=override_term:0xf23 | ||
| 277 | |||
| 278 | No attempt has been made to make this option non-cryptic. It really | ||
| 279 | shouldn't be used except in dire circumstances, and if that happens, | ||
| 280 | I'm probably going to be telling you what to set this to anyway :) | ||
| 281 | |||
| 282 | "aic7xxx=stpwlev:0xffffffff" - This option is used to control the STPWLEV | ||
| 283 | bit in the DEVCONFIG PCI register. Currently, this is one of the | ||
| 284 | very few registers that we have absolutely *no* way of detecting | ||
| 285 | what the variable should be. It depends entirely on how the chipset | ||
| 286 | and external terminators were coupled by the card/motherboard maker. | ||
| 287 | Further, a chip reset (at power up) always sets this bit to 0. If | ||
| 288 | there is no BIOS to run on the chipset/card (such as with a 2910C | ||
| 289 | or a motherboard controller with the BIOS totally disabled) then | ||
| 290 | the variable may not get set properly. Of course, if the proper | ||
| 291 | setting was 0, then that's what it would be after the reset, but if | ||
| 292 | the proper setting is actually 1.....you get the picture. Now, since | ||
| 293 | we can't detect this at all, I've added this option to force the | ||
| 294 | setting. If you have a BIOS on your controller then you should never | ||
| 295 | need to use this option. However, if you are having lots of SCSI | ||
| 296 | reset problems and can't seem to get them knocked out, this may help. | ||
| 297 | |||
| 298 | Here's a test to know for certain if you need this option. Make | ||
| 299 | a boot floppy that you can use to boot your computer up and that | ||
| 300 | will detect the aic7xxx controller. Next, power down your computer. | ||
| 301 | While it's down, unplug all SCSI cables from your Adaptec SCSI | ||
| 302 | controller. Boot the system back up to the Adaptec EZ-SCSI BIOS | ||
| 303 | and then make sure that termination is enabled on your adapter (if | ||
| 304 | you have an Adaptec BIOS of course). Next, boot up the floppy you | ||
| 305 | made and wait for it to detect the aic7xxx controller. If the kernel | ||
| 306 | finds the controller fine, says scsi : x hosts and then tries to | ||
| 307 | detect your devices like normal, up to the point where it fails to | ||
| 308 | mount your root file system and panics, then you're fine. If, on | ||
| 309 | the other hand, the system goes into an infinite reset loop, then | ||
| 310 | you need to use this option and/or the previous option to force the | ||
| 311 | proper termination settings on your controller. If this happens, | ||
| 312 | then you next need to figure out what your settings should be. | ||
| 313 | |||
| 314 | To find the correct settings, power your machine back down, connect | ||
| 315 | back up the SCSI cables, and boot back into your machine like normal. | ||
| 316 | However, boot with the aic7xxx=verbose:0x39 option. Record the | ||
| 317 | initial DEVCONFIG values for each of your aic7xxx controllers as | ||
| 318 | they are listed, and also record what the machine is detecting as | ||
| 319 | the proper termination on your controllers. NOTE: the order in | ||
| 320 | which the initial DEVCONFIG values are printed out is not guaranteed | ||
| 321 | to be the same order as the SCSI controllers are registered. The | ||
| 322 | above option and this option both work on the order of the SCSI | ||
| 323 | controllers as they are registered, so make sure you match the right | ||
| 324 | DEVCONFIG values with the right controllers if you have more than | ||
| 325 | one aic7xxx controller. | ||
| 326 | |||
| 327 | Once you have the detected termination settings and the initial | ||
| 328 | DEVCONFIG values for each controller, then figure out what the | ||
| 329 | termination on each of the controllers *should* be. Hopefully, that | ||
| 330 | part is correct, but it could possibly be wrong if there is | ||
| 331 | bogus cable detection logic on your controller or something similar. | ||
| 332 | If all the controllers have the correct termination settings, then | ||
| 333 | don't set the aic7xxx=override_term variable at all, leave it alone. | ||
| 334 | Next, on any controllers that go into an infinite reset loop when | ||
| 335 | you unplug all the SCSI cables, get the starting DEVCONFIG value. | ||
| 336 | If the initial DEVCONFIG value is divisible by 2, then the correct | ||
| 337 | setting for that controller is 0. If it's an odd number, then | ||
| 338 | the correct setting for that controller is 1. For any other | ||
| 339 | controllers that didn't have an infinite reset problem, then reverse | ||
| 340 | the above options. If DEVCONFIG was even, then the correct setting | ||
| 341 | is 1, if not then the correct setting is 0. | ||
| 342 | |||
| 343 | Now that you know what the correct setting was for each controller, | ||
| 344 | we need to encode that into the aic7xxx=stpwlev:0x... variable. | ||
| 345 | This variable is a bit field encoded variable. Bit 0 is for the first | ||
| 346 | aic7xxx controller, bit 1 for the next, etc. Put all these bits | ||
| 347 | together and you get a number. For example, if the third aic7xxx | ||
| 348 | needed a 1, but the second and first both needed a 0, then the bits | ||
| 349 | would be 100 in binary. This then translates to 0x04. You would | ||
| 350 | therefore set aic7xxx=stpwlev:0x04. This is fairly standard binary | ||
| 351 | to hexadecimal conversions here. If you aren't up to speed on the | ||
| 352 | binary->hex conversion then send an email to the aic7xxx mailing | ||
| 353 | list and someone can help you out. | ||
| 354 | |||
| 355 | "aic7xxx=tag_info:{{8,8..},{8,8..},..}" - This option is used to disable | ||
| 356 | or enable Tagged Command Queueing (TCQ) on specific devices. As of | ||
| 357 | driver version 5.1.11, TCQ is now either on or off by default | ||
| 358 | according to the setting you choose during the make config process. | ||
| 359 | In order to en/disable TCQ for certain devices at boot time, a user | ||
| 360 | may use this boot param. The driver will then parse this message out | ||
| 361 | and en/disable the specific device entries that are present based upon | ||
| 362 | the value given. The param line is parsed in the following manner: | ||
| 363 | |||
| 364 | { - first instance indicates the start of this parameter values | ||
| 365 | second instance is the start of entries for a particular | ||
| 366 | device entry | ||
| 367 | } - end the entries for a particular host adapter, or end the entire | ||
| 368 | set of parameter entries | ||
| 369 | , - move to next entry. Inside of a set of device entries, this | ||
| 370 | moves us to the next device on the list. Outside of device | ||
| 371 | entries, this moves us to the next host adapter | ||
| 372 | . - Same effect as , but is safe to use with insmod. | ||
| 373 | x - the number to enter into the array at this position. | ||
| 374 | 0 = Enable tagged queueing on this device and use the default | ||
| 375 | queue depth | ||
| 376 | 1-254 = Enable tagged queueing on this device and use this | ||
| 377 | number as the queue depth | ||
| 378 | 255 = Disable tagged queueing on this device. | ||
| 379 | Note: anything above 32 for an actual queue depth is wasteful | ||
| 380 | and not recommended. | ||
| 381 | |||
| 382 | A few examples of how this can be used: | ||
| 383 | |||
| 384 | tag_info:{{8,12,,0,,255,4}} | ||
| 385 | This line will only effect the first aic7xxx card registered. It | ||
| 386 | will set scsi id 0 to a queue depth of 8, id 1 to 12, leave id 2 | ||
| 387 | at the default, set id 3 to tagged queueing enabled and use the | ||
| 388 | default queue depth, id 4 default, id 5 disabled, and id 6 to 4. | ||
| 389 | Any not specified entries stay at the default value, repeated | ||
| 390 | commas with no value specified will simply increment to the next id | ||
| 391 | without changing anything for the missing values. | ||
| 392 | |||
| 393 | tag_info:{,,,{,,,255}} | ||
| 394 | First, second, and third adapters at default values. Fourth | ||
| 395 | adapter, id 3 is disabled. Notice that leading commas simply | ||
| 396 | increment what the first number effects, and there are no need | ||
| 397 | for trailing commas. When you close out an adapter, or the | ||
| 398 | entire entry, anything not explicitly set stays at the default | ||
| 399 | value. | ||
| 400 | |||
| 401 | A final note on this option. The scanner I used for this isn't | ||
| 402 | perfect or highly robust. If you mess the line up, the worst that | ||
| 403 | should happen is that the line will get ignored. If you don't | ||
| 404 | close out the entire entry with the final bracket, then any other | ||
| 405 | aic7xxx options after this will get ignored. So, in general, be | ||
| 406 | sure of what you are entering, and after you have it right, just | ||
| 407 | add it to the lilo.conf file so there won't be any mistakes. As | ||
| 408 | a means of checking this parser, the entire tag_info array for | ||
| 409 | each card is now printed out in the /proc/scsi/aic7xxx/x file. You | ||
| 410 | can use that to verify that your options were parsed correctly. | ||
| 411 | |||
| 412 | Boot command line options may be combined to form the proper set of options | ||
| 413 | a user might need. For example, the following is valid: | ||
| 414 | |||
| 415 | aic7xxx=verbose,extended,irq_trigger:1 | ||
| 416 | |||
| 417 | The only requirement is that individual options be separated by a comma or | ||
| 418 | a period on the command line. | ||
| 419 | |||
| 420 | Module Loading command options | ||
| 421 | ------------------------------ | ||
| 422 | When loading the aic7xxx driver as a module, the exact same options are | ||
| 423 | available to the user. However, the syntax to specify the options changes | ||
| 424 | slightly. For insmod, you need to wrap the aic7xxx= argument in quotes | ||
| 425 | and replace all ',' with '.'. So, for example, a valid insmod line | ||
| 426 | would be: | ||
| 427 | |||
| 428 | insmod aic7xxx aic7xxx='verbose.irq_trigger:1.extended' | ||
| 429 | |||
| 430 | This line should result in the *exact* same behaviour as if you typed | ||
| 431 | it in at the lilo prompt and the driver was compiled into the kernel | ||
| 432 | instead of being a module. The reason for the single quote is so that | ||
| 433 | the shell won't try to interpret anything in the line, such as {. | ||
| 434 | Insmod assumes any options starting with a letter instead of a number | ||
| 435 | is a character string (which is what we want) and by switching all of | ||
| 436 | the commas to periods, insmod won't interpret this as more than one | ||
| 437 | string and write junk into our binary image. I consider it a bug in | ||
| 438 | the insmod program that even if you wrap your string in quotes (quotes | ||
| 439 | that pass the shell mind you and that insmod sees) it still treats | ||
| 440 | a comma inside of those quotes as starting a new variable, resulting | ||
| 441 | in memory scribbles if you don't switch the commas to periods. | ||
| 442 | |||
| 443 | |||
| 444 | Kernel Compile options | ||
| 445 | ------------------------------ | ||
| 446 | The various kernel compile time options for this driver are now fairly | ||
| 447 | well documented in the file drivers/scsi/Kconfig. In order to | ||
| 448 | see this documentation, you need to use one of the advanced configuration | ||
| 449 | programs (menuconfig and xconfig). If you are using the "make menuconfig" | ||
| 450 | method of configuring your kernel, then you would simply highlight the | ||
| 451 | option in question and hit the ? key. If you are using the "make xconfig" | ||
| 452 | method of configuring your kernel, then simply click on the help button | ||
| 453 | next to the option you have questions about. The help information from | ||
| 454 | the Configure.help file will then get automatically displayed. | ||
| 455 | |||
| 456 | /proc support | ||
| 457 | ------------------------------ | ||
| 458 | The /proc support for the AIC7xxx can be found in the /proc/scsi/aic7xxx/ | ||
| 459 | directory. That directory contains a file for each SCSI controller in | ||
| 460 | the system. Each file presents the current configuration and transfer | ||
| 461 | statistics (enabled with #define in aic7xxx.c) for each controller. | ||
| 462 | |||
| 463 | Thanks to Michael Neuffer for his upper-level SCSI help, and | ||
| 464 | Matthew Jacob for statistics support. | ||
| 465 | |||
| 466 | Debugging the driver | ||
| 467 | ------------------------------ | ||
| 468 | Should you have problems with this driver, and would like some help in | ||
| 469 | getting them solved, there are a couple debugging items built into | ||
| 470 | the driver to facilitate getting the needed information from the system. | ||
| 471 | In general, I need a complete description of the problem, with as many | ||
| 472 | logs as possible concerning what happens. To help with this, there is | ||
| 473 | a command option aic7xxx=panic_on_abort. This option, when set, forces | ||
| 474 | the driver to panic the kernel on the first SCSI abort issued by the | ||
| 475 | mid level SCSI code. If your system is going to reset loops and you | ||
| 476 | can't read the screen, then this is what you need. Not only will it | ||
| 477 | stop the system, but it also prints out a large amount of state | ||
| 478 | information in the process. Second, if you specify the option | ||
| 479 | "aic7xxx=verbose:0x1ffff", the system will print out *SOOOO* much | ||
| 480 | information as it runs that you won't be able to see anything. | ||
| 481 | However, this can actually be very useful if your machine simply | ||
| 482 | locks up when trying to boot, since it will pin-point what was last | ||
| 483 | happening (in regards to the aic7xxx driver) immediately prior to | ||
| 484 | the lockup. This is really only useful if your machine simply can | ||
| 485 | not boot up successfully. If you can get your machine to run, then | ||
| 486 | this will produce far too much information. | ||
| 487 | |||
| 488 | FTP sites | ||
| 489 | ------------------------------ | ||
| 490 | ftp://ftp.redhat.com/pub/aic/ | ||
| 491 | - Out of date. I used to keep stuff here, but too many people | ||
| 492 | complained about having a hard time getting into Red Hat's ftp | ||
| 493 | server. So use the web site below instead. | ||
| 494 | ftp://ftp.pcnet.com/users/eischen/Linux/ | ||
| 495 | - Dan Eischen's driver distribution area | ||
| 496 | ftp://ekf2.vsb.cz/pub/linux/kernel/aic7xxx/ftp.teleport.com/ | ||
| 497 | - European Linux mirror of Teleport site | ||
| 498 | |||
| 499 | Web sites | ||
| 500 | ------------------------------ | ||
| 501 | http://people.redhat.com/dledford/ | ||
| 502 | - My web site, also the primary aic7xxx site with several related | ||
| 503 | pages. | ||
| 504 | |||
| 505 | Dean W. Gehnert | ||
| 506 | deang@teleport.com | ||
| 507 | |||
| 508 | $Revision: 3.0 $ | ||
| 509 | |||
| 510 | Modified by Doug Ledford 1998-2000 | ||
| 511 | |||
| @@ -42,20 +42,14 @@ discussion. · 41 unmodified lines | |||
| 42 | 42 | ||
| 43 | Once LLDD gets hold of a scmd, either the LLDD will complete the | 43 | Once LLDD gets hold of a scmd, either the LLDD will complete the |
| 44 | command by calling scsi_done callback passed from midlayer when | 44 | command by calling scsi_done callback passed from midlayer when |
| 45 | invoking hostt->queuecommand() or SCSI midlayer will time it out. | 45 | invoking hostt->queuecommand() or the block layer will time it out. |
| 46 | 46 | ||
| 47 | 47 | ||
| 48 | [1-2-1] Completing a scmd w/ scsi_done | 48 | [1-2-1] Completing a scmd w/ scsi_done |
| 49 | 49 | ||
| 50 | For all non-EH commands, scsi_done() is the completion callback. It | 50 | For all non-EH commands, scsi_done() is the completion callback. It |
| 51 | does the following. | 51 | just calls blk_complete_request() to delete the block layer timer and |
| 52 | 52 | raise SCSI_SOFTIRQ | |
| 53 | 1. Delete timeout timer. If it fails, it means that timeout timer | ||
| 54 | has expired and is going to finish the command. Just return. | ||
| 55 | |||
| 56 | 2. Link scmd to per-cpu scsi_done_q using scmd->en_entry | ||
| 57 | |||
| 58 | 3. Raise SCSI_SOFTIRQ | ||
| 59 | 53 | ||
| 60 | SCSI_SOFTIRQ handler scsi_softirq calls scsi_decide_disposition() to | 54 | SCSI_SOFTIRQ handler scsi_softirq calls scsi_decide_disposition() to |
| 61 | determine what to do with the command. scsi_decide_disposition() | 55 | determine what to do with the command. scsi_decide_disposition() |
| @@ -64,10 +58,12 @@ with the command. · 2 unmodified lines | |||
| 64 | 58 | ||
| 65 | - SUCCESS | 59 | - SUCCESS |
| 66 | scsi_finish_command() is invoked for the command. The | 60 | scsi_finish_command() is invoked for the command. The |
| 67 | function does some maintenance choirs and notify completion by | 61 | function does some maintenance chores and then calls |
| 68 | calling scmd->done() callback, which, for fs requests, would | 62 | scsi_io_completion() to finish the I/O. |
| 69 | be HLD completion callback - sd:sd_rw_intr, sr:rw_intr, | 63 | scsi_io_completion() then notifies the block layer on |
| 70 | st:st_intr. | 64 | the completed request by calling blk_end_request and |
| 65 | friends or figures out what to do with the remainder | ||
| 66 | of the data in case of an error. | ||
| 71 | 67 | ||
| 72 | - NEEDS_RETRY | 68 | - NEEDS_RETRY |
| 73 | - ADD_TO_MLQUEUE | 69 | - ADD_TO_MLQUEUE |
| @@ -86,33 +82,45 @@ function · 12 unmodified lines | |||
| 86 | 1. invokes optional hostt->eh_timed_out() callback. Return value can | 82 | 1. invokes optional hostt->eh_timed_out() callback. Return value can |
| 87 | be one of | 83 | be one of |
| 88 | 84 | ||
| 89 | - EH_HANDLED | 85 | - BLK_EH_HANDLED |
| 90 | This indicates that eh_timed_out() dealt with the timeout. The | 86 | This indicates that eh_timed_out() dealt with the timeout. |
| 91 | scmd is passed to __scsi_done() and thus linked into per-cpu | 87 | The command is passed back to the block layer and completed |
| 92 | scsi_done_q. Normal command completion described in [1-2-1] | 88 | via __blk_complete_requests(). |
| 93 | follows. | 89 | |
| 90 | *NOTE* After returning BLK_EH_HANDLED the SCSI layer is | ||
| 91 | assumed to be finished with the command, and no other | ||
| 92 | functions from the SCSI layer will be called. So this | ||
| 93 | should typically only be returned if the eh_timed_out() | ||
| 94 | handler raced with normal completion. | ||
| 94 | 95 | ||
| 95 | - EH_RESET_TIMER | 96 | - BLK_EH_RESET_TIMER |
| 96 | This indicates that more time is required to finish the | 97 | This indicates that more time is required to finish the |
| 97 | command. Timer is restarted. This action is counted as a | 98 | command. Timer is restarted. This action is counted as a |
| 98 | retry and only allowed scmd->allowed + 1(!) times. Once the | 99 | retry and only allowed scmd->allowed + 1(!) times. Once the |
| 99 | limit is reached, action for EH_NOT_HANDLED is taken instead. | 100 | limit is reached, action for BLK_EH_NOT_HANDLED is taken instead. |
| 100 | 101 | ||
| 101 | *NOTE* This action is racy as the LLDD could finish the scmd | 102 | - BLK_EH_NOT_HANDLED |
| 102 | after the timeout has expired but before it's added back. In | 103 | eh_timed_out() callback did not handle the command. |
| 103 | such cases, scsi_done() would think that timeout has occurred | ||
| 104 | and return without doing anything. We lose completion and the | ||
| 105 | command will time out again. | ||
| 106 | |||
| 107 | - EH_NOT_HANDLED | ||
| 108 | This is the same as when eh_timed_out() callback doesn't exist. | ||
| 109 | Step #2 is taken. | 104 | Step #2 is taken. |
| 110 | 105 | ||
| 106 | 2. If the host supports asynchronous completion (as indicated by the | ||
| 107 | no_async_abort setting in the host template) scsi_abort_command() | ||
| 108 | is invoked to schedule an asynchrous abort. If that fails | ||
| 109 | Step #3 is taken. | ||
| 110 | |||
| 111 | 2. scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD) is invoked for the | 111 | 2. scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD) is invoked for the |
| 112 | command. See [1-3] for more information. | 112 | command. See [1-3] for more information. |
| 113 | 113 | ||
| 114 | [1-3] Asynchronous command aborts | ||
| 115 | |||
| 116 | After a timeout occurs a command abort is scheduled from | ||
| 117 | scsi_abort_command(). If the abort is successful the command | ||
| 118 | will either be retried (if the number of retries is not exhausted) | ||
| 119 | or terminated with DID_TIME_OUT. | ||
| 120 | Otherwise scsi_eh_scmd_add() is invoked for the command. | ||
| 121 | See [1-4] for more information. | ||
| 114 | 122 | ||
| 115 | [1-3] How EH takes over | 123 | [1-4] How EH takes over |
| 116 | 124 | ||
| 117 | scmds enter EH via scsi_eh_scmd_add(), which does the following. | 125 | scmds enter EH via scsi_eh_scmd_add(), which does the following. |
| 118 | 126 | ||
| @@ -320,7 +328,8 @@ scmd->allowed. · 201 unmodified lines | |||
| 320 | 328 | ||
| 321 | <<scsi_eh_abort_cmds>> | 329 | <<scsi_eh_abort_cmds>> |
| 322 | 330 | ||
| 323 | This action is taken for each timed out command. | 331 | This action is taken for each timed out command when |
| 332 | no_async_abort is enabled in the host template. | ||
| 324 | hostt->eh_abort_handler() is invoked for each scmd. The | 333 | hostt->eh_abort_handler() is invoked for each scmd. The |
| 325 | handler returns SUCCESS if it has succeeded to make LLDD and | 334 | handler returns SUCCESS if it has succeeded to make LLDD and |
| 326 | all related hardware forget about the scmd. | 335 | all related hardware forget about the scmd. |
| @@ -882,8 +882,11 @@ Details: · 881 unmodified lines | |||
| 882 | * | 882 | * |
| 883 | * Calling context: kernel thread | 883 | * Calling context: kernel thread |
| 884 | * | 884 | * |
| 885 | * Notes: Invoked from scsi_eh thread. No other commands will be | 885 | * Notes: If 'no_async_abort' is defined this callback |
| 886 | * queued on current host during eh. | 886 | * will be invoked from scsi_eh thread. No other commands |
| 887 | * will then be queued on current host during eh. | ||
| 888 | * Otherwise it will be called whenever scsi_times_out() | ||
| 889 | * is called due to a command timeout. | ||
| 887 | * | 890 | * |
| 888 | * Optionally defined in: LLD | 891 | * Optionally defined in: LLD |
| 889 | **/ | 892 | **/ |
| @@ -1257,6 +1260,8 @@ of interest: · 367 unmodified lines | |||
| 1257 | address space | 1260 | address space |
| 1258 | use_clustering - 1=>SCSI commands in mid level's queue can be merged, | 1261 | use_clustering - 1=>SCSI commands in mid level's queue can be merged, |
| 1259 | 0=>disallow SCSI command merging | 1262 | 0=>disallow SCSI command merging |
| 1263 | no_async_abort - 1=>Asynchronous aborts are not supported | ||
| 1264 | 0=>Timed-out commands will be aborted asynchronously | ||
| 1260 | hostt - pointer to driver's struct scsi_host_template from which | 1265 | hostt - pointer to driver's struct scsi_host_template from which |
| 1261 | this struct Scsi_Host instance was spawned | 1266 | this struct Scsi_Host instance was spawned |
| 1262 | hostt->proc_name - name of LLD. This is the driver name that sysfs uses | 1267 | hostt->proc_name - name of LLD. This is the driver name that sysfs uses |
| @@ -0,0 +1,7 @@ | |||
| 1 | all: rport_state_diagram.svg rport_state_diagram.png | ||
| 2 | |||
| 3 | rport_state_diagram.svg: rport_state_diagram.dot | ||
| 4 | dot -Tsvg -o $@ $< | ||
| 5 | |||
| 6 | rport_state_diagram.png: rport_state_diagram.dot | ||
| 7 | dot -Tpng -o $@ $< | ||
| @@ -0,0 +1,26 @@ | |||
| 1 | digraph srp_initiator { | ||
| 2 | node [shape = doublecircle]; running lost; | ||
| 3 | node [shape = circle]; | ||
| 4 | |||
| 5 | { | ||
| 6 | rank = min; | ||
| 7 | running_rta [ label = "running;\nreconnect\ntimer\nactive" ]; | ||
| 8 | }; | ||
| 9 | running [ label = "running;\nreconnect\ntimer\nstopped" ]; | ||
| 10 | blocked; | ||
| 11 | failfast [ label = "fail I/O\nfast" ]; | ||
| 12 | lost; | ||
| 13 | |||
| 14 | running -> running_rta [ label = "fast_io_fail_tmo = off and\ndev_loss_tmo = off;\nsrp_start_tl_fail_timers()" ]; | ||
| 15 | running_rta -> running [ label = "fast_io_fail_tmo = off and\ndev_loss_tmo = off;\nreconnecting succeeded" ]; | ||
| 16 | running -> blocked [ label = "fast_io_fail_tmo >= 0 or\ndev_loss_tmo >= 0;\nsrp_start_tl_fail_timers()" ]; | ||
| 17 | running -> failfast [ label = "fast_io_fail_tmo = off and\ndev_loss_tmo = off;\nreconnecting failed\n" ]; | ||
| 18 | blocked -> failfast [ label = "fast_io_fail_tmo\nexpired or\nreconnecting\nfailed" ]; | ||
| 19 | blocked -> lost [ label = "dev_loss_tmo\nexpired or\nsrp_stop_rport_timers()" ]; | ||
| 20 | failfast -> lost [ label = "dev_loss_tmo\nexpired or\nsrp_stop_rport_timers()" ]; | ||
| 21 | blocked -> running [ label = "reconnecting\nsucceeded" ]; | ||
| 22 | failfast -> failfast [ label = "reconnecting\nfailed" ]; | ||
| 23 | failfast -> running [ label = "reconnecting\nsucceeded" ]; | ||
| 24 | running -> lost [ label = "srp_stop_rport_timers()" ]; | ||
| 25 | running_rta -> lost [ label = "srp_stop_rport_timers()" ]; | ||
| 26 | } | ||
| @@ -67,12 +67,14 @@ descriptors by adding their identifier to the format string · 66 unmodified lines | |||
| 67 | - 'd-ng': the digest of the event, calculated with an arbitrary hash | 67 | - 'd-ng': the digest of the event, calculated with an arbitrary hash |
| 68 | algorithm (field format: [<hash algo>:]digest, where the digest | 68 | algorithm (field format: [<hash algo>:]digest, where the digest |
| 69 | prefix is shown only if the hash algorithm is not SHA1 or MD5); | 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. | 70 | - 'n-ng': the name of the event, without size limitations; |
| 71 | - 'sig': the file signature. | ||
| 71 | 72 | ||
| 72 | 73 | ||
| 73 | Below, there is the list of defined template descriptors: | 74 | Below, there is the list of defined template descriptors: |
| 74 | - "ima": its format is 'd|n'; | 75 | - "ima": its format is 'd|n'; |
| 75 | - "ima-ng" (default): its format is 'd-ng|n-ng'. | 76 | - "ima-ng" (default): its format is 'd-ng|n-ng'; |
| 77 | - "ima-sig": its format is 'd-ng|n-ng|sig'. | ||
| 76 | 78 | ||
| 77 | 79 | ||
| 78 | 80 | ||
| @@ -49,18 +49,23 @@ features :- · 48 unmodified lines | |||
| 49 | * Machine specific controls: Allow machines to add controls to the sound card | 49 | * Machine specific controls: Allow machines to add controls to the sound card |
| 50 | (e.g. volume control for speaker amplifier). | 50 | (e.g. volume control for speaker amplifier). |
| 51 | 51 | ||
| 52 | To achieve all this, ASoC basically splits an embedded audio system into 3 | 52 | To achieve all this, ASoC basically splits an embedded audio system into |
| 53 | components :- | 53 | multiple re-usable component drivers :- |
| 54 | 54 | ||
| 55 | * Codec driver: The codec driver is platform independent and contains audio | 55 | * Codec class drivers: The codec class driver is platform independent and |
| 56 | controls, audio interface capabilities, codec DAPM definition and codec IO | 56 | contains audio controls, audio interface capabilities, codec DAPM |
| 57 | functions. | 57 | definition and codec IO functions. This class extends to BT, FM and MODEM |
| 58 | ICs if required. Codec class drivers should be generic code that can run | ||
| 59 | on any architecture and machine. | ||
| 58 | 60 | ||
| 59 | * Platform driver: The platform driver contains the audio DMA engine and audio | 61 | * Platform class drivers: The platform class driver includes the audio DMA |
| 60 | interface drivers (e.g. I2S, AC97, PCM) for that platform. | 62 | engine driver, digital audio interface (DAI) drivers (e.g. I2S, AC97, PCM) |
| 63 | and any audio DSP drivers for that platform. | ||
| 61 | 64 | ||
| 62 | * Machine driver: The machine driver handles any machine specific controls and | 65 | * Machine class driver: The machine driver class acts as the glue that |
| 63 | audio events (e.g. turning on an amp at start of playback). | 66 | decribes and binds the other component drivers together to form an ALSA |
| 67 | "sound card device". It handles any machine specific controls and | ||
| 68 | machine level audio events (e.g. turning on an amp at start of playback). | ||
| 64 | 69 | ||
| 65 | 70 | ||
| 66 | Documentation | 71 | Documentation |
| @@ -84,3 +89,7 @@ machine.txt: Machine driver internals. · 17 unmodified lines | |||
| 84 | pop_clicks.txt: How to minimise audio artifacts. | 89 | pop_clicks.txt: How to minimise audio artifacts. |
| 85 | 90 | ||
| 86 | clocking.txt: ASoC clocking for best power performance. | 91 | clocking.txt: ASoC clocking for best power performance. |
| 92 | |||
| 93 | jack.txt: ASoC jack detection. | ||
| 94 | |||
| 95 | DPCM.txt: Dynamic PCM - Describes DPCM with DSP examples. | ||
| @@ -34,7 +34,7 @@ SPI slave functions are usually not interoperable between vendors · 33 unmodified lines | |||
| 34 | - It may also be used to stream data in either direction (half duplex), | 34 | - It may also be used to stream data in either direction (half duplex), |
| 35 | or both of them at the same time (full duplex). | 35 | or both of them at the same time (full duplex). |
| 36 | 36 | ||
| 37 | - Some devices may use eight bit words. Others may different word | 37 | - Some devices may use eight bit words. Others may use different word |
| 38 | lengths, such as streams of 12-bit or 20-bit digital samples. | 38 | lengths, such as streams of 12-bit or 20-bit digital samples. |
| 39 | 39 | ||
| 40 | - Words are usually sent with their most significant bit (MSB) first, | 40 | - Words are usually sent with their most significant bit (MSB) first, |
| @@ -121,7 +121,7 @@ active. So the master must set the clock to inactive before selecting · 80 unmodified lines | |||
| 121 | a slave, and the slave can tell the chosen polarity by sampling the | 121 | a slave, and the slave can tell the chosen polarity by sampling the |
| 122 | clock level when its select line goes active. That's why many devices | 122 | clock level when its select line goes active. That's why many devices |
| 123 | support for example both modes 0 and 3: they don't care about polarity, | 123 | support for example both modes 0 and 3: they don't care about polarity, |
| 124 | and alway clock data in/out on rising clock edges. | 124 | and always clock data in/out on rising clock edges. |
| 125 | 125 | ||
| 126 | 126 | ||
| 127 | How do these driver programming interfaces work? | 127 | How do these driver programming interfaces work? |
| @@ -139,7 +139,7 @@ a command and then reading its response. · 11 unmodified lines | |||
| 139 | 139 | ||
| 140 | There are two types of SPI driver, here called: | 140 | There are two types of SPI driver, here called: |
| 141 | 141 | ||
| 142 | Controller drivers ... controllers may be built in to System-On-Chip | 142 | Controller drivers ... controllers may be built into System-On-Chip |
| 143 | processors, and often support both Master and Slave roles. | 143 | processors, and often support both Master and Slave roles. |
| 144 | These drivers touch hardware registers and may use DMA. | 144 | These drivers touch hardware registers and may use DMA. |
| 145 | Or they can be PIO bitbangers, needing just GPIO pins. | 145 | Or they can be PIO bitbangers, needing just GPIO pins. |
| @@ -548,7 +548,7 @@ SPI MASTER METHODS · 402 unmodified lines | |||
| 548 | DEPRECATED METHODS | 548 | DEPRECATED METHODS |
| 549 | 549 | ||
| 550 | master->transfer(struct spi_device *spi, struct spi_message *message) | 550 | master->transfer(struct spi_device *spi, struct spi_message *message) |
| 551 | This must not sleep. Its responsibility is arrange that the | 551 | This must not sleep. Its responsibility is to arrange that the |
| 552 | transfer happens and its complete() callback is issued. The two | 552 | transfer happens and its complete() callback is issued. The two |
| 553 | will normally happen later, after other transfers complete, and | 553 | will normally happen later, after other transfers complete, and |
| 554 | if the controller is idle it will need to be kickstarted. This | 554 | if the controller is idle it will need to be kickstarted. This |
| @@ -116,7 +116,7 @@ The branch(es) can then be switched via: · 115 unmodified lines | |||
| 116 | static_key_slow_dec(&key); | 116 | static_key_slow_dec(&key); |
| 117 | 117 | ||
| 118 | Thus, 'static_key_slow_inc()' means 'make the branch true', and | 118 | Thus, 'static_key_slow_inc()' means 'make the branch true', and |
| 119 | 'static_key_slow_dec()' means 'make the the branch false' with appropriate | 119 | 'static_key_slow_dec()' means 'make the branch false' with appropriate |
| 120 | reference counting. For example, if the key is initialized true, a | 120 | reference counting. For example, if the key is initialized true, a |
| 121 | static_key_slow_dec(), will switch the branch to false. And a subsequent | 121 | static_key_slow_dec(), will switch the branch to false. And a subsequent |
| 122 | static_key_slow_inc(), will change the branch back to true. Likewise, if the | 122 | static_key_slow_inc(), will change the branch back to true. Likewise, if the |
| @@ -236,7 +236,7 @@ label case adds: · 113 unmodified lines | |||
| 236 | 236 | ||
| 237 | If we then include the padding bytes, the jump label code saves, 16 total bytes | 237 | If we then include the padding bytes, the jump label code saves, 16 total bytes |
| 238 | of instruction memory for this small function. In this case the non-jump label | 238 | of instruction memory for this small function. In this case the non-jump label |
| 239 | function is 80 bytes long. Thus, we have have saved 20% of the instruction | 239 | function is 80 bytes long. Thus, we have saved 20% of the instruction |
| 240 | footprint. We can in fact improve this even further, since the 5-byte no-op | 240 | footprint. We can in fact improve this even further, since the 5-byte no-op |
| 241 | really can be a 2-byte no-op since we can reach the branch with a 2-byte jmp. | 241 | really can be a 2-byte no-op since we can reach the branch with a 2-byte jmp. |
| 242 | However, we have not yet implemented optimal no-op sizes (they are currently | 242 | However, we have not yet implemented optimal no-op sizes (they are currently |
| @@ -33,6 +33,11 @@ show up in /proc/sys/kernel: · 32 unmodified lines | |||
| 33 | - domainname | 33 | - domainname |
| 34 | - hostname | 34 | - hostname |
| 35 | - hotplug | 35 | - hotplug |
| 36 | - hung_task_panic | ||
| 37 | - hung_task_check_count | ||
| 38 | - hung_task_timeout_secs | ||
| 39 | - hung_task_warnings | ||
| 40 | - kexec_load_disabled | ||
| 36 | - kptr_restrict | 41 | - kptr_restrict |
| 37 | - kstack_depth_to_print [ X86 only ] | 42 | - kstack_depth_to_print [ X86 only ] |
| 38 | - l2cr [ PPC only ] | 43 | - l2cr [ PPC only ] |
| @@ -287,6 +292,56 @@ Default value is "/sbin/hotplug". · 248 unmodified lines | |||
| 287 | 292 | ||
| 288 | ============================================================== | 293 | ============================================================== |
| 289 | 294 | ||
| 295 | hung_task_panic: | ||
| 296 | |||
| 297 | Controls the kernel's behavior when a hung task is detected. | ||
| 298 | This file shows up if CONFIG_DETECT_HUNG_TASK is enabled. | ||
| 299 | |||
| 300 | 0: continue operation. This is the default behavior. | ||
| 301 | |||
| 302 | 1: panic immediately. | ||
| 303 | |||
| 304 | ============================================================== | ||
| 305 | |||
| 306 | hung_task_check_count: | ||
| 307 | |||
| 308 | The upper bound on the number of tasks that are checked. | ||
| 309 | This file shows up if CONFIG_DETECT_HUNG_TASK is enabled. | ||
| 310 | |||
| 311 | ============================================================== | ||
| 312 | |||
| 313 | hung_task_timeout_secs: | ||
| 314 | |||
| 315 | Check interval. When a task in D state did not get scheduled | ||
| 316 | for more than this value report a warning. | ||
| 317 | This file shows up if CONFIG_DETECT_HUNG_TASK is enabled. | ||
| 318 | |||
| 319 | 0: means infinite timeout - no checking done. | ||
| 320 | |||
| 321 | ============================================================== | ||
| 322 | |||
| 323 | hung_task_warning: | ||
| 324 | |||
| 325 | The maximum number of warnings to report. During a check interval | ||
| 326 | When this value is reached, no more the warnings will be reported. | ||
| 327 | This file shows up if CONFIG_DETECT_HUNG_TASK is enabled. | ||
| 328 | |||
| 329 | -1: report an infinite number of warnings. | ||
| 330 | |||
| 331 | ============================================================== | ||
| 332 | |||
| 333 | kexec_load_disabled: | ||
| 334 | |||
| 335 | A toggle indicating if the kexec_load syscall has been disabled. This | ||
| 336 | value defaults to 0 (false: kexec_load enabled), but can be set to 1 | ||
| 337 | (true: kexec_load disabled). Once true, kexec can no longer be used, and | ||
| 338 | the toggle cannot be set back to false. This allows a kexec image to be | ||
| 339 | loaded before disabling the syscall, allowing a system to set up (and | ||
| 340 | later use) an image without it being altered. Generally used together | ||
| 341 | with the "modules_disabled" sysctl. | ||
| 342 | |||
| 343 | ============================================================== | ||
| 344 | |||
| 290 | kptr_restrict: | 345 | kptr_restrict: |
| 291 | 346 | ||
| 292 | This toggle indicates whether restrictions are placed on | 347 | This toggle indicates whether restrictions are placed on |
| @@ -331,7 +386,7 @@ A toggle value indicating if modules are allowed to be loaded · 38 unmodified lines | |||
| 331 | in an otherwise modular kernel. This toggle defaults to off | 386 | in an otherwise modular kernel. This toggle defaults to off |
| 332 | (0), but can be set true (1). Once true, modules can be | 387 | (0), but can be set true (1). Once true, modules can be |
| 333 | neither loaded nor unloaded, and the toggle cannot be set back | 388 | neither loaded nor unloaded, and the toggle cannot be set back |
| 334 | to false. | 389 | to false. Generally used with the "kexec_load_disabled" toggle. |
| 335 | 390 | ||
| 336 | ============================================================== | 391 | ============================================================== |
| 337 | 392 | ||
| @@ -47,6 +47,7 @@ Currently, these files are in /proc/sys/vm: · 46 unmodified lines | |||
| 47 | - numa_zonelist_order | 47 | - numa_zonelist_order |
| 48 | - oom_dump_tasks | 48 | - oom_dump_tasks |
| 49 | - oom_kill_allocating_task | 49 | - oom_kill_allocating_task |
| 50 | - overcommit_kbytes | ||
| 50 | - overcommit_memory | 51 | - overcommit_memory |
| 51 | - overcommit_ratio | 52 | - overcommit_ratio |
| 52 | - page-cluster | 53 | - page-cluster |
| @@ -574,6 +575,17 @@ The default value is 0. · 521 unmodified lines | |||
| 574 | 575 | ||
| 575 | ============================================================== | 576 | ============================================================== |
| 576 | 577 | ||
| 578 | overcommit_kbytes: | ||
| 579 | |||
| 580 | When overcommit_memory is set to 2, the committed address space is not | ||
| 581 | permitted to exceed swap plus this amount of physical RAM. See below. | ||
| 582 | |||
| 583 | Note: overcommit_kbytes is the counterpart of overcommit_ratio. Only one | ||
| 584 | of them may be specified at a time. Setting one disables the other (which | ||
| 585 | then appears as 0 when read). | ||
| 586 | |||
| 587 | ============================================================== | ||
| 588 | |||
| 577 | overcommit_memory: | 589 | overcommit_memory: |
| 578 | 590 | ||
| 579 | This value contains a flag that enables memory overcommitment. | 591 | This value contains a flag that enables memory overcommitment. |
| @@ -684,7 +696,9 @@ swappiness · 104 unmodified lines | |||
| 684 | 696 | ||
| 685 | This control is used to define how aggressive the kernel will swap | 697 | This control is used to define how aggressive the kernel will swap |
| 686 | memory pages. Higher values will increase agressiveness, lower values | 698 | memory pages. Higher values will increase agressiveness, lower values |
| 687 | decrease the amount of swap. | 699 | decrease the amount of swap. A value of 0 instructs the kernel not to |
| 700 | initiate swap until the amount of free and file-backed pages is less | ||
| 701 | than the high water mark in a zone. | ||
| 688 | 702 | ||
| 689 | The default value is 60. | 703 | The default value is 60. |
| 690 | 704 | ||
| @@ -287,3 +287,210 @@ their old filters): · 286 unmodified lines | |||
| 287 | prev_pid == 0 | 287 | prev_pid == 0 |
| 288 | # cat sched_wakeup/filter | 288 | # cat sched_wakeup/filter |
| 289 | common_pid == 0 | 289 | common_pid == 0 |
| 290 | |||
| 291 | 6. Event triggers | ||
| 292 | ================= | ||
| 293 | |||
| 294 | Trace events can be made to conditionally invoke trigger 'commands' | ||
| 295 | which can take various forms and are described in detail below; | ||
| 296 | examples would be enabling or disabling other trace events or invoking | ||
| 297 | a stack trace whenever the trace event is hit. Whenever a trace event | ||
| 298 | with attached triggers is invoked, the set of trigger commands | ||
| 299 | associated with that event is invoked. Any given trigger can | ||
| 300 | additionally have an event filter of the same form as described in | ||
| 301 | section 5 (Event filtering) associated with it - the command will only | ||
| 302 | be invoked if the event being invoked passes the associated filter. | ||
| 303 | If no filter is associated with the trigger, it always passes. | ||
| 304 | |||
| 305 | Triggers are added to and removed from a particular event by writing | ||
| 306 | trigger expressions to the 'trigger' file for the given event. | ||
| 307 | |||
| 308 | A given event can have any number of triggers associated with it, | ||
| 309 | subject to any restrictions that individual commands may have in that | ||
| 310 | regard. | ||
| 311 | |||
| 312 | Event triggers are implemented on top of "soft" mode, which means that | ||
| 313 | whenever a trace event has one or more triggers associated with it, | ||
| 314 | the event is activated even if it isn't actually enabled, but is | ||
| 315 | disabled in a "soft" mode. That is, the tracepoint will be called, | ||
| 316 | but just will not be traced, unless of course it's actually enabled. | ||
| 317 | This scheme allows triggers to be invoked even for events that aren't | ||
| 318 | enabled, and also allows the current event filter implementation to be | ||
| 319 | used for conditionally invoking triggers. | ||
| 320 | |||
| 321 | The syntax for event triggers is roughly based on the syntax for | ||
| 322 | set_ftrace_filter 'ftrace filter commands' (see the 'Filter commands' | ||
| 323 | section of Documentation/trace/ftrace.txt), but there are major | ||
| 324 | differences and the implementation isn't currently tied to it in any | ||
| 325 | way, so beware about making generalizations between the two. | ||
| 326 | |||
| 327 | 6.1 Expression syntax | ||
| 328 | --------------------- | ||
| 329 | |||
| 330 | Triggers are added by echoing the command to the 'trigger' file: | ||
| 331 | |||
| 332 | # echo 'command[:count] [if filter]' > trigger | ||
| 333 | |||
| 334 | Triggers are removed by echoing the same command but starting with '!' | ||
| 335 | to the 'trigger' file: | ||
| 336 | |||
| 337 | # echo '!command[:count] [if filter]' > trigger | ||
| 338 | |||
| 339 | The [if filter] part isn't used in matching commands when removing, so | ||
| 340 | leaving that off in a '!' command will accomplish the same thing as | ||
| 341 | having it in. | ||
| 342 | |||
| 343 | The filter syntax is the same as that described in the 'Event | ||
| 344 | filtering' section above. | ||
| 345 | |||
| 346 | For ease of use, writing to the trigger file using '>' currently just | ||
| 347 | adds or removes a single trigger and there's no explicit '>>' support | ||
| 348 | ('>' actually behaves like '>>') or truncation support to remove all | ||
| 349 | triggers (you have to use '!' for each one added.) | ||
| 350 | |||
| 351 | 6.2 Supported trigger commands | ||
| 352 | ------------------------------ | ||
| 353 | |||
| 354 | The following commands are supported: | ||
| 355 | |||
| 356 | - enable_event/disable_event | ||
| 357 | |||
| 358 | These commands can enable or disable another trace event whenever | ||
| 359 | the triggering event is hit. When these commands are registered, | ||
| 360 | the other trace event is activated, but disabled in a "soft" mode. | ||
| 361 | That is, the tracepoint will be called, but just will not be traced. | ||
| 362 | The event tracepoint stays in this mode as long as there's a trigger | ||
| 363 | in effect that can trigger it. | ||
| 364 | |||
| 365 | For example, the following trigger causes kmalloc events to be | ||
| 366 | traced when a read system call is entered, and the :1 at the end | ||
| 367 | specifies that this enablement happens only once: | ||
| 368 | |||
| 369 | # echo 'enable_event:kmem:kmalloc:1' > \ | ||
| 370 | /sys/kernel/debug/tracing/events/syscalls/sys_enter_read/trigger | ||
| 371 | |||
| 372 | The following trigger causes kmalloc events to stop being traced | ||
| 373 | when a read system call exits. This disablement happens on every | ||
| 374 | read system call exit: | ||
| 375 | |||
| 376 | # echo 'disable_event:kmem:kmalloc' > \ | ||
| 377 | /sys/kernel/debug/tracing/events/syscalls/sys_exit_read/trigger | ||
| 378 | |||
| 379 | The format is: | ||
| 380 | |||
| 381 | enable_event:<system>:<event>[:count] | ||
| 382 | disable_event:<system>:<event>[:count] | ||
| 383 | |||
| 384 | To remove the above commands: | ||
| 385 | |||
| 386 | # echo '!enable_event:kmem:kmalloc:1' > \ | ||
| 387 | /sys/kernel/debug/tracing/events/syscalls/sys_enter_read/trigger | ||
| 388 | |||
| 389 | # echo '!disable_event:kmem:kmalloc' > \ | ||
| 390 | /sys/kernel/debug/tracing/events/syscalls/sys_exit_read/trigger | ||
| 391 | |||
| 392 | Note that there can be any number of enable/disable_event triggers | ||
| 393 | per triggering event, but there can only be one trigger per | ||
| 394 | triggered event. e.g. sys_enter_read can have triggers enabling both | ||
| 395 | kmem:kmalloc and sched:sched_switch, but can't have two kmem:kmalloc | ||
| 396 | versions such as kmem:kmalloc and kmem:kmalloc:1 or 'kmem:kmalloc if | ||
| 397 | bytes_req == 256' and 'kmem:kmalloc if bytes_alloc == 256' (they | ||
| 398 | could be combined into a single filter on kmem:kmalloc though). | ||
| 399 | |||
| 400 | - stacktrace | ||
| 401 | |||
| 402 | This command dumps a stacktrace in the trace buffer whenever the | ||
| 403 | triggering event occurs. | ||
| 404 | |||
| 405 | For example, the following trigger dumps a stacktrace every time the | ||
| 406 | kmalloc tracepoint is hit: | ||
| 407 | |||
| 408 | # echo 'stacktrace' > \ | ||
| 409 | /sys/kernel/debug/tracing/events/kmem/kmalloc/trigger | ||
| 410 | |||
| 411 | The following trigger dumps a stacktrace the first 5 times a kmalloc | ||
| 412 | request happens with a size >= 64K | ||
| 413 | |||
| 414 | # echo 'stacktrace:5 if bytes_req >= 65536' > \ | ||
| 415 | /sys/kernel/debug/tracing/events/kmem/kmalloc/trigger | ||
| 416 | |||
| 417 | The format is: | ||
| 418 | |||
| 419 | stacktrace[:count] | ||
| 420 | |||
| 421 | To remove the above commands: | ||
| 422 | |||
| 423 | # echo '!stacktrace' > \ | ||
| 424 | /sys/kernel/debug/tracing/events/kmem/kmalloc/trigger | ||
| 425 | |||
| 426 | # echo '!stacktrace:5 if bytes_req >= 65536' > \ | ||
| 427 | /sys/kernel/debug/tracing/events/kmem/kmalloc/trigger | ||
| 428 | |||
| 429 | The latter can also be removed more simply by the following (without | ||
| 430 | the filter): | ||
| 431 | |||
| 432 | # echo '!stacktrace:5' > \ | ||
| 433 | /sys/kernel/debug/tracing/events/kmem/kmalloc/trigger | ||
| 434 | |||
| 435 | Note that there can be only one stacktrace trigger per triggering | ||
| 436 | event. | ||
| 437 | |||
| 438 | - snapshot | ||
| 439 | |||
| 440 | This command causes a snapshot to be triggered whenever the | ||
| 441 | triggering event occurs. | ||
| 442 | |||
| 443 | The following command creates a snapshot every time a block request | ||
| 444 | queue is unplugged with a depth > 1. If you were tracing a set of | ||
| 445 | events or functions at the time, the snapshot trace buffer would | ||
| 446 | capture those events when the trigger event occured: | ||
| 447 | |||
| 448 | # echo 'snapshot if nr_rq > 1' > \ | ||
| 449 | /sys/kernel/debug/tracing/events/block/block_unplug/trigger | ||
| 450 | |||
| 451 | To only snapshot once: | ||
| 452 | |||
| 453 | # echo 'snapshot:1 if nr_rq > 1' > \ | ||
| 454 | /sys/kernel/debug/tracing/events/block/block_unplug/trigger | ||
| 455 | |||
| 456 | To remove the above commands: | ||
| 457 | |||
| 458 | # echo '!snapshot if nr_rq > 1' > \ | ||
| 459 | /sys/kernel/debug/tracing/events/block/block_unplug/trigger | ||
| 460 | |||
| 461 | # echo '!snapshot:1 if nr_rq > 1' > \ | ||
| 462 | /sys/kernel/debug/tracing/events/block/block_unplug/trigger | ||
| 463 | |||
| 464 | Note that there can be only one snapshot trigger per triggering | ||
| 465 | event. | ||
| 466 | |||
| 467 | - traceon/traceoff | ||
| 468 | |||
| 469 | These commands turn tracing on and off when the specified events are | ||
| 470 | hit. The parameter determines how many times the tracing system is | ||
| 471 | turned on and off. If unspecified, there is no limit. | ||
| 472 | |||
| 473 | The following command turns tracing off the first time a block | ||
| 474 | request queue is unplugged with a depth > 1. If you were tracing a | ||
| 475 | set of events or functions at the time, you could then examine the | ||
| 476 | trace buffer to see the sequence of events that led up to the | ||
| 477 | trigger event: | ||
| 478 | |||
| 479 | # echo 'traceoff:1 if nr_rq > 1' > \ | ||
| 480 | /sys/kernel/debug/tracing/events/block/block_unplug/trigger | ||
| 481 | |||
| 482 | To always disable tracing when nr_rq > 1 : | ||
| 483 | |||
| 484 | # echo 'traceoff if nr_rq > 1' > \ | ||
| 485 | /sys/kernel/debug/tracing/events/block/block_unplug/trigger | ||
| 486 | |||
| 487 | To remove the above commands: | ||
| 488 | |||
| 489 | # echo '!traceoff:1 if nr_rq > 1' > \ | ||
| 490 | /sys/kernel/debug/tracing/events/block/block_unplug/trigger | ||
| 491 | |||
| 492 | # echo '!traceoff if nr_rq > 1' > \ | ||
| 493 | /sys/kernel/debug/tracing/events/block/block_unplug/trigger | ||
| 494 | |||
| 495 | Note that there can be only one traceon or traceoff trigger per | ||
| 496 | triggering event. | ||
| @@ -123,7 +123,7 @@ my $regex_writepage; · 122 unmodified lines | |||
| 123 | 123 | ||
| 124 | # Static regex used. Specified like this for readability and for use with /o | 124 | # Static regex used. Specified like this for readability and for use with /o |
| 125 | # (process_pid) (cpus ) ( time ) (tpoint ) (details) | 125 | # (process_pid) (cpus ) ( time ) (tpoint ) (details) |
| 126 | my $regex_traceevent = '\s*([a-zA-Z0-9-]*)\s*(\[[0-9]*\])\s*([0-9.]*):\s*([a-zA-Z_]*):\s*(.*)'; | 126 | my $regex_traceevent = '\s*([a-zA-Z0-9-]*)\s*(\[[0-9]*\])(\s*[dX.][Nnp.][Hhs.][0-9a-fA-F.]*|)\s*([0-9.]*):\s*([a-zA-Z_]*):\s*(.*)'; |
| 127 | my $regex_statname = '[-0-9]*\s\((.*)\).*'; | 127 | my $regex_statname = '[-0-9]*\s\((.*)\).*'; |
| 128 | my $regex_statppid = '[-0-9]*\s\(.*\)\s[A-Za-z]\s([0-9]*).*'; | 128 | my $regex_statppid = '[-0-9]*\s\(.*\)\s[A-Za-z]\s([0-9]*).*'; |
| 129 | 129 | ||
| @@ -270,8 +270,8 @@ EVENT_PROCESS: · 140 unmodified lines | |||
| 270 | while ($traceevent = <STDIN>) { | 270 | while ($traceevent = <STDIN>) { |
| 271 | if ($traceevent =~ /$regex_traceevent/o) { | 271 | if ($traceevent =~ /$regex_traceevent/o) { |
| 272 | $process_pid = $1; | 272 | $process_pid = $1; |
| 273 | $timestamp = $3; | 273 | $timestamp = $4; |
| 274 | $tracepoint = $4; | 274 | $tracepoint = $5; |
| 275 | 275 | ||
| 276 | $process_pid =~ /(.*)-([0-9]*)$/; | 276 | $process_pid =~ /(.*)-([0-9]*)$/; |
| 277 | my $process = $1; | 277 | my $process = $1; |
| @@ -299,7 +299,7 @@ EVENT_PROCESS: · 21 unmodified lines | |||
| 299 | $perprocesspid{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN}++; | 299 | $perprocesspid{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN}++; |
| 300 | $perprocesspid{$process_pid}->{STATE_DIRECT_BEGIN} = $timestamp; | 300 | $perprocesspid{$process_pid}->{STATE_DIRECT_BEGIN} = $timestamp; |
| 301 | 301 | ||
| 302 | $details = $5; | 302 | $details = $6; |
| 303 | if ($details !~ /$regex_direct_begin/o) { | 303 | if ($details !~ /$regex_direct_begin/o) { |
| 304 | print "WARNING: Failed to parse mm_vmscan_direct_reclaim_begin as expected\n"; | 304 | print "WARNING: Failed to parse mm_vmscan_direct_reclaim_begin as expected\n"; |
| 305 | print " $details\n"; | 305 | print " $details\n"; |
| @@ -322,7 +322,7 @@ EVENT_PROCESS: · 16 unmodified lines | |||
| 322 | $perprocesspid{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$index] = "$order-$latency"; | 322 | $perprocesspid{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$index] = "$order-$latency"; |
| 323 | } | 323 | } |
| 324 | } elsif ($tracepoint eq "mm_vmscan_kswapd_wake") { | 324 | } elsif ($tracepoint eq "mm_vmscan_kswapd_wake") { |
| 325 | $details = $5; | 325 | $details = $6; |
| 326 | if ($details !~ /$regex_kswapd_wake/o) { | 326 | if ($details !~ /$regex_kswapd_wake/o) { |
| 327 | print "WARNING: Failed to parse mm_vmscan_kswapd_wake as expected\n"; | 327 | print "WARNING: Failed to parse mm_vmscan_kswapd_wake as expected\n"; |
| 328 | print " $details\n"; | 328 | print " $details\n"; |
| @@ -356,7 +356,7 @@ EVENT_PROCESS: · 27 unmodified lines | |||
| 356 | } elsif ($tracepoint eq "mm_vmscan_wakeup_kswapd") { | 356 | } elsif ($tracepoint eq "mm_vmscan_wakeup_kswapd") { |
| 357 | $perprocesspid{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD}++; | 357 | $perprocesspid{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD}++; |
| 358 | 358 | ||
| 359 | $details = $5; | 359 | $details = $6; |
| 360 | if ($details !~ /$regex_wakeup_kswapd/o) { | 360 | if ($details !~ /$regex_wakeup_kswapd/o) { |
| 361 | print "WARNING: Failed to parse mm_vmscan_wakeup_kswapd as expected\n"; | 361 | print "WARNING: Failed to parse mm_vmscan_wakeup_kswapd as expected\n"; |
| 362 | print " $details\n"; | 362 | print " $details\n"; |
| @@ -366,7 +366,7 @@ EVENT_PROCESS: · 3 unmodified lines | |||
| 366 | my $order = $3; | 366 | my $order = $3; |
| 367 | $perprocesspid{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD_PERORDER}[$order]++; | 367 | $perprocesspid{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD_PERORDER}[$order]++; |
| 368 | } elsif ($tracepoint eq "mm_vmscan_lru_isolate") { | 368 | } elsif ($tracepoint eq "mm_vmscan_lru_isolate") { |
| 369 | $details = $5; | 369 | $details = $6; |
| 370 | if ($details !~ /$regex_lru_isolate/o) { | 370 | if ($details !~ /$regex_lru_isolate/o) { |
| 371 | print "WARNING: Failed to parse mm_vmscan_lru_isolate as expected\n"; | 371 | print "WARNING: Failed to parse mm_vmscan_lru_isolate as expected\n"; |
| 372 | print " $details\n"; | 372 | print " $details\n"; |
| @@ -387,7 +387,7 @@ EVENT_PROCESS: · 14 unmodified lines | |||
| 387 | } | 387 | } |
| 388 | $perprocesspid{$process_pid}->{HIGH_NR_CONTIG_DIRTY} += $nr_contig_dirty; | 388 | $perprocesspid{$process_pid}->{HIGH_NR_CONTIG_DIRTY} += $nr_contig_dirty; |
| 389 | } elsif ($tracepoint eq "mm_vmscan_lru_shrink_inactive") { | 389 | } elsif ($tracepoint eq "mm_vmscan_lru_shrink_inactive") { |
| 390 | $details = $5; | 390 | $details = $6; |
| 391 | if ($details !~ /$regex_lru_shrink_inactive/o) { | 391 | if ($details !~ /$regex_lru_shrink_inactive/o) { |
| 392 | print "WARNING: Failed to parse mm_vmscan_lru_shrink_inactive as expected\n"; | 392 | print "WARNING: Failed to parse mm_vmscan_lru_shrink_inactive as expected\n"; |
| 393 | print " $details\n"; | 393 | print " $details\n"; |
| @@ -397,7 +397,7 @@ EVENT_PROCESS: · 3 unmodified lines | |||
| 397 | my $nr_reclaimed = $4; | 397 | my $nr_reclaimed = $4; |
| 398 | $perprocesspid{$process_pid}->{HIGH_NR_RECLAIMED} += $nr_reclaimed; | 398 | $perprocesspid{$process_pid}->{HIGH_NR_RECLAIMED} += $nr_reclaimed; |
| 399 | } elsif ($tracepoint eq "mm_vmscan_writepage") { | 399 | } elsif ($tracepoint eq "mm_vmscan_writepage") { |
| 400 | $details = $5; | 400 | $details = $6; |
| 401 | if ($details !~ /$regex_writepage/o) { | 401 | if ($details !~ /$regex_writepage/o) { |
| 402 | print "WARNING: Failed to parse mm_vmscan_writepage as expected\n"; | 402 | print "WARNING: Failed to parse mm_vmscan_writepage as expected\n"; |
| 403 | print " $details\n"; | 403 | print " $details\n"; |
| @@ -19,18 +19,44 @@ user to calculate the offset of the probepoint in the object. · 18 unmodified lines | |||
| 19 | 19 | ||
| 20 | Synopsis of uprobe_tracer | 20 | Synopsis of uprobe_tracer |
| 21 | ------------------------- | 21 | ------------------------- |
| 22 | p[:[GRP/]EVENT] PATH:SYMBOL[+offs] [FETCHARGS] : Set a uprobe | 22 | p[:[GRP/]EVENT] PATH:OFFSET [FETCHARGS] : Set a uprobe |
| 23 | r[:[GRP/]EVENT] PATH:SYMBOL[+offs] [FETCHARGS] : Set a return uprobe (uretprobe) | 23 | r[:[GRP/]EVENT] PATH:OFFSET [FETCHARGS] : Set a return uprobe (uretprobe) |
| 24 | -:[GRP/]EVENT : Clear uprobe or uretprobe event | 24 | -:[GRP/]EVENT : Clear uprobe or uretprobe event |
| 25 | 25 | ||
| 26 | GRP : Group name. If omitted, "uprobes" is the default value. | 26 | GRP : Group name. If omitted, "uprobes" is the default value. |
| 27 | EVENT : Event name. If omitted, the event name is generated based | 27 | EVENT : Event name. If omitted, the event name is generated based |
| 28 | on SYMBOL+offs. | 28 | on PATH+OFFSET. |
| 29 | PATH : Path to an executable or a library. | 29 | PATH : Path to an executable or a library. |
| 30 | SYMBOL[+offs] : Symbol+offset where the probe is inserted. | 30 | OFFSET : Offset where the probe is inserted. |
| 31 | 31 | ||
| 32 | FETCHARGS : Arguments. Each probe can have up to 128 args. | 32 | FETCHARGS : Arguments. Each probe can have up to 128 args. |
| 33 | %REG : Fetch register REG | 33 | %REG : Fetch register REG |
| 34 | @ADDR : Fetch memory at ADDR (ADDR should be in userspace) | ||
| 35 | @+OFFSET : Fetch memory at OFFSET (OFFSET from same file as PATH) | ||
| 36 | $stackN : Fetch Nth entry of stack (N >= 0) | ||
| 37 | $stack : Fetch stack address. | ||
| 38 | $retval : Fetch return value.(*) | ||
| 39 | +|-offs(FETCHARG) : Fetch memory at FETCHARG +|- offs address.(**) | ||
| 40 | NAME=FETCHARG : Set NAME as the argument name of FETCHARG. | ||
| 41 | FETCHARG:TYPE : Set TYPE as the type of FETCHARG. Currently, basic types | ||
| 42 | (u8/u16/u32/u64/s8/s16/s32/s64), "string" and bitfield | ||
| 43 | are supported. | ||
| 44 | |||
| 45 | (*) only for return probe. | ||
| 46 | (**) this is useful for fetching a field of data structures. | ||
| 47 | |||
| 48 | Types | ||
| 49 | ----- | ||
| 50 | Several types are supported for fetch-args. Uprobe tracer will access memory | ||
| 51 | by given type. Prefix 's' and 'u' means those types are signed and unsigned | ||
| 52 | respectively. Traced arguments are shown in decimal (signed) or hex (unsigned). | ||
| 53 | String type is a special type, which fetches a "null-terminated" string from | ||
| 54 | user space. | ||
| 55 | Bitfield is another special type, which takes 3 parameters, bit-width, bit- | ||
| 56 | offset, and container-size (usually 32). The syntax is; | ||
| 57 | |||
| 58 | b<bit-width>@<bit-offset>/<container-size> | ||
| 59 | |||
| 34 | 60 | ||
| 35 | Event Profiling | 61 | Event Profiling |
| 36 | --------------- | 62 | --------------- |
| @@ -137,24 +137,34 @@ Code that causes unaligned access · 136 unmodified lines | |||
| 137 | ================================= | 137 | ================================= |
| 138 | 138 | ||
| 139 | With the above in mind, let's move onto a real life example of a function | 139 | With the above in mind, let's move onto a real life example of a function |
| 140 | that can cause an unaligned memory access. The following function adapted | 140 | that can cause an unaligned memory access. The following function taken |
| 141 | from include/linux/etherdevice.h is an optimized routine to compare two | 141 | from include/linux/etherdevice.h is an optimized routine to compare two |
| 142 | ethernet MAC addresses for equality. | 142 | ethernet MAC addresses for equality. |
| 143 | 143 | ||
| 144 | unsigned int compare_ether_addr(const u8 *addr1, const u8 *addr2) | 144 | bool ether_addr_equal(const u8 *addr1, const u8 *addr2) |
| 145 | { | 145 | { |
| 146 | const u16 *a = (const u16 *) addr1; | 146 | #ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS |
| 147 | const u16 *b = (const u16 *) addr2; | 147 | u32 fold = ((*(const u32 *)addr1) ^ (*(const u32 *)addr2)) | |
| 148 | ((*(const u16 *)(addr1 + 4)) ^ (*(const u16 *)(addr2 + 4))); | ||
| 149 | |||
| 150 | return fold == 0; | ||
| 151 | #else | ||
| 152 | const u16 *a = (const u16 *)addr1; | ||
| 153 | const u16 *b = (const u16 *)addr2; | ||
| 148 | return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) != 0; | 154 | return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) != 0; |
| 155 | #endif | ||
| 149 | } | 156 | } |
| 150 | 157 | ||
| 151 | In the above function, the reference to a[0] causes 2 bytes (16 bits) to | 158 | In the above function, when the hardware has efficient unaligned access |
| 152 | be read from memory starting at address addr1. Think about what would happen | 159 | capability, there is no issue with this code. But when the hardware isn't |
| 153 | if addr1 was an odd address such as 0x10003. (Hint: it'd be an unaligned | 160 | able to access memory on arbitrary boundaries, the reference to a[0] causes |
| 154 | access.) | 161 | 2 bytes (16 bits) to be read from memory starting at address addr1. |
| 162 | |||
| 163 | Think about what would happen if addr1 was an odd address such as 0x10003. | ||
| 164 | (Hint: it'd be an unaligned access.) | ||
| 155 | 165 | ||
| 156 | Despite the potential unaligned access problems with the above function, it | 166 | Despite the potential unaligned access problems with the above function, it |
| 157 | is included in the kernel anyway but is understood to only work on | 167 | is included in the kernel anyway but is understood to only work normally on |
| 158 | 16-bit-aligned addresses. It is up to the caller to ensure this alignment or | 168 | 16-bit-aligned addresses. It is up to the caller to ensure this alignment or |
| 159 | not use this function at all. This alignment-unsafe function is still useful | 169 | not use this function at all. This alignment-unsafe function is still useful |
| 160 | as it is a decent optimization for the cases when you can ensure alignment, | 170 | as it is a decent optimization for the cases when you can ensure alignment, |
| @@ -14,7 +14,7 @@ A CDC ECM (Ethernet) function may be turned on via a Kconfig option · 13 unmodified lines | |||
| 14 | and RNDIS can be turned off. If they are both enabled the gadget will | 14 | and RNDIS can be turned off. If they are both enabled the gadget will |
| 15 | have two configurations -- one with RNDIS and another with CDC ECM[3]. | 15 | have two configurations -- one with RNDIS and another with CDC ECM[3]. |
| 16 | 16 | ||
| 17 | Please not that if you use non-standard configuration (that is enable | 17 | Please note that if you use non-standard configuration (that is enable |
| 18 | CDC ECM) you may need to change vendor and/or product ID. | 18 | CDC ECM) you may need to change vendor and/or product ID. |
| 19 | 19 | ||
| 20 | * Host drivers | 20 | * Host drivers |
| @@ -0,0 +1,60 @@ | |||
| 1 | OMAP4 ISS Driver | ||
| 2 | ================ | ||
| 3 | |||
| 4 | Introduction | ||
| 5 | ------------ | ||
| 6 | |||
| 7 | The OMAP44XX family of chips contains the Imaging SubSystem (a.k.a. ISS), | ||
| 8 | Which contains several components that can be categorized in 3 big groups: | ||
| 9 | |||
| 10 | - Interfaces (2 Interfaces: CSI2-A & CSI2-B/CCP2) | ||
| 11 | - ISP (Image Signal Processor) | ||
| 12 | - SIMCOP (Still Image Coprocessor) | ||
| 13 | |||
| 14 | For more information, please look in [1] for latest version of: | ||
| 15 | "OMAP4430 Multimedia Device Silicon Revision 2.x" | ||
| 16 | |||
| 17 | As of Revision AB, the ISS is described in detail in section 8. | ||
| 18 | |||
| 19 | This driver is supporting _only_ the CSI2-A/B interfaces for now. | ||
| 20 | |||
| 21 | It makes use of the Media Controller framework [2], and inherited most of the | ||
| 22 | code from OMAP3 ISP driver (found under drivers/media/platform/omap3isp/*), | ||
| 23 | except that it doesn't need an IOMMU now for ISS buffers memory mapping. | ||
| 24 | |||
| 25 | Supports usage of MMAP buffers only (for now). | ||
| 26 | |||
| 27 | Tested platforms | ||
| 28 | ---------------- | ||
| 29 | |||
| 30 | - OMAP4430SDP, w/ ES2.1 GP & SEVM4430-CAM-V1-0 (Contains IMX060 & OV5640, in | ||
| 31 | which only the last one is supported, outputting YUV422 frames). | ||
| 32 | |||
| 33 | - TI Blaze MDP, w/ OMAP4430 ES2.2 EMU (Contains 1 IMX060 & 2 OV5650 sensors, in | ||
| 34 | which only the OV5650 are supported, outputting RAW10 frames). | ||
| 35 | |||
| 36 | - PandaBoard, Rev. A2, w/ OMAP4430 ES2.1 GP & OV adapter board, tested with | ||
| 37 | following sensors: | ||
| 38 | * OV5640 | ||
| 39 | * OV5650 | ||
| 40 | |||
| 41 | - Tested on mainline kernel: | ||
| 42 | |||
| 43 | http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=summary | ||
| 44 | |||
| 45 | Tag: v3.3 (commit c16fa4f2ad19908a47c63d8fa436a1178438c7e7) | ||
| 46 | |||
| 47 | File list | ||
| 48 | --------- | ||
| 49 | drivers/staging/media/omap4iss/ | ||
| 50 | include/media/omap4iss.h | ||
| 51 | |||
| 52 | References | ||
| 53 | ---------- | ||
| 54 | |||
| 55 | [1] http://focus.ti.com/general/docs/wtbu/wtbudocumentcenter.tsp?navigationId=12037&templateId=6123#62 | ||
| 56 | [2] http://lwn.net/Articles/420485/ | ||
| 57 | [3] http://www.spinics.net/lists/linux-media/msg44370.html | ||
| 58 | -- | ||
| 59 | Author: Sergio Aguirre <sergio.a.aguirre@gmail.com> | ||
| 60 | Copyright (C) 2012, Texas Instruments | ||
| @@ -147,7 +147,7 @@ The drivers exposes following files: · 146 unmodified lines | |||
| 147 | -------------------------------------------------------------------- | 147 | -------------------------------------------------------------------- |
| 148 | 0x12 | readfreq | Current tuned frequency | 148 | 0x12 | readfreq | Current tuned frequency |
| 149 | -------------------------------------------------------------------- | 149 | -------------------------------------------------------------------- |
| 150 | 0x14 | freqoff | Singed frequency offset in units of | 150 | 0x14 | freqoff | Signed frequency offset in units of |
| 151 | | | 2ppm | 151 | | | 2ppm |
| 152 | -------------------------------------------------------------------- | 152 | -------------------------------------------------------------------- |
| 153 | 0x15 | rssi | Signed value of RSSI in dBuV | 153 | 0x15 | rssi | Signed value of RSSI in dBuV |
| @@ -1838,6 +1838,7 @@ registers, find a list below: · 1837 unmodified lines | |||
| 1838 | PPC | KVM_REG_PPC_LPCR | 64 | 1838 | PPC | KVM_REG_PPC_LPCR | 64 |
| 1839 | PPC | KVM_REG_PPC_PPR | 64 | 1839 | PPC | KVM_REG_PPC_PPR | 64 |
| 1840 | PPC | KVM_REG_PPC_ARCH_COMPAT 32 | 1840 | PPC | KVM_REG_PPC_ARCH_COMPAT 32 |
| 1841 | PPC | KVM_REG_PPC_DABRX | 32 | ||
| 1841 | PPC | KVM_REG_PPC_TM_GPR0 | 64 | 1842 | PPC | KVM_REG_PPC_TM_GPR0 | 64 |
| 1842 | ... | 1843 | ... |
| 1843 | PPC | KVM_REG_PPC_TM_GPR31 | 64 | 1844 | PPC | KVM_REG_PPC_TM_GPR31 | 64 |
| @@ -2104,7 +2105,7 @@ Returns: 0 on success, -1 on error · 260 unmodified lines | |||
| 2104 | Allows setting an eventfd to directly trigger a guest interrupt. | 2105 | Allows setting an eventfd to directly trigger a guest interrupt. |
| 2105 | kvm_irqfd.fd specifies the file descriptor to use as the eventfd and | 2106 | kvm_irqfd.fd specifies the file descriptor to use as the eventfd and |
| 2106 | kvm_irqfd.gsi specifies the irqchip pin toggled by this event. When | 2107 | kvm_irqfd.gsi specifies the irqchip pin toggled by this event. When |
| 2107 | an event is tiggered on the eventfd, an interrupt is injected into | 2108 | an event is triggered on the eventfd, an interrupt is injected into |
| 2108 | the guest using the specified gsi pin. The irqfd is removed using | 2109 | the guest using the specified gsi pin. The irqfd is removed using |
| 2109 | the KVM_IRQFD_FLAG_DEASSIGN flag, specifying both kvm_irqfd.fd | 2110 | the KVM_IRQFD_FLAG_DEASSIGN flag, specifying both kvm_irqfd.fd |
| 2110 | and kvm_irqfd.gsi. | 2111 | and kvm_irqfd.gsi. |
| @@ -2115,7 +2116,7 @@ interrupts. When KVM_IRQFD_FLAG_RESAMPLE is set the user must pass an · 4 unmodified lines | |||
| 2115 | additional eventfd in the kvm_irqfd.resamplefd field. When operating | 2116 | additional eventfd in the kvm_irqfd.resamplefd field. When operating |
| 2116 | in resample mode, posting of an interrupt through kvm_irq.fd asserts | 2117 | in resample mode, posting of an interrupt through kvm_irq.fd asserts |
| 2117 | the specified gsi in the irqchip. When the irqchip is resampled, such | 2118 | the specified gsi in the irqchip. When the irqchip is resampled, such |
| 2118 | as from an EOI, the gsi is de-asserted and the user is notifed via | 2119 | as from an EOI, the gsi is de-asserted and the user is notified via |
| 2119 | kvm_irqfd.resamplefd. It is the user's responsibility to re-queue | 2120 | kvm_irqfd.resamplefd. It is the user's responsibility to re-queue |
| 2120 | the interrupt if the device making use of it still requires service. | 2121 | the interrupt if the device making use of it still requires service. |
| 2121 | Note that closing the resamplefd is not sufficient to disable the | 2122 | Note that closing the resamplefd is not sufficient to disable the |
| @@ -2327,7 +2328,7 @@ current state. "addr" is ignored. · 205 unmodified lines | |||
| 2327 | Capability: basic | 2328 | Capability: basic |
| 2328 | Architectures: arm, arm64 | 2329 | Architectures: arm, arm64 |
| 2329 | Type: vcpu ioctl | 2330 | Type: vcpu ioctl |
| 2330 | Parameters: struct struct kvm_vcpu_init (in) | 2331 | Parameters: struct kvm_vcpu_init (in) |
| 2331 | Returns: 0 on success; -1 on error | 2332 | Returns: 0 on success; -1 on error |
| 2332 | Errors: | 2333 | Errors: |
| 2333 | EINVAL: the target is unknown, or the combination of features is invalid. | 2334 | EINVAL: the target is unknown, or the combination of features is invalid. |
| @@ -2391,7 +2392,8 @@ struct kvm_reg_list { · 57 unmodified lines | |||
| 2391 | This ioctl returns the guest registers that are supported for the | 2392 | This ioctl returns the guest registers that are supported for the |
| 2392 | KVM_GET_ONE_REG/KVM_SET_ONE_REG calls. | 2393 | KVM_GET_ONE_REG/KVM_SET_ONE_REG calls. |
| 2393 | 2394 | ||
| 2394 | 4.85 KVM_ARM_SET_DEVICE_ADDR | 2395 | |
| 2396 | 4.85 KVM_ARM_SET_DEVICE_ADDR (deprecated) | ||
| 2395 | 2397 | ||
| 2396 | Capability: KVM_CAP_ARM_SET_DEVICE_ADDR | 2398 | Capability: KVM_CAP_ARM_SET_DEVICE_ADDR |
| 2397 | Architectures: arm, arm64 | 2399 | Architectures: arm, arm64 |
| @@ -2429,6 +2431,10 @@ must be called after calling KVM_CREATE_IRQCHIP, but before calling · 31 unmodified lines | |||
| 2429 | KVM_RUN on any of the VCPUs. Calling this ioctl twice for any of the | 2431 | KVM_RUN on any of the VCPUs. Calling this ioctl twice for any of the |
| 2430 | base addresses will return -EEXIST. | 2432 | base addresses will return -EEXIST. |
| 2431 | 2433 | ||
| 2434 | Note, this IOCTL is deprecated and the more flexible SET/GET_DEVICE_ATTR API | ||
| 2435 | should be used instead. | ||
| 2436 | |||
| 2437 | |||
| 2432 | 4.86 KVM_PPC_RTAS_DEFINE_TOKEN | 2438 | 4.86 KVM_PPC_RTAS_DEFINE_TOKEN |
| 2433 | 2439 | ||
| 2434 | Capability: KVM_CAP_PPC_RTAS | 2440 | Capability: KVM_CAP_PPC_RTAS |
| @@ -0,0 +1,73 @@ | |||
| 1 | ARM Virtual Generic Interrupt Controller (VGIC) | ||
| 2 | =============================================== | ||
| 3 | |||
| 4 | Device types supported: | ||
| 5 | KVM_DEV_TYPE_ARM_VGIC_V2 ARM Generic Interrupt Controller v2.0 | ||
| 6 | |||
| 7 | Only one VGIC instance may be instantiated through either this API or the | ||
| 8 | legacy KVM_CREATE_IRQCHIP api. The created VGIC will act as the VM interrupt | ||
| 9 | controller, requiring emulated user-space devices to inject interrupts to the | ||
| 10 | VGIC instead of directly to CPUs. | ||
| 11 | |||
| 12 | Groups: | ||
| 13 | KVM_DEV_ARM_VGIC_GRP_ADDR | ||
| 14 | Attributes: | ||
| 15 | KVM_VGIC_V2_ADDR_TYPE_DIST (rw, 64-bit) | ||
| 16 | Base address in the guest physical address space of the GIC distributor | ||
| 17 | register mappings. | ||
| 18 | |||
| 19 | KVM_VGIC_V2_ADDR_TYPE_CPU (rw, 64-bit) | ||
| 20 | Base address in the guest physical address space of the GIC virtual cpu | ||
| 21 | interface register mappings. | ||
| 22 | |||
| 23 | KVM_DEV_ARM_VGIC_GRP_DIST_REGS | ||
| 24 | Attributes: | ||
| 25 | The attr field of kvm_device_attr encodes two values: | ||
| 26 | bits: | 63 .... 40 | 39 .. 32 | 31 .... 0 | | ||
| 27 | values: | reserved | cpu id | offset | | ||
| 28 | |||
| 29 | All distributor regs are (rw, 32-bit) | ||
| 30 | |||
| 31 | The offset is relative to the "Distributor base address" as defined in the | ||
| 32 | GICv2 specs. Getting or setting such a register has the same effect as | ||
| 33 | reading or writing the register on the actual hardware from the cpu | ||
| 34 | specified with cpu id field. Note that most distributor fields are not | ||
| 35 | banked, but return the same value regardless of the cpu id used to access | ||
| 36 | the register. | ||
| 37 | Limitations: | ||
| 38 | - Priorities are not implemented, and registers are RAZ/WI | ||
| 39 | Errors: | ||
| 40 | -ENODEV: Getting or setting this register is not yet supported | ||
| 41 | -EBUSY: One or more VCPUs are running | ||
| 42 | |||
| 43 | KVM_DEV_ARM_VGIC_GRP_CPU_REGS | ||
| 44 | Attributes: | ||
| 45 | The attr field of kvm_device_attr encodes two values: | ||
| 46 | bits: | 63 .... 40 | 39 .. 32 | 31 .... 0 | | ||
| 47 | values: | reserved | cpu id | offset | | ||
| 48 | |||
| 49 | All CPU interface regs are (rw, 32-bit) | ||
| 50 | |||
| 51 | The offset specifies the offset from the "CPU interface base address" as | ||
| 52 | defined in the GICv2 specs. Getting or setting such a register has the | ||
| 53 | same effect as reading or writing the register on the actual hardware. | ||
| 54 | |||
| 55 | The Active Priorities Registers APRn are implementation defined, so we set a | ||
| 56 | fixed format for our implementation that fits with the model of a "GICv2 | ||
| 57 | implementation without the security extensions" which we present to the | ||
| 58 | guest. This interface always exposes four register APR[0-3] describing the | ||
| 59 | maximum possible 128 preemption levels. The semantics of the register | ||
| 60 | indicate if any interrupts in a given preemption level are in the active | ||
| 61 | state by setting the corresponding bit. | ||
| 62 | |||
| 63 | Thus, preemption level X has one or more active interrupts if and only if: | ||
| 64 | |||
| 65 | APRn[X mod 32] == 0b1, where n = X / 32 | ||
| 66 | |||
| 67 | Bits for undefined preemption levels are RAZ/WI. | ||
| 68 | |||
| 69 | Limitations: | ||
| 70 | - Priorities are not implemented, and registers are RAZ/WI | ||
| 71 | Errors: | ||
| 72 | -ENODEV: Getting or setting this register is not yet supported | ||
| 73 | -EBUSY: One or more VCPUs are running | ||
| @@ -17,6 +17,9 @@ S390: · 16 unmodified lines | |||
| 17 | S390 uses diagnose instruction as hypercall (0x500) along with hypercall | 17 | S390 uses diagnose instruction as hypercall (0x500) along with hypercall |
| 18 | number in R1. | 18 | number in R1. |
| 19 | 19 | ||
| 20 | For further information on the S390 diagnose call as supported by KVM, | ||
| 21 | refer to Documentation/virtual/kvm/s390-diag.txt. | ||
| 22 | |||
| 20 | PowerPC: | 23 | PowerPC: |
| 21 | It uses R3-R10 and hypercall number in R11. R4-R11 are used as output registers. | 24 | It uses R3-R10 and hypercall number in R11. R4-R11 are used as output registers. |
| 22 | Return value is placed in R3. | 25 | Return value is placed in R3. |
| @@ -74,7 +77,7 @@ Usage example : A vcpu of a paravirtualized guest that is busywaiting in guest · 51 unmodified lines | |||
| 74 | kernel mode for an event to occur (ex: a spinlock to become available) can | 77 | kernel mode for an event to occur (ex: a spinlock to become available) can |
| 75 | execute HLT instruction once it has busy-waited for more than a threshold | 78 | execute HLT instruction once it has busy-waited for more than a threshold |
| 76 | time-interval. Execution of HLT instruction would cause the hypervisor to put | 79 | time-interval. Execution of HLT instruction would cause the hypervisor to put |
| 77 | the vcpu to sleep until occurence of an appropriate event. Another vcpu of the | 80 | the vcpu to sleep until occurrence of an appropriate event. Another vcpu of the |
| 78 | same guest can wakeup the sleeping vcpu by issuing KVM_HC_KICK_CPU hypercall, | 81 | same guest can wakeup the sleeping vcpu by issuing KVM_HC_KICK_CPU hypercall, |
| 79 | specifying APIC ID (a1) of the vcpu to be woken up. An additional argument (a0) | 82 | specifying APIC ID (a1) of the vcpu to be woken up. An additional argument (a0) |
| 80 | is used in the hypercall for future use. | 83 | is used in the hypercall for future use. |
| @@ -112,7 +112,7 @@ The Dirty bit is lost in this case. · 111 unmodified lines | |||
| 112 | 112 | ||
| 113 | In order to avoid this kind of issue, we always treat the spte as "volatile" | 113 | In order to avoid this kind of issue, we always treat the spte as "volatile" |
| 114 | if it can be updated out of mmu-lock, see spte_has_volatile_bits(), it means, | 114 | if it can be updated out of mmu-lock, see spte_has_volatile_bits(), it means, |
| 115 | the spte is always atomicly updated in this case. | 115 | the spte is always atomically updated in this case. |
| 116 | 116 | ||
| 117 | 3): flush tlbs due to spte updated | 117 | 3): flush tlbs due to spte updated |
| 118 | If the spte is updated from writable to readonly, we should flush all TLBs, | 118 | If the spte is updated from writable to readonly, we should flush all TLBs, |
| @@ -125,7 +125,7 @@ be flushed caused by this reason in mmu_spte_update() since this is a common · 6 unmodified lines | |||
| 125 | function to update spte (present -> present). | 125 | function to update spte (present -> present). |
| 126 | 126 | ||
| 127 | Since the spte is "volatile" if it can be updated out of mmu-lock, we always | 127 | Since the spte is "volatile" if it can be updated out of mmu-lock, we always |
| 128 | atomicly update the spte, the race caused by fast page fault can be avoided, | 128 | atomically update the spte, the race caused by fast page fault can be avoided, |
| 129 | See the comments in spte_has_volatile_bits() and mmu_spte_update(). | 129 | See the comments in spte_has_volatile_bits() and mmu_spte_update(). |
| 130 | 130 | ||
| 131 | 3. Reference | 131 | 3. Reference |
| @@ -115,7 +115,7 @@ If any other bit changes in the MSR, please still use mtmsr(d). · 114 unmodified lines | |||
| 115 | Patched instructions | 115 | Patched instructions |
| 116 | ==================== | 116 | ==================== |
| 117 | 117 | ||
| 118 | The "ld" and "std" instructions are transormed to "lwz" and "stw" instructions | 118 | The "ld" and "std" instructions are transformed to "lwz" and "stw" instructions |
| 119 | respectively on 32 bit systems with an added offset of 4 to accommodate for big | 119 | respectively on 32 bit systems with an added offset of 4 to accommodate for big |
| 120 | endianness. | 120 | endianness. |
| 121 | 121 | ||
| @@ -0,0 +1,80 @@ | |||
| 1 | The s390 DIAGNOSE call on KVM | ||
| 2 | ============================= | ||
| 3 | |||
| 4 | KVM on s390 supports the DIAGNOSE call for making hypercalls, both for | ||
| 5 | native hypercalls and for selected hypercalls found on other s390 | ||
| 6 | hypervisors. | ||
| 7 | |||
| 8 | Note that bits are numbered as by the usual s390 convention (most significant | ||
| 9 | bit on the left). | ||
| 10 | |||
| 11 | |||
| 12 | General remarks | ||
| 13 | --------------- | ||
| 14 | |||
| 15 | DIAGNOSE calls by the guest cause a mandatory intercept. This implies | ||
| 16 | all supported DIAGNOSE calls need to be handled by either KVM or its | ||
| 17 | userspace. | ||
| 18 | |||
| 19 | All DIAGNOSE calls supported by KVM use the RS-a format: | ||
| 20 | |||
| 21 | -------------------------------------- | ||
| 22 | | '83' | R1 | R3 | B2 | D2 | | ||
| 23 | -------------------------------------- | ||
| 24 | 0 8 12 16 20 31 | ||
| 25 | |||
| 26 | The second-operand address (obtained by the base/displacement calculation) | ||
| 27 | is not used to address data. Instead, bits 48-63 of this address specify | ||
| 28 | the function code, and bits 0-47 are ignored. | ||
| 29 | |||
| 30 | The supported DIAGNOSE function codes vary by the userspace used. For | ||
| 31 | DIAGNOSE function codes not specific to KVM, please refer to the | ||
| 32 | documentation for the s390 hypervisors defining them. | ||
| 33 | |||
| 34 | |||
| 35 | DIAGNOSE function code 'X'500' - KVM virtio functions | ||
| 36 | ----------------------------------------------------- | ||
| 37 | |||
| 38 | If the function code specifies 0x500, various virtio-related functions | ||
| 39 | are performed. | ||
| 40 | |||
| 41 | General register 1 contains the virtio subfunction code. Supported | ||
| 42 | virtio subfunctions depend on KVM's userspace. Generally, userspace | ||
| 43 | provides either s390-virtio (subcodes 0-2) or virtio-ccw (subcode 3). | ||
| 44 | |||
| 45 | Upon completion of the DIAGNOSE instruction, general register 2 contains | ||
| 46 | the function's return code, which is either a return code or a subcode | ||
| 47 | specific value. | ||
| 48 | |||
| 49 | Subcode 0 - s390-virtio notification and early console printk | ||
| 50 | Handled by userspace. | ||
| 51 | |||
| 52 | Subcode 1 - s390-virtio reset | ||
| 53 | Handled by userspace. | ||
| 54 | |||
| 55 | Subcode 2 - s390-virtio set status | ||
| 56 | Handled by userspace. | ||
| 57 | |||
| 58 | Subcode 3 - virtio-ccw notification | ||
| 59 | Handled by either userspace or KVM (ioeventfd case). | ||
| 60 | |||
| 61 | General register 2 contains a subchannel-identification word denoting | ||
| 62 | the subchannel of the virtio-ccw proxy device to be notified. | ||
| 63 | |||
| 64 | General register 3 contains the number of the virtqueue to be notified. | ||
| 65 | |||
| 66 | General register 4 contains a 64bit identifier for KVM usage (the | ||
| 67 | kvm_io_bus cookie). If general register 4 does not contain a valid | ||
| 68 | identifier, it is ignored. | ||
| 69 | |||
| 70 | After completion of the DIAGNOSE call, general register 2 may contain | ||
| 71 | a 64bit identifier (in the kvm_io_bus cookie case). | ||
| 72 | |||
| 73 | See also the virtio standard for a discussion of this hypercall. | ||
| 74 | |||
| 75 | |||
| 76 | DIAGNOSE function code 'X'501 - KVM breakpoint | ||
| 77 | ---------------------------------------------- | ||
| 78 | |||
| 79 | If the function code specifies 0x501, breakpoint functions may be performed. | ||
| 80 | This function code is handled by userspace. | ||
| @@ -467,7 +467,7 @@ at any time. This causes problems as the passage of real time, the injection · 466 unmodified lines | |||
| 467 | of machine interrupts and the associated clock sources are no longer completely | 467 | of machine interrupts and the associated clock sources are no longer completely |
| 468 | synchronized with real time. | 468 | synchronized with real time. |
| 469 | 469 | ||
| 470 | This same problem can occur on native harware to a degree, as SMM mode may | 470 | This same problem can occur on native hardware to a degree, as SMM mode may |
| 471 | steal cycles from the naturally on X86 systems when SMM mode is used by the | 471 | steal cycles from the naturally on X86 systems when SMM mode is used by the |
| 472 | BIOS, but not in such an extreme fashion. However, the fact that SMM mode may | 472 | BIOS, but not in such an extreme fashion. However, the fact that SMM mode may |
| 473 | cause similar problems to virtualization makes it a good justification for | 473 | cause similar problems to virtualization makes it a good justification for |
| @@ -1,130 +0,0 @@ | |||
| 1 | Started Oct 1999 by Kanoj Sarcar <kanojsarcar@yahoo.com> | ||
| 2 | |||
| 3 | The intent of this file is to have an uptodate, running commentary | ||
| 4 | from different people about how locking and synchronization is done | ||
| 5 | in the Linux vm code. | ||
| 6 | |||
| 7 | page_table_lock & mmap_sem | ||
| 8 | -------------------------------------- | ||
| 9 | |||
| 10 | Page stealers pick processes out of the process pool and scan for | ||
| 11 | the best process to steal pages from. To guarantee the existence | ||
| 12 | of the victim mm, a mm_count inc and a mmdrop are done in swap_out(). | ||
| 13 | Page stealers hold kernel_lock to protect against a bunch of races. | ||
| 14 | The vma list of the victim mm is also scanned by the stealer, | ||
| 15 | and the page_table_lock is used to preserve list sanity against the | ||
| 16 | process adding/deleting to the list. This also guarantees existence | ||
| 17 | of the vma. Vma existence is not guaranteed once try_to_swap_out() | ||
| 18 | drops the page_table_lock. To guarantee the existence of the underlying | ||
| 19 | file structure, a get_file is done before the swapout() method is | ||
| 20 | invoked. The page passed into swapout() is guaranteed not to be reused | ||
| 21 | for a different purpose because the page reference count due to being | ||
| 22 | present in the user's pte is not released till after swapout() returns. | ||
| 23 | |||
| 24 | Any code that modifies the vmlist, or the vm_start/vm_end/ | ||
| 25 | vm_flags:VM_LOCKED/vm_next of any vma *in the list* must prevent | ||
| 26 | kswapd from looking at the chain. | ||
| 27 | |||
| 28 | The rules are: | ||
| 29 | 1. To scan the vmlist (look but don't touch) you must hold the | ||
| 30 | mmap_sem with read bias, i.e. down_read(&mm->mmap_sem) | ||
| 31 | 2. To modify the vmlist you need to hold the mmap_sem with | ||
| 32 | read&write bias, i.e. down_write(&mm->mmap_sem) *AND* | ||
| 33 | you need to take the page_table_lock. | ||
| 34 | 3. The swapper takes _just_ the page_table_lock, this is done | ||
| 35 | because the mmap_sem can be an extremely long lived lock | ||
| 36 | and the swapper just cannot sleep on that. | ||
| 37 | 4. The exception to this rule is expand_stack, which just | ||
| 38 | takes the read lock and the page_table_lock, this is ok | ||
| 39 | because it doesn't really modify fields anybody relies on. | ||
| 40 | 5. You must be able to guarantee that while holding page_table_lock | ||
| 41 | or page_table_lock of mm A, you will not try to get either lock | ||
| 42 | for mm B. | ||
| 43 | |||
| 44 | The caveats are: | ||
| 45 | 1. find_vma() makes use of, and updates, the mmap_cache pointer hint. | ||
| 46 | The update of mmap_cache is racy (page stealer can race with other code | ||
| 47 | that invokes find_vma with mmap_sem held), but that is okay, since it | ||
| 48 | is a hint. This can be fixed, if desired, by having find_vma grab the | ||
| 49 | page_table_lock. | ||
| 50 | |||
| 51 | |||
| 52 | Code that add/delete elements from the vmlist chain are | ||
| 53 | 1. callers of insert_vm_struct | ||
| 54 | 2. callers of merge_segments | ||
| 55 | 3. callers of avl_remove | ||
| 56 | |||
| 57 | Code that changes vm_start/vm_end/vm_flags:VM_LOCKED of vma's on | ||
| 58 | the list: | ||
| 59 | 1. expand_stack | ||
| 60 | 2. mprotect | ||
| 61 | 3. mlock | ||
| 62 | 4. mremap | ||
| 63 | |||
| 64 | It is advisable that changes to vm_start/vm_end be protected, although | ||
| 65 | in some cases it is not really needed. Eg, vm_start is modified by | ||
| 66 | expand_stack(), it is hard to come up with a destructive scenario without | ||
| 67 | having the vmlist protection in this case. | ||
| 68 | |||
| 69 | The page_table_lock nests with the inode i_mmap_mutex and the kmem cache | ||
| 70 | c_spinlock spinlocks. This is okay, since the kmem code asks for pages after | ||
| 71 | dropping c_spinlock. The page_table_lock also nests with pagecache_lock and | ||
| 72 | pagemap_lru_lock spinlocks, and no code asks for memory with these locks | ||
| 73 | held. | ||
| 74 | |||
| 75 | The page_table_lock is grabbed while holding the kernel_lock spinning monitor. | ||
| 76 | |||
| 77 | The page_table_lock is a spin lock. | ||
| 78 | |||
| 79 | Note: PTL can also be used to guarantee that no new clones using the | ||
| 80 | mm start up ... this is a loose form of stability on mm_users. For | ||
| 81 | example, it is used in copy_mm to protect against a racing tlb_gather_mmu | ||
| 82 | single address space optimization, so that the zap_page_range (from | ||
| 83 | truncate) does not lose sending ipi's to cloned threads that might | ||
| 84 | be spawned underneath it and go to user mode to drag in pte's into tlbs. | ||
| 85 | |||
| 86 | swap_lock | ||
| 87 | -------------- | ||
| 88 | The swap devices are chained in priority order from the "swap_list" header. | ||
| 89 | The "swap_list" is used for the round-robin swaphandle allocation strategy. | ||
| 90 | The #free swaphandles is maintained in "nr_swap_pages". These two together | ||
| 91 | are protected by the swap_lock. | ||
| 92 | |||
| 93 | The swap_lock also protects all the device reference counts on the | ||
| 94 | corresponding swaphandles, maintained in the "swap_map" array, and the | ||
| 95 | "highest_bit" and "lowest_bit" fields. | ||
| 96 | |||
| 97 | The swap_lock is a spinlock, and is never acquired from intr level. | ||
| 98 | |||
| 99 | To prevent races between swap space deletion or async readahead swapins | ||
| 100 | deciding whether a swap handle is being used, ie worthy of being read in | ||
| 101 | from disk, and an unmap -> swap_free making the handle unused, the swap | ||
| 102 | delete and readahead code grabs a temp reference on the swaphandle to | ||
| 103 | prevent warning messages from swap_duplicate <- read_swap_cache_async. | ||
| 104 | |||
| 105 | Swap cache locking | ||
| 106 | ------------------ | ||
| 107 | Pages are added into the swap cache with kernel_lock held, to make sure | ||
| 108 | that multiple pages are not being added (and hence lost) by associating | ||
| 109 | all of them with the same swaphandle. | ||
| 110 | |||
| 111 | Pages are guaranteed not to be removed from the scache if the page is | ||
| 112 | "shared": ie, other processes hold reference on the page or the associated | ||
| 113 | swap handle. The only code that does not follow this rule is shrink_mmap, | ||
| 114 | which deletes pages from the swap cache if no process has a reference on | ||
| 115 | the page (multiple processes might have references on the corresponding | ||
| 116 | swap handle though). lookup_swap_cache() races with shrink_mmap, when | ||
| 117 | establishing a reference on a scache page, so, it must check whether the | ||
| 118 | page it located is still in the swapcache, or shrink_mmap deleted it. | ||
| 119 | (This race is due to the fact that shrink_mmap looks at the page ref | ||
| 120 | count with pagecache_lock, but then drops pagecache_lock before deleting | ||
| 121 | the page from the scache). | ||
| 122 | |||
| 123 | do_wp_page and do_swap_page have MP races in them while trying to figure | ||
| 124 | out whether a page is "shared", by looking at the page_count + swap_count. | ||
| 125 | To preserve the sum of the counts, the page lock _must_ be acquired before | ||
| 126 | calling is_page_shared (else processes might switch their swap_count refs | ||
| 127 | to the page count refs, after the page count ref has been snapshotted). | ||
| 128 | |||
| 129 | Swap device deletion code currently breaks all the scache assumptions, | ||
| 130 | since it grabs neither mmap_sem nor page_table_lock. | ||
| @@ -14,8 +14,8 @@ The Linux kernel supports the following overcommit handling modes · 13 unmodified lines | |||
| 14 | 14 | ||
| 15 | 2 - Don't overcommit. The total address space commit | 15 | 2 - Don't overcommit. The total address space commit |
| 16 | for the system is not permitted to exceed swap + a | 16 | for the system is not permitted to exceed swap + a |
| 17 | configurable percentage (default is 50) of physical RAM. | 17 | configurable amount (default is 50%) of physical RAM. |
| 18 | Depending on the percentage you use, in most situations | 18 | Depending on the amount you use, in most situations |
| 19 | this means a process will not be killed while accessing | 19 | this means a process will not be killed while accessing |
| 20 | pages but will receive errors on memory allocation as | 20 | pages but will receive errors on memory allocation as |
| 21 | appropriate. | 21 | appropriate. |
| @@ -26,7 +26,8 @@ The Linux kernel supports the following overcommit handling modes · 4 unmodified lines | |||
| 26 | 26 | ||
| 27 | The overcommit policy is set via the sysctl `vm.overcommit_memory'. | 27 | The overcommit policy is set via the sysctl `vm.overcommit_memory'. |
| 28 | 28 | ||
| 29 | The overcommit percentage is set via `vm.overcommit_ratio'. | 29 | The overcommit amount can be set via `vm.overcommit_ratio' (percentage) |
| 30 | or `vm.overcommit_kbytes' (absolute value). | ||
| 30 | 31 | ||
| 31 | The current overcommit limit and amount committed are viewable in | 32 | The current overcommit limit and amount committed are viewable in |
| 32 | /proc/meminfo as CommitLimit and Committed_AS respectively. | 33 | /proc/meminfo as CommitLimit and Committed_AS respectively. |
| @@ -393,4 +393,14 @@ Slot Detection · 392 unmodified lines | |||
| 393 | 393 | ||
| 394 | This function returns the slot ID of the provided bridge. | 394 | This function returns the slot ID of the provided bridge. |
| 395 | 395 | ||
| 396 | int vme_slot_get(struct vme_dev *dev); | 396 | int vme_slot_num(struct vme_dev *dev); |
| 397 | |||
| 398 | |||
| 399 | Bus Detection | ||
| 400 | ============= | ||
| 401 | |||
| 402 | This function returns the bus ID of the provided bridge. | ||
| 403 | |||
| 404 | int vme_bus_num(struct vme_dev *dev); | ||
| 405 | |||
| 406 | |||
| @@ -78,14 +78,6 @@ APICs · 77 unmodified lines | |||
| 78 | 78 | ||
| 79 | no_timer_check Don't check the IO-APIC timer. This can work around | 79 | no_timer_check Don't check the IO-APIC timer. This can work around |
| 80 | problems with incorrect timer initialization on some boards. | 80 | problems with incorrect timer initialization on some boards. |
| 81 | |||
| 82 | apicmaintimer Run time keeping from the local APIC timer instead | ||
| 83 | of using the PIT/HPET interrupt for this. This is useful | ||
| 84 | when the PIT/HPET interrupts are unreliable. | ||
| 85 | |||
| 86 | noapicmaintimer Don't do time keeping using the APIC timer. | ||
| 87 | Useful when this option was auto selected, but doesn't work. | ||
| 88 | |||
| 89 | apicpmtimer | 81 | apicpmtimer |
| 90 | Do APIC timer calibration using the pmtimer. Implies | 82 | Do APIC timer calibration using the pmtimer. Implies |
| 91 | apicmaintimer. Useful when your PIT timer is totally | 83 | apicmaintimer. Useful when your PIT timer is totally |
| @@ -144,11 +136,6 @@ Non Executable Mappings · 52 unmodified lines | |||
| 144 | on Enable(default) | 136 | on Enable(default) |
| 145 | off Disable | 137 | off Disable |
| 146 | 138 | ||
| 147 | SMP | ||
| 148 | |||
| 149 | additional_cpus=NUM Allow NUM more CPUs for hotplug | ||
| 150 | (defaults are specified by the BIOS, see Documentation/x86/x86_64/cpu-hotplug-spec) | ||
| 151 | |||
| 152 | NUMA | 139 | NUMA |
| 153 | 140 | ||
| 154 | numa=off Only set up a single NUMA node spanning all memory. | 141 | numa=off Only set up a single NUMA node spanning all memory. |
| @@ -289,16 +276,6 @@ Debugging · 134 unmodified lines | |||
| 289 | 276 | ||
| 290 | kstack=N Print N words from the kernel stack in oops dumps. | 277 | kstack=N Print N words from the kernel stack in oops dumps. |
| 291 | 278 | ||
| 292 | pagefaulttrace Dump all page faults. Only useful for extreme debugging | ||
| 293 | and will create a lot of output. | ||
| 294 | |||
| 295 | call_trace=[old|both|newfallback|new] | ||
| 296 | old: use old inexact backtracer | ||
| 297 | new: use new exact dwarf2 unwinder | ||
| 298 | both: print entries from both | ||
| 299 | newfallback: use new unwinder but fall back to old if it gets | ||
| 300 | stuck (default) | ||
| 301 | |||
| 302 | Miscellaneous | 279 | Miscellaneous |
| 303 | 280 | ||
| 304 | nogbpages | 281 | nogbpages |
| @@ -40,5 +40,5 @@ See Section 4.3.12.4 of ISA; Bits: · 39 unmodified lines | |||
| 40 | --------- --------------- ----------------- ---------------- | 40 | --------- --------------- ----------------- ---------------- |
| 41 | 0 Exception Exception Exception | 41 | 0 Exception Exception Exception |
| 42 | 1 RCW Transaction RCW Transaction RCW Transaction | 42 | 1 RCW Transaction RCW Transaction RCW Transaction |
| 43 | 2 Internal Operation Exception Reserved | 43 | 2 Internal Operation Internal Operation Reserved |
| 44 | 3 Reserved Reserved Reserved | 44 | 3 Reserved Reserved Reserved |
| @@ -44,3 +44,21 @@ After step 4, we jump to intended (linked) address of this code. · 43 unmodified lines | |||
| 44 | 40..5F -> 40 40..5F -> pc -> pc 40..5F -> pc | 44 | 40..5F -> 40 40..5F -> pc -> pc 40..5F -> pc |
| 45 | 20..3F -> 20 -> 20 20..3F -> 20 | 45 | 20..3F -> 20 -> 20 20..3F -> 20 |
| 46 | 00..1F -> 00 -> 00 00..1F -> 00 | 46 | 00..1F -> 00 -> 00 00..1F -> 00 |
| 47 | |||
| 48 | The default location of IO peripherals is above 0xf0000000. This may change | ||
| 49 | using a "ranges" property in a device tree simple-bus node. See ePAPR 1.1, §6.5 | ||
| 50 | for details on the syntax and semantic of simple-bus nodes. The following | ||
| 51 | limitations apply: | ||
| 52 | |||
| 53 | 1. Only top level simple-bus nodes are considered | ||
| 54 | |||
| 55 | 2. Only one (first) simple-bus node is considered | ||
| 56 | |||
| 57 | 3. Empty "ranges" properties are not supported | ||
| 58 | |||
| 59 | 4. Only the first triplet in the "ranges" property is considered | ||
| 60 | |||
| 61 | 5. The parent-bus-address value is rounded down to the nearest 256MB boundary | ||
| 62 | |||
| 63 | 6. The IO area covers the entire 256MB segment of parent-bus-address; the | ||
| 64 | "ranges" triplet length field is ignored | ||
| @@ -112,7 +112,7 @@ Linux内核代码中包含有大量的文档。这些文档对于学习如何与 · 111 unmodified lines | |||
| 112 | 112 | ||
| 113 | 其他关于如何正确地生成补丁的优秀文档包括: | 113 | 其他关于如何正确地生成补丁的优秀文档包括: |
| 114 | "The Perfect Patch" | 114 | "The Perfect Patch" |
| 115 | http://userweb.kernel.org/~akpm/stuff/tpp.txt | 115 | http://www.ozlabs.org/~akpm/stuff/tpp.txt |
| 116 | "Linux kernel patch submission format" | 116 | "Linux kernel patch submission format" |
| 117 | http://linux.yyz.us/patch-format.html | 117 | http://linux.yyz.us/patch-format.html |
| 118 | 118 | ||
| @@ -515,7 +515,7 @@ Linux内核社区并不喜欢一下接收大段的代码。修改需要被恰当 · 396 unmodified lines | |||
| 515 | 515 | ||
| 516 | 想了解它具体应该看起来像什么,请查阅以下文档中的“ChangeLog”章节: | 516 | 想了解它具体应该看起来像什么,请查阅以下文档中的“ChangeLog”章节: |
| 517 | “The Perfect Patch” | 517 | “The Perfect Patch” |
| 518 | http://userweb.kernel.org/~akpm/stuff/tpp.txt | 518 | http://www.ozlabs.org/~akpm/stuff/tpp.txt |
| 519 | 519 | ||
| 520 | 520 | ||
| 521 | 这些事情有时候做起来很难。要在任何方面都做到完美可能需要好几年时间。这是 | 521 | 这些事情有时候做起来很难。要在任何方面都做到完美可能需要好几年时间。这是 |
| @@ -93,6 +93,11 @@ Descriptions of section entries: · 92 unmodified lines | |||
| 93 | N: Files and directories with regex patterns. | 93 | N: Files and directories with regex patterns. |
| 94 | N: [^a-z]tegra all files whose path contains the word tegra | 94 | N: [^a-z]tegra all files whose path contains the word tegra |
| 95 | One pattern per line. Multiple N: lines acceptable. | 95 | One pattern per line. Multiple N: lines acceptable. |
| 96 | scripts/get_maintainer.pl has different behavior for files that | ||
| 97 | match F: pattern and matches of N: patterns. By default, | ||
| 98 | get_maintainer will not look at git log history when an F: pattern | ||
| 99 | match occurs. When an N: match occurs, git log history is used | ||
| 100 | to also notify the people that have git commit signatures. | ||
| 96 | X: Files and directories that are NOT maintained, same rules as F: | 101 | X: Files and directories that are NOT maintained, same rules as F: |
| 97 | Files exclusions are tested before file matches. | 102 | Files exclusions are tested before file matches. |
| 98 | Can be useful for excluding a specific subdirectory, for instance: | 103 | Can be useful for excluding a specific subdirectory, for instance: |
| @@ -252,6 +257,7 @@ F: Documentation/ABI/testing/sysfs-bus-acpi · 153 unmodified lines | |||
| 252 | F: drivers/pci/*acpi* | 257 | F: drivers/pci/*acpi* |
| 253 | F: drivers/pci/*/*acpi* | 258 | F: drivers/pci/*/*acpi* |
| 254 | F: drivers/pci/*/*/*acpi* | 259 | F: drivers/pci/*/*/*acpi* |
| 260 | F: tools/power/acpi | ||
| 255 | 261 | ||
| 256 | ACPI COMPONENT ARCHITECTURE (ACPICA) | 262 | ACPI COMPONENT ARCHITECTURE (ACPICA) |
| 257 | M: Robert Moore <robert.moore@intel.com> | 263 | M: Robert Moore <robert.moore@intel.com> |
| @@ -266,6 +272,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm · 8 unmodified lines | |||
| 266 | S: Supported | 272 | S: Supported |
| 267 | F: drivers/acpi/acpica/ | 273 | F: drivers/acpi/acpica/ |
| 268 | F: include/acpi/ | 274 | F: include/acpi/ |
| 275 | F: tools/power/acpi/ | ||
| 269 | 276 | ||
| 270 | ACPI FAN DRIVER | 277 | ACPI FAN DRIVER |
| 271 | M: Zhang Rui <rui.zhang@intel.com> | 278 | M: Zhang Rui <rui.zhang@intel.com> |
| @@ -302,36 +309,36 @@ F: sound/pci/ad1889.* · 30 unmodified lines | |||
| 302 | 309 | ||
| 303 | AD525X ANALOG DEVICES DIGITAL POTENTIOMETERS DRIVER | 310 | AD525X ANALOG DEVICES DIGITAL POTENTIOMETERS DRIVER |
| 304 | M: Michael Hennerich <michael.hennerich@analog.com> | 311 | M: Michael Hennerich <michael.hennerich@analog.com> |
| 305 | L: device-drivers-devel@blackfin.uclinux.org | ||
| 306 | W: http://wiki.analog.com/AD5254 | 312 | W: http://wiki.analog.com/AD5254 |
| 313 | W: http://ez.analog.com/community/linux-device-drivers | ||
| 307 | S: Supported | 314 | S: Supported |
| 308 | F: drivers/misc/ad525x_dpot.c | 315 | F: drivers/misc/ad525x_dpot.c |
| 309 | 316 | ||
| 310 | AD5398 CURRENT REGULATOR DRIVER (AD5398/AD5821) | 317 | AD5398 CURRENT REGULATOR DRIVER (AD5398/AD5821) |
| 311 | M: Michael Hennerich <michael.hennerich@analog.com> | 318 | M: Michael Hennerich <michael.hennerich@analog.com> |
| 312 | L: device-drivers-devel@blackfin.uclinux.org | ||
| 313 | W: http://wiki.analog.com/AD5398 | 319 | W: http://wiki.analog.com/AD5398 |
| 320 | W: http://ez.analog.com/community/linux-device-drivers | ||
| 314 | S: Supported | 321 | S: Supported |
| 315 | F: drivers/regulator/ad5398.c | 322 | F: drivers/regulator/ad5398.c |
| 316 | 323 | ||
| 317 | AD714X CAPACITANCE TOUCH SENSOR DRIVER (AD7142/3/7/8/7A) | 324 | AD714X CAPACITANCE TOUCH SENSOR DRIVER (AD7142/3/7/8/7A) |
| 318 | M: Michael Hennerich <michael.hennerich@analog.com> | 325 | M: Michael Hennerich <michael.hennerich@analog.com> |
| 319 | L: device-drivers-devel@blackfin.uclinux.org | ||
| 320 | W: http://wiki.analog.com/AD7142 | 326 | W: http://wiki.analog.com/AD7142 |
| 327 | W: http://ez.analog.com/community/linux-device-drivers | ||
| 321 | S: Supported | 328 | S: Supported |
| 322 | F: drivers/input/misc/ad714x.c | 329 | F: drivers/input/misc/ad714x.c |
| 323 | 330 | ||
| 324 | AD7877 TOUCHSCREEN DRIVER | 331 | AD7877 TOUCHSCREEN DRIVER |
| 325 | M: Michael Hennerich <michael.hennerich@analog.com> | 332 | M: Michael Hennerich <michael.hennerich@analog.com> |
| 326 | L: device-drivers-devel@blackfin.uclinux.org | ||
| 327 | W: http://wiki.analog.com/AD7877 | 333 | W: http://wiki.analog.com/AD7877 |
| 334 | W: http://ez.analog.com/community/linux-device-drivers | ||
| 328 | S: Supported | 335 | S: Supported |
| 329 | F: drivers/input/touchscreen/ad7877.c | 336 | F: drivers/input/touchscreen/ad7877.c |
| 330 | 337 | ||
| 331 | AD7879 TOUCHSCREEN DRIVER (AD7879/AD7889) | 338 | AD7879 TOUCHSCREEN DRIVER (AD7879/AD7889) |
| 332 | M: Michael Hennerich <michael.hennerich@analog.com> | 339 | M: Michael Hennerich <michael.hennerich@analog.com> |
| 333 | L: device-drivers-devel@blackfin.uclinux.org | ||
| 334 | W: http://wiki.analog.com/AD7879 | 340 | W: http://wiki.analog.com/AD7879 |
| 341 | W: http://ez.analog.com/community/linux-device-drivers | ||
| 335 | S: Supported | 342 | S: Supported |
| 336 | F: drivers/input/touchscreen/ad7879.c | 343 | F: drivers/input/touchscreen/ad7879.c |
| 337 | 344 | ||
| @@ -340,7 +347,7 @@ M: Jiri Kosina <jkosina@suse.cz> · 2 unmodified lines | |||
| 340 | S: Maintained | 347 | S: Maintained |
| 341 | 348 | ||
| 342 | ADM1025 HARDWARE MONITOR DRIVER | 349 | ADM1025 HARDWARE MONITOR DRIVER |
| 343 | M: Jean Delvare <khali@linux-fr.org> | 350 | M: Jean Delvare <jdelvare@suse.de> |
| 344 | L: lm-sensors@lm-sensors.org | 351 | L: lm-sensors@lm-sensors.org |
| 345 | S: Maintained | 352 | S: Maintained |
| 346 | F: Documentation/hwmon/adm1025 | 353 | F: Documentation/hwmon/adm1025 |
| @@ -367,8 +374,8 @@ F: include/media/adp1653.h · 20 unmodified lines | |||
| 367 | 374 | ||
| 368 | ADP5520 BACKLIGHT DRIVER WITH IO EXPANDER (ADP5520/ADP5501) | 375 | ADP5520 BACKLIGHT DRIVER WITH IO EXPANDER (ADP5520/ADP5501) |
| 369 | M: Michael Hennerich <michael.hennerich@analog.com> | 376 | M: Michael Hennerich <michael.hennerich@analog.com> |
| 370 | L: device-drivers-devel@blackfin.uclinux.org | ||
| 371 | W: http://wiki.analog.com/ADP5520 | 377 | W: http://wiki.analog.com/ADP5520 |
| 378 | W: http://ez.analog.com/community/linux-device-drivers | ||
| 372 | S: Supported | 379 | S: Supported |
| 373 | F: drivers/mfd/adp5520.c | 380 | F: drivers/mfd/adp5520.c |
| 374 | F: drivers/video/backlight/adp5520_bl.c | 381 | F: drivers/video/backlight/adp5520_bl.c |
| @@ -378,16 +385,16 @@ F: drivers/input/keyboard/adp5520-keys.c · 3 unmodified lines | |||
| 378 | 385 | ||
| 379 | ADP5588 QWERTY KEYPAD AND IO EXPANDER DRIVER (ADP5588/ADP5587) | 386 | ADP5588 QWERTY KEYPAD AND IO EXPANDER DRIVER (ADP5588/ADP5587) |
| 380 | M: Michael Hennerich <michael.hennerich@analog.com> | 387 | M: Michael Hennerich <michael.hennerich@analog.com> |
| 381 | L: device-drivers-devel@blackfin.uclinux.org | ||
| 382 | W: http://wiki.analog.com/ADP5588 | 388 | W: http://wiki.analog.com/ADP5588 |
| 389 | W: http://ez.analog.com/community/linux-device-drivers | ||
| 383 | S: Supported | 390 | S: Supported |
| 384 | F: drivers/input/keyboard/adp5588-keys.c | 391 | F: drivers/input/keyboard/adp5588-keys.c |
| 385 | F: drivers/gpio/gpio-adp5588.c | 392 | F: drivers/gpio/gpio-adp5588.c |
| 386 | 393 | ||
| 387 | ADP8860 BACKLIGHT DRIVER (ADP8860/ADP8861/ADP8863) | 394 | ADP8860 BACKLIGHT DRIVER (ADP8860/ADP8861/ADP8863) |
| 388 | M: Michael Hennerich <michael.hennerich@analog.com> | 395 | M: Michael Hennerich <michael.hennerich@analog.com> |
| 389 | L: device-drivers-devel@blackfin.uclinux.org | ||
| 390 | W: http://wiki.analog.com/ADP8860 | 396 | W: http://wiki.analog.com/ADP8860 |
| 397 | W: http://ez.analog.com/community/linux-device-drivers | ||
| 391 | S: Supported | 398 | S: Supported |
| 392 | F: drivers/video/backlight/adp8860_bl.c | 399 | F: drivers/video/backlight/adp8860_bl.c |
| 393 | 400 | ||
| @@ -405,7 +412,7 @@ S: Maintained · 11 unmodified lines | |||
| 405 | F: drivers/macintosh/therm_adt746x.c | 412 | F: drivers/macintosh/therm_adt746x.c |
| 406 | 413 | ||
| 407 | ADT7475 HARDWARE MONITOR DRIVER | 414 | ADT7475 HARDWARE MONITOR DRIVER |
| 408 | M: Jean Delvare <khali@linux-fr.org> | 415 | M: Jean Delvare <jdelvare@suse.de> |
| 409 | L: lm-sensors@lm-sensors.org | 416 | L: lm-sensors@lm-sensors.org |
| 410 | S: Maintained | 417 | S: Maintained |
| 411 | F: Documentation/hwmon/adt7475 | 418 | F: Documentation/hwmon/adt7475 |
| @@ -413,8 +420,8 @@ F: drivers/hwmon/adt7475.c · 1 unmodified line | |||
| 413 | 420 | ||
| 414 | ADXL34X THREE-AXIS DIGITAL ACCELEROMETER DRIVER (ADXL345/ADXL346) | 421 | ADXL34X THREE-AXIS DIGITAL ACCELEROMETER DRIVER (ADXL345/ADXL346) |
| 415 | M: Michael Hennerich <michael.hennerich@analog.com> | 422 | M: Michael Hennerich <michael.hennerich@analog.com> |
| 416 | L: device-drivers-devel@blackfin.uclinux.org | ||
| 417 | W: http://wiki.analog.com/ADXL345 | 423 | W: http://wiki.analog.com/ADXL345 |
| 424 | W: http://ez.analog.com/community/linux-device-drivers | ||
| 418 | S: Supported | 425 | S: Supported |
| 419 | F: drivers/input/misc/adxl34x.c | 426 | F: drivers/input/misc/adxl34x.c |
| 420 | 427 | ||
| @@ -484,7 +491,6 @@ M: Hannes Reinecke <hare@suse.de> · 63 unmodified lines | |||
| 484 | L: linux-scsi@vger.kernel.org | 491 | L: linux-scsi@vger.kernel.org |
| 485 | S: Maintained | 492 | S: Maintained |
| 486 | F: drivers/scsi/aic7xxx/ | 493 | F: drivers/scsi/aic7xxx/ |
| 487 | F: drivers/scsi/aic7xxx_old/ | ||
| 488 | 494 | ||
| 489 | AIMSLAB FM RADIO RECEIVER DRIVER | 495 | AIMSLAB FM RADIO RECEIVER DRIVER |
| 490 | M: Hans Verkuil <hverkuil@xs4all.nl> | 496 | M: Hans Verkuil <hverkuil@xs4all.nl> |
| @@ -539,6 +545,13 @@ F: drivers/tty/serial/altera_jtaguart.c · 48 unmodified lines | |||
| 539 | F: include/linux/altera_uart.h | 545 | F: include/linux/altera_uart.h |
| 540 | F: include/linux/altera_jtaguart.h | 546 | F: include/linux/altera_jtaguart.h |
| 541 | 547 | ||
| 548 | AMD CRYPTOGRAPHIC COPROCESSOR (CCP) DRIVER | ||
| 549 | M: Tom Lendacky <thomas.lendacky@amd.com> | ||
| 550 | L: linux-crypto@vger.kernel.org | ||
| 551 | S: Supported | ||
| 552 | F: drivers/crypto/ccp/ | ||
| 553 | F: include/linux/ccp.h | ||
| 554 | |||
| 542 | AMD FAM15H PROCESSOR POWER MONITORING DRIVER | 555 | AMD FAM15H PROCESSOR POWER MONITORING DRIVER |
| 543 | M: Andreas Herrmann <herrmann.der.user@googlemail.com> | 556 | M: Andreas Herrmann <herrmann.der.user@googlemail.com> |
| 544 | L: lm-sensors@lm-sensors.org | 557 | L: lm-sensors@lm-sensors.org |
| @@ -614,9 +627,9 @@ F: drivers/media/i2c/adv7842* · 69 unmodified lines | |||
| 614 | 627 | ||
| 615 | ANALOG DEVICES INC ASOC CODEC DRIVERS | 628 | ANALOG DEVICES INC ASOC CODEC DRIVERS |
| 616 | M: Lars-Peter Clausen <lars@metafoo.de> | 629 | M: Lars-Peter Clausen <lars@metafoo.de> |
| 617 | L: device-drivers-devel@blackfin.uclinux.org | ||
| 618 | L: alsa-devel@alsa-project.org (moderated for non-subscribers) | 630 | L: alsa-devel@alsa-project.org (moderated for non-subscribers) |
| 619 | W: http://wiki.analog.com/ | 631 | W: http://wiki.analog.com/ |
| 632 | W: http://ez.analog.com/community/linux-device-drivers | ||
| 620 | S: Supported | 633 | S: Supported |
| 621 | F: sound/soc/codecs/adau* | 634 | F: sound/soc/codecs/adau* |
| 622 | F: sound/soc/codecs/adav* | 635 | F: sound/soc/codecs/adav* |
| @@ -626,7 +639,7 @@ F: sound/soc/codecs/ssm* · 3 unmodified lines | |||
| 626 | F: sound/soc/codecs/sigmadsp.* | 639 | F: sound/soc/codecs/sigmadsp.* |
| 627 | 640 | ||
| 628 | ANALOG DEVICES INC ASOC DRIVERS | 641 | ANALOG DEVICES INC ASOC DRIVERS |
| 629 | L: uclinux-dist-devel@blackfin.uclinux.org | 642 | L: adi-buildroot-devel@lists.sourceforge.net |
| 630 | L: alsa-devel@alsa-project.org (moderated for non-subscribers) | 643 | L: alsa-devel@alsa-project.org (moderated for non-subscribers) |
| 631 | W: http://blackfin.uclinux.org/ | 644 | W: http://blackfin.uclinux.org/ |
| 632 | S: Supported | 645 | S: Supported |
| @@ -766,7 +779,12 @@ ARM/Allwinner A1X SoC support · 133 unmodified lines | |||
| 766 | M: Maxime Ripard <maxime.ripard@free-electrons.com> | 779 | M: Maxime Ripard <maxime.ripard@free-electrons.com> |
| 767 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 780 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
| 768 | S: Maintained | 781 | S: Maintained |
| 769 | F: arch/arm/mach-sunxi/ | 782 | N: sun[x4567]i |
| 783 | |||
| 784 | ARM/Allwinner SoC Clock Support | ||
| 785 | M: Emilio López <emilio@elopez.com.ar> | ||
| 786 | S: Maintained | ||
| 787 | F: drivers/clk/sunxi/ | ||
| 770 | 788 | ||
| 771 | ARM/ATMEL AT91RM9200 AND AT91SAM ARM ARCHITECTURES | 789 | ARM/ATMEL AT91RM9200 AND AT91SAM ARM ARCHITECTURES |
| 772 | M: Andrew Victor <linux@maxim.org.za> | 790 | M: Andrew Victor <linux@maxim.org.za> |
| @@ -867,6 +885,12 @@ S: Maintained · 94 unmodified lines | |||
| 867 | F: arch/arm/mach-ebsa110/ | 885 | F: arch/arm/mach-ebsa110/ |
| 868 | F: drivers/net/ethernet/amd/am79c961a.* | 886 | F: drivers/net/ethernet/amd/am79c961a.* |
| 869 | 887 | ||
| 888 | ARM/ENERGY MICRO (SILICON LABS) EFM32 SUPPORT | ||
| 889 | M: Uwe Kleine-König <kernel@pengutronix.de> | ||
| 890 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||
| 891 | S: Maintained | ||
| 892 | N: efm32 | ||
| 893 | |||
| 870 | ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6) | 894 | ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6) |
| 871 | M: Daniel Ribeiro <drwyrm@gmail.com> | 895 | M: Daniel Ribeiro <drwyrm@gmail.com> |
| 872 | M: Stefan Schmidt <stefan@openezx.org> | 896 | M: Stefan Schmidt <stefan@openezx.org> |
| @@ -1029,6 +1053,12 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) · 156 unmodified lines | |||
| 1029 | S: Maintained | 1053 | S: Maintained |
| 1030 | F: arch/arm/mach-mvebu/ | 1054 | F: arch/arm/mach-mvebu/ |
| 1031 | 1055 | ||
| 1056 | ARM/Marvell Berlin SoC support | ||
| 1057 | M: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> | ||
| 1058 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||
| 1059 | S: Maintained | ||
| 1060 | F: arch/arm/mach-berlin/ | ||
| 1061 | |||
| 1032 | ARM/Marvell Dove/Kirkwood/MV78xx0/Orion SOC support | 1062 | ARM/Marvell Dove/Kirkwood/MV78xx0/Orion SOC support |
| 1033 | M: Jason Cooper <jason@lakedaemon.net> | 1063 | M: Jason Cooper <jason@lakedaemon.net> |
| 1034 | M: Andrew Lunn <andrew@lunn.ch> | 1064 | M: Andrew Lunn <andrew@lunn.ch> |
| @@ -1322,6 +1352,14 @@ F: drivers/rtc/rtc-ab8500.c · 287 unmodified lines | |||
| 1322 | F: drivers/rtc/rtc-pl031.c | 1352 | F: drivers/rtc/rtc-pl031.c |
| 1323 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git | 1353 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git |
| 1324 | 1354 | ||
| 1355 | ARM/Ux500 CLOCK FRAMEWORK SUPPORT | ||
| 1356 | M: Ulf Hansson <ulf.hansson@linaro.org> | ||
| 1357 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||
| 1358 | T: git git://git.linaro.org/people/ulfh/clk.git | ||
| 1359 | S: Maintained | ||
| 1360 | F: drivers/clk/ux500/ | ||
| 1361 | F: include/linux/platform_data/clk-ux500.h | ||
| 1362 | |||
| 1325 | ARM/VFP SUPPORT | 1363 | ARM/VFP SUPPORT |
| 1326 | M: Russell King <linux@arm.linux.org.uk> | 1364 | M: Russell King <linux@arm.linux.org.uk> |
| 1327 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 1365 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
| @@ -1371,6 +1409,7 @@ F: drivers/cpuidle/cpuidle-zynq.c · 43 unmodified lines | |||
| 1371 | N: zynq | 1409 | N: zynq |
| 1372 | N: xilinx | 1410 | N: xilinx |
| 1373 | F: drivers/clocksource/cadence_ttc_timer.c | 1411 | F: drivers/clocksource/cadence_ttc_timer.c |
| 1412 | F: drivers/mmc/host/sdhci-of-arasan.c | ||
| 1374 | 1413 | ||
| 1375 | ARM SMMU DRIVER | 1414 | ARM SMMU DRIVER |
| 1376 | M: Will Deacon <will.deacon@arm.com> | 1415 | M: Will Deacon <will.deacon@arm.com> |
| @@ -1435,7 +1474,7 @@ F: Documentation/aoe/ · 58 unmodified lines | |||
| 1435 | F: drivers/block/aoe/ | 1474 | F: drivers/block/aoe/ |
| 1436 | 1475 | ||
| 1437 | ATHEROS ATH GENERIC UTILITIES | 1476 | ATHEROS ATH GENERIC UTILITIES |
| 1438 | M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com> | 1477 | M: "Luis R. Rodriguez" <mcgrof@do-not-panic.com> |
| 1439 | L: linux-wireless@vger.kernel.org | 1478 | L: linux-wireless@vger.kernel.org |
| 1440 | S: Supported | 1479 | S: Supported |
| 1441 | F: drivers/net/wireless/ath/* | 1480 | F: drivers/net/wireless/ath/* |
| @@ -1443,7 +1482,7 @@ F: drivers/net/wireless/ath/* · 1 unmodified line | |||
| 1443 | ATHEROS ATH5K WIRELESS DRIVER | 1482 | ATHEROS ATH5K WIRELESS DRIVER |
| 1444 | M: Jiri Slaby <jirislaby@gmail.com> | 1483 | M: Jiri Slaby <jirislaby@gmail.com> |
| 1445 | M: Nick Kossifidis <mickflemm@gmail.com> | 1484 | M: Nick Kossifidis <mickflemm@gmail.com> |
| 1446 | M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com> | 1485 | M: "Luis R. Rodriguez" <mcgrof@do-not-panic.com> |
| 1447 | L: linux-wireless@vger.kernel.org | 1486 | L: linux-wireless@vger.kernel.org |
| 1448 | L: ath5k-devel@lists.ath5k.org | 1487 | L: ath5k-devel@lists.ath5k.org |
| 1449 | W: http://wireless.kernel.org/en/users/Drivers/ath5k | 1488 | W: http://wireless.kernel.org/en/users/Drivers/ath5k |
| @@ -1458,17 +1497,6 @@ T: git git://github.com/kvalo/ath.git · 8 unmodified lines | |||
| 1458 | S: Supported | 1497 | S: Supported |
| 1459 | F: drivers/net/wireless/ath/ath6kl/ | 1498 | F: drivers/net/wireless/ath/ath6kl/ |
| 1460 | 1499 | ||
| 1461 | ATHEROS ATH9K WIRELESS DRIVER | ||
| 1462 | M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com> | ||
| 1463 | M: Jouni Malinen <jouni@qca.qualcomm.com> | ||
| 1464 | M: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> | ||
| 1465 | M: Senthil Balasubramanian <senthilb@qca.qualcomm.com> | ||
| 1466 | L: linux-wireless@vger.kernel.org | ||
| 1467 | L: ath9k-devel@lists.ath9k.org | ||
| 1468 | W: http://wireless.kernel.org/en/users/Drivers/ath9k | ||
| 1469 | S: Supported | ||
| 1470 | F: drivers/net/wireless/ath/ath9k/ | ||
| 1471 | |||
| 1472 | WILOCITY WIL6210 WIRELESS DRIVER | 1500 | WILOCITY WIL6210 WIRELESS DRIVER |
| 1473 | M: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com> | 1501 | M: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com> |
| 1474 | L: linux-wireless@vger.kernel.org | 1502 | L: linux-wireless@vger.kernel.org |
| @@ -1598,11 +1626,10 @@ S: Supported · 123 unmodified lines | |||
| 1598 | F: drivers/scsi/esas2r | 1626 | F: drivers/scsi/esas2r |
| 1599 | 1627 | ||
| 1600 | AUDIT SUBSYSTEM | 1628 | AUDIT SUBSYSTEM |
| 1601 | M: Al Viro <viro@zeniv.linux.org.uk> | ||
| 1602 | M: Eric Paris <eparis@redhat.com> | 1629 | M: Eric Paris <eparis@redhat.com> |
| 1603 | L: linux-audit@redhat.com (subscribers-only) | 1630 | L: linux-audit@redhat.com (subscribers-only) |
| 1604 | W: http://people.redhat.com/sgrubb/audit/ | 1631 | W: http://people.redhat.com/sgrubb/audit/ |
| 1605 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current.git | 1632 | T: git git://git.infradead.org/users/eparis/audit.git |
| 1606 | S: Maintained | 1633 | S: Maintained |
| 1607 | F: include/linux/audit.h | 1634 | F: include/linux/audit.h |
| 1608 | F: include/uapi/linux/audit.h | 1635 | F: include/uapi/linux/audit.h |
| @@ -1715,56 +1742,54 @@ F: fs/bfs/ · 106 unmodified lines | |||
| 1715 | F: include/uapi/linux/bfs_fs.h | 1742 | F: include/uapi/linux/bfs_fs.h |
| 1716 | 1743 | ||
| 1717 | BLACKFIN ARCHITECTURE | 1744 | BLACKFIN ARCHITECTURE |
| 1718 | M: Mike Frysinger <vapier@gentoo.org> | 1745 | M: Steven Miao <realmz6@gmail.com> |
| 1719 | L: uclinux-dist-devel@blackfin.uclinux.org | 1746 | L: adi-buildroot-devel@lists.sourceforge.net |
| 1720 | W: http://blackfin.uclinux.org | 1747 | W: http://blackfin.uclinux.org |
| 1721 | S: Supported | 1748 | S: Supported |
| 1722 | F: arch/blackfin/ | 1749 | F: arch/blackfin/ |
| 1723 | 1750 | ||
| 1724 | BLACKFIN EMAC DRIVER | 1751 | BLACKFIN EMAC DRIVER |
| 1725 | L: uclinux-dist-devel@blackfin.uclinux.org | 1752 | L: adi-buildroot-devel@lists.sourceforge.net |
| 1726 | W: http://blackfin.uclinux.org | 1753 | W: http://blackfin.uclinux.org |
| 1727 | S: Supported | 1754 | S: Supported |
| 1728 | F: drivers/net/ethernet/adi/ | 1755 | F: drivers/net/ethernet/adi/ |
| 1729 | 1756 | ||
| 1730 | BLACKFIN RTC DRIVER | 1757 | BLACKFIN RTC DRIVER |
| 1731 | M: Mike Frysinger <vapier.adi@gmail.com> | 1758 | L: adi-buildroot-devel@lists.sourceforge.net |
| 1732 | L: uclinux-dist-devel@blackfin.uclinux.org | ||
| 1733 | W: http://blackfin.uclinux.org | 1759 | W: http://blackfin.uclinux.org |
| 1734 | S: Supported | 1760 | S: Supported |
| 1735 | F: drivers/rtc/rtc-bfin.c | 1761 | F: drivers/rtc/rtc-bfin.c |
| 1736 | 1762 | ||
| 1737 | BLACKFIN SDH DRIVER | 1763 | BLACKFIN SDH DRIVER |
| 1738 | M: Sonic Zhang <sonic.zhang@analog.com> | 1764 | M: Sonic Zhang <sonic.zhang@analog.com> |
| 1739 | L: uclinux-dist-devel@blackfin.uclinux.org | 1765 | L: adi-buildroot-devel@lists.sourceforge.net |
| 1740 | W: http://blackfin.uclinux.org | 1766 | W: http://blackfin.uclinux.org |
| 1741 | S: Supported | 1767 | S: Supported |
| 1742 | F: drivers/mmc/host/bfin_sdh.c | 1768 | F: drivers/mmc/host/bfin_sdh.c |
| 1743 | 1769 | ||
| 1744 | BLACKFIN SERIAL DRIVER | 1770 | BLACKFIN SERIAL DRIVER |
| 1745 | M: Sonic Zhang <sonic.zhang@analog.com> | 1771 | M: Sonic Zhang <sonic.zhang@analog.com> |
| 1746 | L: uclinux-dist-devel@blackfin.uclinux.org | 1772 | L: adi-buildroot-devel@lists.sourceforge.net |
| 1747 | W: http://blackfin.uclinux.org | 1773 | W: http://blackfin.uclinux.org |
| 1748 | S: Supported | 1774 | S: Supported |
| 1749 | F: drivers/tty/serial/bfin_uart.c | 1775 | F: drivers/tty/serial/bfin_uart.c |
| 1750 | 1776 | ||
| 1751 | BLACKFIN WATCHDOG DRIVER | 1777 | BLACKFIN WATCHDOG DRIVER |
| 1752 | M: Mike Frysinger <vapier.adi@gmail.com> | 1778 | L: adi-buildroot-devel@lists.sourceforge.net |
| 1753 | L: uclinux-dist-devel@blackfin.uclinux.org | ||
| 1754 | W: http://blackfin.uclinux.org | 1779 | W: http://blackfin.uclinux.org |
| 1755 | S: Supported | 1780 | S: Supported |
| 1756 | F: drivers/watchdog/bfin_wdt.c | 1781 | F: drivers/watchdog/bfin_wdt.c |
| 1757 | 1782 | ||
| 1758 | BLACKFIN I2C TWI DRIVER | 1783 | BLACKFIN I2C TWI DRIVER |
| 1759 | M: Sonic Zhang <sonic.zhang@analog.com> | 1784 | M: Sonic Zhang <sonic.zhang@analog.com> |
| 1760 | L: uclinux-dist-devel@blackfin.uclinux.org | 1785 | L: adi-buildroot-devel@lists.sourceforge.net |
| 1761 | W: http://blackfin.uclinux.org/ | 1786 | W: http://blackfin.uclinux.org/ |
| 1762 | S: Supported | 1787 | S: Supported |
| 1763 | F: drivers/i2c/busses/i2c-bfin-twi.c | 1788 | F: drivers/i2c/busses/i2c-bfin-twi.c |
| 1764 | 1789 | ||
| 1765 | BLACKFIN MEDIA DRIVER | 1790 | BLACKFIN MEDIA DRIVER |
| 1766 | M: Scott Jiang <scott.jiang.linux@gmail.com> | 1791 | M: Scott Jiang <scott.jiang.linux@gmail.com> |
| 1767 | L: uclinux-dist-devel@blackfin.uclinux.org | 1792 | L: adi-buildroot-devel@lists.sourceforge.net |
| 1768 | W: http://blackfin.uclinux.org/ | 1793 | W: http://blackfin.uclinux.org/ |
| 1769 | S: Supported | 1794 | S: Supported |
| 1770 | F: drivers/media/platform/blackfin/ | 1795 | F: drivers/media/platform/blackfin/ |
| @@ -2024,6 +2049,7 @@ L: linux-can@vger.kernel.org · 253 unmodified lines | |||
| 2024 | W: http://gitorious.org/linux-can | 2049 | W: http://gitorious.org/linux-can |
| 2025 | T: git git://gitorious.org/linux-can/linux-can-next.git | 2050 | T: git git://gitorious.org/linux-can/linux-can-next.git |
| 2026 | S: Maintained | 2051 | S: Maintained |
| 2052 | F: Documentation/networking/can.txt | ||
| 2027 | F: net/can/ | 2053 | F: net/can/ |
| 2028 | F: include/linux/can/core.h | 2054 | F: include/linux/can/core.h |
| 2029 | F: include/uapi/linux/can.h | 2055 | F: include/uapi/linux/can.h |
| @@ -2158,6 +2184,11 @@ M: Nishank Trivedi <nistrive@cisco.com> · 128 unmodified lines | |||
| 2158 | S: Supported | 2184 | S: Supported |
| 2159 | F: drivers/net/ethernet/cisco/enic/ | 2185 | F: drivers/net/ethernet/cisco/enic/ |
| 2160 | 2186 | ||
| 2187 | CISCO VIC LOW LATENCY NIC DRIVER | ||
| 2188 | M: Upinder Malhi <umalhi@cisco.com> | ||
| 2189 | S: Supported | ||
| 2190 | F: drivers/infiniband/hw/usnic | ||
| 2191 | |||
| 2161 | CIRRUS LOGIC EP93XX ETHERNET DRIVER | 2192 | CIRRUS LOGIC EP93XX ETHERNET DRIVER |
| 2162 | M: Hartley Sweeten <hsweeten@visionengravers.com> | 2193 | M: Hartley Sweeten <hsweeten@visionengravers.com> |
| 2163 | L: netdev@vger.kernel.org | 2194 | L: netdev@vger.kernel.org |
| @@ -2191,6 +2222,7 @@ F: include/linux/clk.h · 27 unmodified lines | |||
| 2191 | CLOCKSOURCE, CLOCKEVENT DRIVERS | 2222 | CLOCKSOURCE, CLOCKEVENT DRIVERS |
| 2192 | M: Daniel Lezcano <daniel.lezcano@linaro.org> | 2223 | M: Daniel Lezcano <daniel.lezcano@linaro.org> |
| 2193 | M: Thomas Gleixner <tglx@linutronix.de> | 2224 | M: Thomas Gleixner <tglx@linutronix.de> |
| 2225 | L: linux-kernel@vger.kernel.org | ||
| 2194 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core | 2226 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core |
| 2195 | S: Supported | 2227 | S: Supported |
| 2196 | F: drivers/clocksource | 2228 | F: drivers/clocksource |
| @@ -2619,7 +2651,7 @@ S: Maintained · 422 unmodified lines | |||
| 2619 | F: drivers/platform/x86/dell-laptop.c | 2651 | F: drivers/platform/x86/dell-laptop.c |
| 2620 | 2652 | ||
| 2621 | DELL LAPTOP SMM DRIVER | 2653 | DELL LAPTOP SMM DRIVER |
| 2622 | S: Orphan | 2654 | M: Guenter Roeck <linux@roeck-us.net> |
| 2623 | F: drivers/char/i8k.c | 2655 | F: drivers/char/i8k.c |
| 2624 | F: include/uapi/linux/i8k.h | 2656 | F: include/uapi/linux/i8k.h |
| 2625 | 2657 | ||
| @@ -2638,7 +2670,7 @@ DESIGNWARE USB2 DRD IP DRIVER · 12 unmodified lines | |||
| 2638 | M: Paul Zimmerman <paulz@synopsys.com> | 2670 | M: Paul Zimmerman <paulz@synopsys.com> |
| 2639 | L: linux-usb@vger.kernel.org | 2671 | L: linux-usb@vger.kernel.org |
| 2640 | S: Maintained | 2672 | S: Maintained |
| 2641 | F: drivers/staging/dwc2/ | 2673 | F: drivers/usb/dwc2/ |
| 2642 | 2674 | ||
| 2643 | DESIGNWARE USB3 DRD IP DRIVER | 2675 | DESIGNWARE USB3 DRD IP DRIVER |
| 2644 | M: Felipe Balbi <balbi@ti.com> | 2676 | M: Felipe Balbi <balbi@ti.com> |
| @@ -3335,6 +3367,7 @@ EXTERNAL CONNECTOR SUBSYSTEM (EXTCON) · 690 unmodified lines | |||
| 3335 | M: MyungJoo Ham <myungjoo.ham@samsung.com> | 3367 | M: MyungJoo Ham <myungjoo.ham@samsung.com> |
| 3336 | M: Chanwoo Choi <cw00.choi@samsung.com> | 3368 | M: Chanwoo Choi <cw00.choi@samsung.com> |
| 3337 | L: linux-kernel@vger.kernel.org | 3369 | L: linux-kernel@vger.kernel.org |
| 3370 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/extcon.git | ||
| 3338 | S: Maintained | 3371 | S: Maintained |
| 3339 | F: drivers/extcon/ | 3372 | F: drivers/extcon/ |
| 3340 | F: Documentation/extcon/ | 3373 | F: Documentation/extcon/ |
| @@ -3344,7 +3377,6 @@ M: Jingoo Han <jg1.han@samsung.com> · 3 unmodified lines | |||
| 3344 | L: linux-fbdev@vger.kernel.org | 3377 | L: linux-fbdev@vger.kernel.org |
| 3345 | S: Maintained | 3378 | S: Maintained |
| 3346 | F: drivers/video/exynos/exynos_dp* | 3379 | F: drivers/video/exynos/exynos_dp* |
| 3347 | F: include/video/exynos_dp* | ||
| 3348 | 3380 | ||
| 3349 | EXYNOS MIPI DISPLAY DRIVERS | 3381 | EXYNOS MIPI DISPLAY DRIVERS |
| 3350 | M: Inki Dae <inki.dae@samsung.com> | 3382 | M: Inki Dae <inki.dae@samsung.com> |
| @@ -3356,7 +3388,7 @@ F: drivers/video/exynos/exynos_mipi* · 5 unmodified lines | |||
| 3356 | F: include/video/exynos_mipi* | 3388 | F: include/video/exynos_mipi* |
| 3357 | 3389 | ||
| 3358 | F71805F HARDWARE MONITORING DRIVER | 3390 | F71805F HARDWARE MONITORING DRIVER |
| 3359 | M: Jean Delvare <khali@linux-fr.org> | 3391 | M: Jean Delvare <jdelvare@suse.de> |
| 3360 | L: lm-sensors@lm-sensors.org | 3392 | L: lm-sensors@lm-sensors.org |
| 3361 | S: Maintained | 3393 | S: Maintained |
| 3362 | F: Documentation/hwmon/f71805f | 3394 | F: Documentation/hwmon/f71805f |
| @@ -3634,6 +3666,7 @@ W: http://en.wikipedia.org/wiki/F2FS · 271 unmodified lines | |||
| 3634 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git | 3666 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git |
| 3635 | S: Maintained | 3667 | S: Maintained |
| 3636 | F: Documentation/filesystems/f2fs.txt | 3668 | F: Documentation/filesystems/f2fs.txt |
| 3669 | F: Documentation/ABI/testing/sysfs-fs-f2fs | ||
| 3637 | F: fs/f2fs/ | 3670 | F: fs/f2fs/ |
| 3638 | F: include/linux/f2fs_fs.h | 3671 | F: include/linux/f2fs_fs.h |
| 3639 | 3672 | ||
| @@ -3882,7 +3915,7 @@ S: Odd Fixes · 242 unmodified lines | |||
| 3882 | F: drivers/tty/hvc/ | 3915 | F: drivers/tty/hvc/ |
| 3883 | 3916 | ||
| 3884 | HARDWARE MONITORING | 3917 | HARDWARE MONITORING |
| 3885 | M: Jean Delvare <khali@linux-fr.org> | 3918 | M: Jean Delvare <jdelvare@suse.de> |
| 3886 | M: Guenter Roeck <linux@roeck-us.net> | 3919 | M: Guenter Roeck <linux@roeck-us.net> |
| 3887 | L: lm-sensors@lm-sensors.org | 3920 | L: lm-sensors@lm-sensors.org |
| 3888 | W: http://www.lm-sensors.org/ | 3921 | W: http://www.lm-sensors.org/ |
| @@ -3954,6 +3987,12 @@ S: Orphan · 65 unmodified lines | |||
| 3954 | F: Documentation/filesystems/hfs.txt | 3987 | F: Documentation/filesystems/hfs.txt |
| 3955 | F: fs/hfs/ | 3988 | F: fs/hfs/ |
| 3956 | 3989 | ||
| 3990 | HFSPLUS FILESYSTEM | ||
| 3991 | L: linux-fsdevel@vger.kernel.org | ||
| 3992 | S: Orphan | ||
| 3993 | F: Documentation/filesystems/hfsplus.txt | ||
| 3994 | F: fs/hfsplus/ | ||
| 3995 | |||
| 3957 | HGA FRAMEBUFFER DRIVER | 3996 | HGA FRAMEBUFFER DRIVER |
| 3958 | M: Ferenc Bakonyi <fero@drama.obuda.kando.hu> | 3997 | M: Ferenc Bakonyi <fero@drama.obuda.kando.hu> |
| 3959 | L: linux-nvidia@lists.surfsouth.com | 3998 | L: linux-nvidia@lists.surfsouth.com |
| @@ -3985,6 +4024,7 @@ F: include/uapi/linux/hid* · 25 unmodified lines | |||
| 3985 | 4024 | ||
| 3986 | HIGH-RESOLUTION TIMERS, CLOCKEVENTS, DYNTICKS | 4025 | HIGH-RESOLUTION TIMERS, CLOCKEVENTS, DYNTICKS |
| 3987 | M: Thomas Gleixner <tglx@linutronix.de> | 4026 | M: Thomas Gleixner <tglx@linutronix.de> |
| 4027 | L: linux-kernel@vger.kernel.org | ||
| 3988 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core | 4028 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core |
| 3989 | S: Maintained | 4029 | S: Maintained |
| 3990 | F: Documentation/timers/ | 4030 | F: Documentation/timers/ |
| @@ -4104,7 +4144,7 @@ F: include/linux/hyperv.h · 113 unmodified lines | |||
| 4104 | F: tools/hv/ | 4144 | F: tools/hv/ |
| 4105 | 4145 | ||
| 4106 | I2C OVER PARALLEL PORT | 4146 | I2C OVER PARALLEL PORT |
| 4107 | M: Jean Delvare <khali@linux-fr.org> | 4147 | M: Jean Delvare <jdelvare@suse.de> |
| 4108 | L: linux-i2c@vger.kernel.org | 4148 | L: linux-i2c@vger.kernel.org |
| 4109 | S: Maintained | 4149 | S: Maintained |
| 4110 | F: Documentation/i2c/busses/i2c-parport | 4150 | F: Documentation/i2c/busses/i2c-parport |
| @@ -4113,7 +4153,7 @@ F: drivers/i2c/busses/i2c-parport.c · 2 unmodified lines | |||
| 4113 | F: drivers/i2c/busses/i2c-parport-light.c | 4153 | F: drivers/i2c/busses/i2c-parport-light.c |
| 4114 | 4154 | ||
| 4115 | I2C/SMBUS CONTROLLER DRIVERS FOR PC | 4155 | I2C/SMBUS CONTROLLER DRIVERS FOR PC |
| 4116 | M: Jean Delvare <khali@linux-fr.org> | 4156 | M: Jean Delvare <jdelvare@suse.de> |
| 4117 | L: linux-i2c@vger.kernel.org | 4157 | L: linux-i2c@vger.kernel.org |
| 4118 | S: Maintained | 4158 | S: Maintained |
| 4119 | F: Documentation/i2c/busses/i2c-ali1535 | 4159 | F: Documentation/i2c/busses/i2c-ali1535 |
| @@ -4154,7 +4194,7 @@ F: drivers/i2c/busses/i2c-ismt.c · 34 unmodified lines | |||
| 4154 | F: Documentation/i2c/busses/i2c-ismt | 4194 | F: Documentation/i2c/busses/i2c-ismt |
| 4155 | 4195 | ||
| 4156 | I2C/SMBUS STUB DRIVER | 4196 | I2C/SMBUS STUB DRIVER |
| 4157 | M: Jean Delvare <khali@linux-fr.org> | 4197 | M: Jean Delvare <jdelvare@suse.de> |
| 4158 | L: linux-i2c@vger.kernel.org | 4198 | L: linux-i2c@vger.kernel.org |
| 4159 | S: Maintained | 4199 | S: Maintained |
| 4160 | F: drivers/i2c/i2c-stub.c | 4200 | F: drivers/i2c/i2c-stub.c |
| @@ -4173,7 +4213,7 @@ F: include/uapi/linux/i2c.h · 12 unmodified lines | |||
| 4173 | F: include/uapi/linux/i2c-*.h | 4213 | F: include/uapi/linux/i2c-*.h |
| 4174 | 4214 | ||
| 4175 | I2C-TAOS-EVM DRIVER | 4215 | I2C-TAOS-EVM DRIVER |
| 4176 | M: Jean Delvare <khali@linux-fr.org> | 4216 | M: Jean Delvare <jdelvare@suse.de> |
| 4177 | L: linux-i2c@vger.kernel.org | 4217 | L: linux-i2c@vger.kernel.org |
| 4178 | S: Maintained | 4218 | S: Maintained |
| 4179 | F: Documentation/i2c/busses/i2c-taos-evm | 4219 | F: Documentation/i2c/busses/i2c-taos-evm |
| @@ -4474,7 +4514,7 @@ M: Deepak Saxena <dsaxena@plexity.net> · 294 unmodified lines | |||
| 4474 | S: Maintained | 4514 | S: Maintained |
| 4475 | F: drivers/char/hw_random/ixp4xx-rng.c | 4515 | F: drivers/char/hw_random/ixp4xx-rng.c |
| 4476 | 4516 | ||
| 4477 | INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/igbvf/ixgb/ixgbe/ixgbevf/i40e) | 4517 | INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/igbvf/ixgb/ixgbe/ixgbevf/i40e/i40evf) |
| 4478 | M: Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 4518 | M: Jeff Kirsher <jeffrey.t.kirsher@intel.com> |
| 4479 | M: Jesse Brandeburg <jesse.brandeburg@intel.com> | 4519 | M: Jesse Brandeburg <jesse.brandeburg@intel.com> |
| 4480 | M: Bruce Allan <bruce.w.allan@intel.com> | 4520 | M: Bruce Allan <bruce.w.allan@intel.com> |
| @@ -4483,6 +4523,7 @@ M: Don Skidmore <donald.c.skidmore@intel.com> · 2 unmodified lines | |||
| 4483 | M: Greg Rose <gregory.v.rose@intel.com> | 4523 | M: Greg Rose <gregory.v.rose@intel.com> |
| 4484 | M: Alex Duyck <alexander.h.duyck@intel.com> | 4524 | M: Alex Duyck <alexander.h.duyck@intel.com> |
| 4485 | M: John Ronciak <john.ronciak@intel.com> | 4525 | M: John Ronciak <john.ronciak@intel.com> |
| 4526 | M: Mitch Williams <mitch.a.williams@intel.com> | ||
| 4486 | L: e1000-devel@lists.sourceforge.net | 4527 | L: e1000-devel@lists.sourceforge.net |
| 4487 | W: http://www.intel.com/support/feedback.htm | 4528 | W: http://www.intel.com/support/feedback.htm |
| 4488 | W: http://e1000.sourceforge.net/ | 4529 | W: http://e1000.sourceforge.net/ |
| @@ -4498,6 +4539,7 @@ F: Documentation/networking/ixgb.txt · 9 unmodified lines | |||
| 4498 | F: Documentation/networking/ixgbe.txt | 4539 | F: Documentation/networking/ixgbe.txt |
| 4499 | F: Documentation/networking/ixgbevf.txt | 4540 | F: Documentation/networking/ixgbevf.txt |
| 4500 | F: Documentation/networking/i40e.txt | 4541 | F: Documentation/networking/i40e.txt |
| 4542 | F: Documentation/networking/i40evf.txt | ||
| 4501 | F: drivers/net/ethernet/intel/ | 4543 | F: drivers/net/ethernet/intel/ |
| 4502 | 4544 | ||
| 4503 | INTEL-MID GPIO DRIVER | 4545 | INTEL-MID GPIO DRIVER |
| @@ -4654,6 +4696,7 @@ F: net/irda/ · 150 unmodified lines | |||
| 4654 | 4696 | ||
| 4655 | IRQ SUBSYSTEM | 4697 | IRQ SUBSYSTEM |
| 4656 | M: Thomas Gleixner <tglx@linutronix.de> | 4698 | M: Thomas Gleixner <tglx@linutronix.de> |
| 4699 | L: linux-kernel@vger.kernel.org | ||
| 4657 | S: Maintained | 4700 | S: Maintained |
| 4658 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core | 4701 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core |
| 4659 | F: kernel/irq/ | 4702 | F: kernel/irq/ |
| @@ -4728,7 +4771,7 @@ S: Maintained · 68 unmodified lines | |||
| 4728 | F: drivers/isdn/hardware/eicon/ | 4771 | F: drivers/isdn/hardware/eicon/ |
| 4729 | 4772 | ||
| 4730 | IT87 HARDWARE MONITORING DRIVER | 4773 | IT87 HARDWARE MONITORING DRIVER |
| 4731 | M: Jean Delvare <khali@linux-fr.org> | 4774 | M: Jean Delvare <jdelvare@suse.de> |
| 4732 | L: lm-sensors@lm-sensors.org | 4775 | L: lm-sensors@lm-sensors.org |
| 4733 | S: Maintained | 4776 | S: Maintained |
| 4734 | F: Documentation/hwmon/it87 | 4777 | F: Documentation/hwmon/it87 |
| @@ -4915,7 +4958,7 @@ F: include/linux/sunrpc/ · 180 unmodified lines | |||
| 4915 | F: include/uapi/linux/sunrpc/ | 4958 | F: include/uapi/linux/sunrpc/ |
| 4916 | 4959 | ||
| 4917 | KERNEL VIRTUAL MACHINE (KVM) | 4960 | KERNEL VIRTUAL MACHINE (KVM) |
| 4918 | M: Gleb Natapov <gleb@redhat.com> | 4961 | M: Gleb Natapov <gleb@kernel.org> |
| 4919 | M: Paolo Bonzini <pbonzini@redhat.com> | 4962 | M: Paolo Bonzini <pbonzini@redhat.com> |
| 4920 | L: kvm@vger.kernel.org | 4963 | L: kvm@vger.kernel.org |
| 4921 | W: http://www.linux-kvm.org | 4964 | W: http://www.linux-kvm.org |
| @@ -5098,7 +5141,7 @@ F: drivers/leds/ · 176 unmodified lines | |||
| 5098 | F: include/linux/leds.h | 5141 | F: include/linux/leds.h |
| 5099 | 5142 | ||
| 5100 | LEGACY EEPROM DRIVER | 5143 | LEGACY EEPROM DRIVER |
| 5101 | M: Jean Delvare <khali@linux-fr.org> | 5144 | M: Jean Delvare <jdelvare@suse.de> |
| 5102 | S: Maintained | 5145 | S: Maintained |
| 5103 | F: Documentation/misc-devices/eeprom | 5146 | F: Documentation/misc-devices/eeprom |
| 5104 | F: drivers/misc/eeprom/eeprom.c | 5147 | F: drivers/misc/eeprom/eeprom.c |
| @@ -5246,21 +5289,21 @@ S: Maintained · 141 unmodified lines | |||
| 5246 | F: drivers/hwmon/lm73.c | 5289 | F: drivers/hwmon/lm73.c |
| 5247 | 5290 | ||
| 5248 | LM78 HARDWARE MONITOR DRIVER | 5291 | LM78 HARDWARE MONITOR DRIVER |
| 5249 | M: Jean Delvare <khali@linux-fr.org> | 5292 | M: Jean Delvare <jdelvare@suse.de> |
| 5250 | L: lm-sensors@lm-sensors.org | 5293 | L: lm-sensors@lm-sensors.org |
| 5251 | S: Maintained | 5294 | S: Maintained |
| 5252 | F: Documentation/hwmon/lm78 | 5295 | F: Documentation/hwmon/lm78 |
| 5253 | F: drivers/hwmon/lm78.c | 5296 | F: drivers/hwmon/lm78.c |
| 5254 | 5297 | ||
| 5255 | LM83 HARDWARE MONITOR DRIVER | 5298 | LM83 HARDWARE MONITOR DRIVER |
| 5256 | M: Jean Delvare <khali@linux-fr.org> | 5299 | M: Jean Delvare <jdelvare@suse.de> |
| 5257 | L: lm-sensors@lm-sensors.org | 5300 | L: lm-sensors@lm-sensors.org |
| 5258 | S: Maintained | 5301 | S: Maintained |
| 5259 | F: Documentation/hwmon/lm83 | 5302 | F: Documentation/hwmon/lm83 |
| 5260 | F: drivers/hwmon/lm83.c | 5303 | F: drivers/hwmon/lm83.c |
| 5261 | 5304 | ||
| 5262 | LM90 HARDWARE MONITOR DRIVER | 5305 | LM90 HARDWARE MONITOR DRIVER |
| 5263 | M: Jean Delvare <khali@linux-fr.org> | 5306 | M: Jean Delvare <jdelvare@suse.de> |
| 5264 | L: lm-sensors@lm-sensors.org | 5307 | L: lm-sensors@lm-sensors.org |
| 5265 | S: Maintained | 5308 | S: Maintained |
| 5266 | F: Documentation/hwmon/lm90 | 5309 | F: Documentation/hwmon/lm90 |
| @@ -5285,6 +5328,7 @@ F: drivers/media/usb/dvb-usb-v2/lmedm04* · 18 unmodified lines | |||
| 5285 | LOCKDEP AND LOCKSTAT | 5328 | LOCKDEP AND LOCKSTAT |
| 5286 | M: Peter Zijlstra <peterz@infradead.org> | 5329 | M: Peter Zijlstra <peterz@infradead.org> |
| 5287 | M: Ingo Molnar <mingo@redhat.com> | 5330 | M: Ingo Molnar <mingo@redhat.com> |
| 5331 | L: linux-kernel@vger.kernel.org | ||
| 5288 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core/locking | 5332 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core/locking |
| 5289 | S: Maintained | 5333 | S: Maintained |
| 5290 | F: Documentation/lockdep*.txt | 5334 | F: Documentation/lockdep*.txt |
| @@ -5381,6 +5425,16 @@ W: http://www.tazenda.demon.co.uk/phil/linux-hp · 90 unmodified lines | |||
| 5381 | S: Maintained | 5425 | S: Maintained |
| 5382 | F: arch/m68k/hp300/ | 5426 | F: arch/m68k/hp300/ |
| 5383 | 5427 | ||
| 5428 | M88DS3103 MEDIA DRIVER | ||
| 5429 | M: Antti Palosaari <crope@iki.fi> | ||
| 5430 | L: linux-media@vger.kernel.org | ||
| 5431 | W: http://linuxtv.org/ | ||
| 5432 | W: http://palosaari.fi/linux/ | ||
| 5433 | Q: http://patchwork.linuxtv.org/project/linux-media/list/ | ||
| 5434 | T: git git://linuxtv.org/anttip/media_tree.git | ||
| 5435 | S: Maintained | ||
| 5436 | F: drivers/media/dvb-frontends/m88ds3103* | ||
| 5437 | |||
| 5384 | M88RS2000 MEDIA DRIVER | 5438 | M88RS2000 MEDIA DRIVER |
| 5385 | M: Malcolm Priestley <tvboxspy@gmail.com> | 5439 | M: Malcolm Priestley <tvboxspy@gmail.com> |
| 5386 | L: linux-media@vger.kernel.org | 5440 | L: linux-media@vger.kernel.org |
| @@ -5389,6 +5443,16 @@ Q: http://patchwork.linuxtv.org/project/linux-media/list/ · 2 unmodified lines | |||
| 5389 | S: Maintained | 5443 | S: Maintained |
| 5390 | F: drivers/media/dvb-frontends/m88rs2000* | 5444 | F: drivers/media/dvb-frontends/m88rs2000* |
| 5391 | 5445 | ||
| 5446 | M88TS2022 MEDIA DRIVER | ||
| 5447 | M: Antti Palosaari <crope@iki.fi> | ||
| 5448 | L: linux-media@vger.kernel.org | ||
| 5449 | W: http://linuxtv.org/ | ||
| 5450 | W: http://palosaari.fi/linux/ | ||
| 5451 | Q: http://patchwork.linuxtv.org/project/linux-media/list/ | ||
| 5452 | T: git git://linuxtv.org/anttip/media_tree.git | ||
| 5453 | S: Maintained | ||
| 5454 | F: drivers/media/tuners/m88ts2022* | ||
| 5455 | |||
| 5392 | MA901 MASTERKIT USB FM RADIO DRIVER | 5456 | MA901 MASTERKIT USB FM RADIO DRIVER |
| 5393 | M: Alexey Klimov <klimov.linux@gmail.com> | 5457 | M: Alexey Klimov <klimov.linux@gmail.com> |
| 5394 | L: linux-media@vger.kernel.org | 5458 | L: linux-media@vger.kernel.org |
| @@ -5580,10 +5644,11 @@ F: mm/page_cgroup.c · 185 unmodified lines | |||
| 5580 | 5644 | ||
| 5581 | MEMORY TECHNOLOGY DEVICES (MTD) | 5645 | MEMORY TECHNOLOGY DEVICES (MTD) |
| 5582 | M: David Woodhouse <dwmw2@infradead.org> | 5646 | M: David Woodhouse <dwmw2@infradead.org> |
| 5647 | M: Brian Norris <computersforpeace@gmail.com> | ||
| 5583 | L: linux-mtd@lists.infradead.org | 5648 | L: linux-mtd@lists.infradead.org |
| 5584 | W: http://www.linux-mtd.infradead.org/ | 5649 | W: http://www.linux-mtd.infradead.org/ |
| 5585 | Q: http://patchwork.ozlabs.org/project/linux-mtd/list/ | 5650 | Q: http://patchwork.ozlabs.org/project/linux-mtd/list/ |
| 5586 | T: git git://git.infradead.org/mtd-2.6.git | 5651 | T: git git://git.infradead.org/linux-mtd.git |
| 5587 | S: Maintained | 5652 | S: Maintained |
| 5588 | F: drivers/mtd/ | 5653 | F: drivers/mtd/ |
| 5589 | F: include/linux/mtd/ | 5654 | F: include/linux/mtd/ |
| @@ -5741,7 +5806,7 @@ F: drivers/mfd/ · 151 unmodified lines | |||
| 5741 | F: include/linux/mfd/ | 5806 | F: include/linux/mfd/ |
| 5742 | 5807 | ||
| 5743 | MULTIMEDIA CARD (MMC), SECURE DIGITAL (SD) AND SDIO SUBSYSTEM | 5808 | MULTIMEDIA CARD (MMC), SECURE DIGITAL (SD) AND SDIO SUBSYSTEM |
| 5744 | M: Chris Ball <cjb@laptop.org> | 5809 | M: Chris Ball <chris@printf.net> |
| 5745 | L: linux-mmc@vger.kernel.org | 5810 | L: linux-mmc@vger.kernel.org |
| 5746 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git | 5811 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git |
| 5747 | S: Maintained | 5812 | S: Maintained |
| @@ -6452,7 +6517,7 @@ S: Maintained · 704 unmodified lines | |||
| 6452 | F: drivers/char/pc8736x_gpio.c | 6517 | F: drivers/char/pc8736x_gpio.c |
| 6453 | 6518 | ||
| 6454 | PC87427 HARDWARE MONITORING DRIVER | 6519 | PC87427 HARDWARE MONITORING DRIVER |
| 6455 | M: Jean Delvare <khali@linux-fr.org> | 6520 | M: Jean Delvare <jdelvare@suse.de> |
| 6456 | L: lm-sensors@lm-sensors.org | 6521 | L: lm-sensors@lm-sensors.org |
| 6457 | S: Maintained | 6522 | S: Maintained |
| 6458 | F: Documentation/hwmon/pc87427 | 6523 | F: Documentation/hwmon/pc87427 |
| @@ -6581,6 +6646,7 @@ M: Peter Zijlstra <a.p.zijlstra@chello.nl> · 122 unmodified lines | |||
| 6581 | M: Paul Mackerras <paulus@samba.org> | 6646 | M: Paul Mackerras <paulus@samba.org> |
| 6582 | M: Ingo Molnar <mingo@redhat.com> | 6647 | M: Ingo Molnar <mingo@redhat.com> |
| 6583 | M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> | 6648 | M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> |
| 6649 | L: linux-kernel@vger.kernel.org | ||
| 6584 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core | 6650 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core |
| 6585 | S: Supported | 6651 | S: Supported |
| 6586 | F: kernel/events/* | 6652 | F: kernel/events/* |
| @@ -6704,6 +6770,7 @@ F: drivers/scsi/pm8001/ · 117 unmodified lines | |||
| 6704 | 6770 | ||
| 6705 | POSIX CLOCKS and TIMERS | 6771 | POSIX CLOCKS and TIMERS |
| 6706 | M: Thomas Gleixner <tglx@linutronix.de> | 6772 | M: Thomas Gleixner <tglx@linutronix.de> |
| 6773 | L: linux-kernel@vger.kernel.org | ||
| 6707 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core | 6774 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core |
| 6708 | S: Supported | 6775 | S: Supported |
| 6709 | F: fs/timerfd.c | 6776 | F: fs/timerfd.c |
| @@ -6711,7 +6778,7 @@ F: include/linux/timer* · 1 unmodified line | |||
| 6711 | F: kernel/*timer* | 6778 | F: kernel/*timer* |
| 6712 | 6779 | ||
| 6713 | POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS | 6780 | POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS |
| 6714 | M: Anton Vorontsov <anton@enomsg.org> | 6781 | M: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> |
| 6715 | M: David Woodhouse <dwmw2@infradead.org> | 6782 | M: David Woodhouse <dwmw2@infradead.org> |
| 6716 | T: git git://git.infradead.org/battery-2.6.git | 6783 | T: git git://git.infradead.org/battery-2.6.git |
| 6717 | S: Maintained | 6784 | S: Maintained |
| @@ -6900,6 +6967,12 @@ F: include/sound/pxa2xx-lib.h · 182 unmodified lines | |||
| 6900 | F: sound/arm/pxa* | 6967 | F: sound/arm/pxa* |
| 6901 | F: sound/soc/pxa/ | 6968 | F: sound/soc/pxa/ |
| 6902 | 6969 | ||
| 6970 | PXA3xx NAND FLASH DRIVER | ||
| 6971 | M: Ezequiel Garcia <ezequiel.garcia@free-electrons.com> | ||
| 6972 | L: linux-mtd@lists.infradead.org | ||
| 6973 | S: Maintained | ||
| 6974 | F: drivers/mtd/nand/pxa3xx-nand.c | ||
| 6975 | |||
| 6903 | MMP SUPPORT | 6976 | MMP SUPPORT |
| 6904 | M: Eric Miao <eric.y.miao@gmail.com> | 6977 | M: Eric Miao <eric.y.miao@gmail.com> |
| 6905 | M: Haojian Zhuang <haojian.zhuang@gmail.com> | 6978 | M: Haojian Zhuang <haojian.zhuang@gmail.com> |
| @@ -6930,8 +7003,7 @@ S: Maintained · 24 unmodified lines | |||
| 6930 | F: drivers/scsi/qla1280.[ch] | 7003 | F: drivers/scsi/qla1280.[ch] |
| 6931 | 7004 | ||
| 6932 | QLOGIC QLA2XXX FC-SCSI DRIVER | 7005 | QLOGIC QLA2XXX FC-SCSI DRIVER |
| 6933 | M: Andrew Vasquez <andrew.vasquez@qlogic.com> | 7006 | M: qla2xxx-upstream@qlogic.com |
| 6934 | M: linux-driver@qlogic.com | ||
| 6935 | L: linux-scsi@vger.kernel.org | 7007 | L: linux-scsi@vger.kernel.org |
| 6936 | S: Supported | 7008 | S: Supported |
| 6937 | F: Documentation/scsi/LICENSE.qla2xxx | 7009 | F: Documentation/scsi/LICENSE.qla2xxx |
| @@ -6993,6 +7065,14 @@ T: git git://linuxtv.org/anttip/media_tree.git · 55 unmodified lines | |||
| 6993 | S: Maintained | 7065 | S: Maintained |
| 6994 | F: drivers/media/tuners/qt1010* | 7066 | F: drivers/media/tuners/qt1010* |
| 6995 | 7067 | ||
| 7068 | QUALCOMM ATHEROS ATH9K WIRELESS DRIVER | ||
| 7069 | M: QCA ath9k Development <ath9k-devel@qca.qualcomm.com> | ||
| 7070 | L: linux-wireless@vger.kernel.org | ||
| 7071 | L: ath9k-devel@lists.ath9k.org | ||
| 7072 | W: http://wireless.kernel.org/en/users/Drivers/ath9k | ||
| 7073 | S: Supported | ||
| 7074 | F: drivers/net/wireless/ath/ath9k/ | ||
| 7075 | |||
| 6996 | QUALCOMM ATHEROS ATH10K WIRELESS DRIVER | 7076 | QUALCOMM ATHEROS ATH10K WIRELESS DRIVER |
| 6997 | M: Kalle Valo <kvalo@qca.qualcomm.com> | 7077 | M: Kalle Valo <kvalo@qca.qualcomm.com> |
| 6998 | L: ath10k@lists.infradead.org | 7078 | L: ath10k@lists.infradead.org |
| @@ -7026,7 +7106,7 @@ F: drivers/media/parport/*-qcam* · 27 unmodified lines | |||
| 7026 | RADOS BLOCK DEVICE (RBD) | 7106 | RADOS BLOCK DEVICE (RBD) |
| 7027 | M: Yehuda Sadeh <yehuda@inktank.com> | 7107 | M: Yehuda Sadeh <yehuda@inktank.com> |
| 7028 | M: Sage Weil <sage@inktank.com> | 7108 | M: Sage Weil <sage@inktank.com> |
| 7029 | M: Alex Elder <elder@inktank.com> | 7109 | M: Alex Elder <elder@kernel.org> |
| 7030 | M: ceph-devel@vger.kernel.org | 7110 | M: ceph-devel@vger.kernel.org |
| 7031 | W: http://ceph.com/ | 7111 | W: http://ceph.com/ |
| 7032 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git | 7112 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git |
| @@ -7099,6 +7179,7 @@ F: drivers/net/wireless/ray* · 66 unmodified lines | |||
| 7099 | RCUTORTURE MODULE | 7179 | RCUTORTURE MODULE |
| 7100 | M: Josh Triplett <josh@freedesktop.org> | 7180 | M: Josh Triplett <josh@freedesktop.org> |
| 7101 | M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> | 7181 | M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> |
| 7182 | L: linux-kernel@vger.kernel.org | ||
| 7102 | S: Supported | 7183 | S: Supported |
| 7103 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git | 7184 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git |
| 7104 | F: Documentation/RCU/torture.txt | 7185 | F: Documentation/RCU/torture.txt |
| @@ -7106,6 +7187,7 @@ F: kernel/rcu/torture.c · 1 unmodified line | |||
| 7106 | 7187 | ||
| 7107 | RCUTORTURE TEST FRAMEWORK | 7188 | RCUTORTURE TEST FRAMEWORK |
| 7108 | M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> | 7189 | M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> |
| 7190 | L: linux-kernel@vger.kernel.org | ||
| 7109 | S: Supported | 7191 | S: Supported |
| 7110 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git | 7192 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git |
| 7111 | F: tools/testing/selftests/rcutorture | 7193 | F: tools/testing/selftests/rcutorture |
| @@ -7129,6 +7211,7 @@ F: net/rds/ · 17 unmodified lines | |||
| 7129 | READ-COPY UPDATE (RCU) | 7211 | READ-COPY UPDATE (RCU) |
| 7130 | M: Dipankar Sarma <dipankar@in.ibm.com> | 7212 | M: Dipankar Sarma <dipankar@in.ibm.com> |
| 7131 | M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> | 7213 | M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> |
| 7214 | L: linux-kernel@vger.kernel.org | ||
| 7132 | W: http://www.rdrop.com/users/paulmck/RCU/ | 7215 | W: http://www.rdrop.com/users/paulmck/RCU/ |
| 7133 | S: Supported | 7216 | S: Supported |
| 7134 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git | 7217 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git |
| @@ -7408,6 +7491,19 @@ L: linux-media@vger.kernel.org · 273 unmodified lines | |||
| 7408 | S: Supported | 7491 | S: Supported |
| 7409 | F: drivers/media/i2c/s5c73m3/* | 7492 | F: drivers/media/i2c/s5c73m3/* |
| 7410 | 7493 | ||
| 7494 | SAMSUNG S5K5BAF CAMERA DRIVER | ||
| 7495 | M: Kyungmin Park <kyungmin.park@samsung.com> | ||
| 7496 | M: Andrzej Hajda <a.hajda@samsung.com> | ||
| 7497 | L: linux-media@vger.kernel.org | ||
| 7498 | S: Supported | ||
| 7499 | F: drivers/media/i2c/s5k5baf.c | ||
| 7500 | |||
| 7501 | SAMSUNG SOC CLOCK DRIVERS | ||
| 7502 | M: Tomasz Figa <t.figa@samsung.com> | ||
| 7503 | S: Supported | ||
| 7504 | L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers) | ||
| 7505 | F: drivers/clk/samsung/ | ||
| 7506 | |||
| 7411 | SERIAL DRIVERS | 7507 | SERIAL DRIVERS |
| 7412 | M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 7508 | M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| 7413 | L: linux-serial@vger.kernel.org | 7509 | L: linux-serial@vger.kernel.org |
| @@ -7432,6 +7528,7 @@ F: drivers/mmc/host/dw_mmc* · 18 unmodified lines | |||
| 7432 | TIMEKEEPING, CLOCKSOURCE CORE, NTP | 7528 | TIMEKEEPING, CLOCKSOURCE CORE, NTP |
| 7433 | M: John Stultz <john.stultz@linaro.org> | 7529 | M: John Stultz <john.stultz@linaro.org> |
| 7434 | M: Thomas Gleixner <tglx@linutronix.de> | 7530 | M: Thomas Gleixner <tglx@linutronix.de> |
| 7531 | L: linux-kernel@vger.kernel.org | ||
| 7435 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core | 7532 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core |
| 7436 | S: Supported | 7533 | S: Supported |
| 7437 | F: include/linux/clocksource.h | 7534 | F: include/linux/clocksource.h |
| @@ -7457,6 +7554,7 @@ F: drivers/watchdog/sc1200wdt.c · 19 unmodified lines | |||
| 7457 | SCHEDULER | 7554 | SCHEDULER |
| 7458 | M: Ingo Molnar <mingo@redhat.com> | 7555 | M: Ingo Molnar <mingo@redhat.com> |
| 7459 | M: Peter Zijlstra <peterz@infradead.org> | 7556 | M: Peter Zijlstra <peterz@infradead.org> |
| 7557 | L: linux-kernel@vger.kernel.org | ||
| 7460 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core | 7558 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core |
| 7461 | S: Maintained | 7559 | S: Maintained |
| 7462 | F: kernel/sched/ | 7560 | F: kernel/sched/ |
| @@ -7479,7 +7577,7 @@ S: Maintained · 16 unmodified lines | |||
| 7479 | F: drivers/scsi/sr* | 7577 | F: drivers/scsi/sr* |
| 7480 | 7578 | ||
| 7481 | SCSI RDMA PROTOCOL (SRP) INITIATOR | 7579 | SCSI RDMA PROTOCOL (SRP) INITIATOR |
| 7482 | M: David Dillow <dillowda@ornl.gov> | 7580 | M: Bart Van Assche <bvanassche@acm.org> |
| 7483 | L: linux-rdma@vger.kernel.org | 7581 | L: linux-rdma@vger.kernel.org |
| 7484 | S: Supported | 7582 | S: Supported |
| 7485 | W: http://www.openfabrics.org | 7583 | W: http://www.openfabrics.org |
| @@ -7491,8 +7589,9 @@ F: include/scsi/srp.h · 5 unmodified lines | |||
| 7491 | SCSI SG DRIVER | 7589 | SCSI SG DRIVER |
| 7492 | M: Doug Gilbert <dgilbert@interlog.com> | 7590 | M: Doug Gilbert <dgilbert@interlog.com> |
| 7493 | L: linux-scsi@vger.kernel.org | 7591 | L: linux-scsi@vger.kernel.org |
| 7494 | W: http://www.torque.net/sg | 7592 | W: http://sg.danny.cz/sg |
| 7495 | S: Maintained | 7593 | S: Maintained |
| 7594 | F: Documentation/scsi/scsi-generic.txt | ||
| 7496 | F: drivers/scsi/sg.c | 7595 | F: drivers/scsi/sg.c |
| 7497 | F: include/scsi/sg.h | 7596 | F: include/scsi/sg.h |
| 7498 | 7597 | ||
| @@ -7554,7 +7653,7 @@ S: Maintained · 55 unmodified lines | |||
| 7554 | F: drivers/mmc/host/sdricoh_cs.c | 7653 | F: drivers/mmc/host/sdricoh_cs.c |
| 7555 | 7654 | ||
| 7556 | SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) DRIVER | 7655 | SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) DRIVER |
| 7557 | M: Chris Ball <cjb@laptop.org> | 7656 | M: Chris Ball <chris@printf.net> |
| 7558 | L: linux-mmc@vger.kernel.org | 7657 | L: linux-mmc@vger.kernel.org |
| 7559 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git | 7658 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git |
| 7560 | S: Maintained | 7659 | S: Maintained |
| @@ -7647,7 +7746,7 @@ F: drivers/net/ethernet/emulex/benet/ · 86 unmodified lines | |||
| 7647 | 7746 | ||
| 7648 | SFC NETWORK DRIVER | 7747 | SFC NETWORK DRIVER |
| 7649 | M: Solarflare linux maintainers <linux-net-drivers@solarflare.com> | 7748 | M: Solarflare linux maintainers <linux-net-drivers@solarflare.com> |
| 7650 | M: Ben Hutchings <bhutchings@solarflare.com> | 7749 | M: Shradha Shah <sshah@solarflare.com> |
| 7651 | L: netdev@vger.kernel.org | 7750 | L: netdev@vger.kernel.org |
| 7652 | S: Supported | 7751 | S: Supported |
| 7653 | F: drivers/net/ethernet/sfc/ | 7752 | F: drivers/net/ethernet/sfc/ |
| @@ -7702,7 +7801,7 @@ L: linux-media@vger.kernel.org · 48 unmodified lines | |||
| 7702 | T: git git://linuxtv.org/media_tree.git | 7801 | T: git git://linuxtv.org/media_tree.git |
| 7703 | W: http://linuxtv.org | 7802 | W: http://linuxtv.org |
| 7704 | S: Odd Fixes | 7803 | S: Odd Fixes |
| 7705 | F: drivers/media/radio/si4713-i2c.? | 7804 | F: drivers/media/radio/si4713/si4713.? |
| 7706 | 7805 | ||
| 7707 | SI4713 FM RADIO TRANSMITTER PLATFORM DRIVER | 7806 | SI4713 FM RADIO TRANSMITTER PLATFORM DRIVER |
| 7708 | M: Eduardo Valentin <edubezval@gmail.com> | 7807 | M: Eduardo Valentin <edubezval@gmail.com> |
| @@ -7710,7 +7809,15 @@ L: linux-media@vger.kernel.org · 1 unmodified line | |||
| 7710 | T: git git://linuxtv.org/media_tree.git | 7809 | T: git git://linuxtv.org/media_tree.git |
| 7711 | W: http://linuxtv.org | 7810 | W: http://linuxtv.org |
| 7712 | S: Odd Fixes | 7811 | S: Odd Fixes |
| 7713 | F: drivers/media/radio/radio-si4713.c | 7812 | F: drivers/media/radio/si4713/radio-platform-si4713.c |
| 7813 | |||
| 7814 | SI4713 FM RADIO TRANSMITTER USB DRIVER | ||
| 7815 | M: Hans Verkuil <hverkuil@xs4all.nl> | ||
| 7816 | L: linux-media@vger.kernel.org | ||
| 7817 | T: git git://linuxtv.org/media_tree.git | ||
| 7818 | W: http://linuxtv.org | ||
| 7819 | S: Maintained | ||
| 7820 | F: drivers/media/radio/si4713/radio-usb-si4713.c | ||
| 7714 | 7821 | ||
| 7715 | SIANO DVB DRIVER | 7822 | SIANO DVB DRIVER |
| 7716 | M: Mauro Carvalho Chehab <m.chehab@samsung.com> | 7823 | M: Mauro Carvalho Chehab <m.chehab@samsung.com> |
| @@ -7823,6 +7930,7 @@ F: mm/sl?b.c · 106 unmodified lines | |||
| 7823 | SLEEPABLE READ-COPY UPDATE (SRCU) | 7930 | SLEEPABLE READ-COPY UPDATE (SRCU) |
| 7824 | M: Lai Jiangshan <laijs@cn.fujitsu.com> | 7931 | M: Lai Jiangshan <laijs@cn.fujitsu.com> |
| 7825 | M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> | 7932 | M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> |
| 7933 | L: linux-kernel@vger.kernel.org | ||
| 7826 | W: http://www.rdrop.com/users/paulmck/RCU/ | 7934 | W: http://www.rdrop.com/users/paulmck/RCU/ |
| 7827 | S: Supported | 7935 | S: Supported |
| 7828 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git | 7936 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git |
| @@ -7882,7 +7990,7 @@ F: Documentation/hwmon/sch5627 · 53 unmodified lines | |||
| 7882 | F: drivers/hwmon/sch5627.c | 7990 | F: drivers/hwmon/sch5627.c |
| 7883 | 7991 | ||
| 7884 | SMSC47B397 HARDWARE MONITOR DRIVER | 7992 | SMSC47B397 HARDWARE MONITOR DRIVER |
| 7885 | M: Jean Delvare <khali@linux-fr.org> | 7993 | M: Jean Delvare <jdelvare@suse.de> |
| 7886 | L: lm-sensors@lm-sensors.org | 7994 | L: lm-sensors@lm-sensors.org |
| 7887 | S: Maintained | 7995 | S: Maintained |
| 7888 | F: Documentation/hwmon/smsc47b397 | 7996 | F: Documentation/hwmon/smsc47b397 |
| @@ -8561,6 +8669,14 @@ L: linux-xtensa@linux-xtensa.org · 672 unmodified lines | |||
| 8561 | S: Maintained | 8669 | S: Maintained |
| 8562 | F: arch/xtensa/ | 8670 | F: arch/xtensa/ |
| 8563 | 8671 | ||
| 8672 | THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER | ||
| 8673 | M: Hans Verkuil <hverkuil@xs4all.nl> | ||
| 8674 | L: linux-media@vger.kernel.org | ||
| 8675 | T: git git://linuxtv.org/media_tree.git | ||
| 8676 | W: http://linuxtv.org | ||
| 8677 | S: Maintained | ||
| 8678 | F: drivers/media/radio/radio-raremono.c | ||
| 8679 | |||
| 8564 | THERMAL | 8680 | THERMAL |
| 8565 | M: Zhang Rui <rui.zhang@intel.com> | 8681 | M: Zhang Rui <rui.zhang@intel.com> |
| 8566 | M: Eduardo Valentin <eduardo.valentin@ti.com> | 8682 | M: Eduardo Valentin <eduardo.valentin@ti.com> |
| @@ -8572,6 +8688,7 @@ S: Supported · 5 unmodified lines | |||
| 8572 | F: drivers/thermal/ | 8688 | F: drivers/thermal/ |
| 8573 | F: include/linux/thermal.h | 8689 | F: include/linux/thermal.h |
| 8574 | F: include/linux/cpu_cooling.h | 8690 | F: include/linux/cpu_cooling.h |
| 8691 | F: Documentation/devicetree/bindings/thermal/ | ||
| 8575 | 8692 | ||
| 8576 | THINGM BLINK(1) USB RGB LED DRIVER | 8693 | THINGM BLINK(1) USB RGB LED DRIVER |
| 8577 | M: Vivien Didelot <vivien.didelot@savoirfairelinux.com> | 8694 | M: Vivien Didelot <vivien.didelot@savoirfairelinux.com> |
| @@ -8639,12 +8756,11 @@ S: Maintained · 61 unmodified lines | |||
| 8639 | F: sound/soc/codecs/twl4030* | 8756 | F: sound/soc/codecs/twl4030* |
| 8640 | 8757 | ||
| 8641 | TI WILINK WIRELESS DRIVERS | 8758 | TI WILINK WIRELESS DRIVERS |
| 8642 | M: Luciano Coelho <luca@coelho.fi> | ||
| 8643 | L: linux-wireless@vger.kernel.org | 8759 | L: linux-wireless@vger.kernel.org |
| 8644 | W: http://wireless.kernel.org/en/users/Drivers/wl12xx | 8760 | W: http://wireless.kernel.org/en/users/Drivers/wl12xx |
| 8645 | W: http://wireless.kernel.org/en/users/Drivers/wl1251 | 8761 | W: http://wireless.kernel.org/en/users/Drivers/wl1251 |
| 8646 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/luca/wl12xx.git | 8762 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/luca/wl12xx.git |
| 8647 | S: Maintained | 8763 | S: Orphan |
| 8648 | F: drivers/net/wireless/ti/ | 8764 | F: drivers/net/wireless/ti/ |
| 8649 | F: include/linux/wl12xx.h | 8765 | F: include/linux/wl12xx.h |
| 8650 | 8766 | ||
| @@ -8713,7 +8829,6 @@ F: include/linux/toshiba.h · 62 unmodified lines | |||
| 8713 | F: include/uapi/linux/toshiba.h | 8829 | F: include/uapi/linux/toshiba.h |
| 8714 | 8830 | ||
| 8715 | TMIO MMC DRIVER | 8831 | TMIO MMC DRIVER |
| 8716 | M: Guennadi Liakhovetski <g.liakhovetski@gmx.de> | ||
| 8717 | M: Ian Molton <ian@mnementh.co.uk> | 8832 | M: Ian Molton <ian@mnementh.co.uk> |
| 8718 | L: linux-mmc@vger.kernel.org | 8833 | L: linux-mmc@vger.kernel.org |
| 8719 | S: Maintained | 8834 | S: Maintained |
| @@ -8745,14 +8860,10 @@ S: Odd fixes · 25 unmodified lines | |||
| 8745 | F: drivers/media/usb/tm6000/ | 8860 | F: drivers/media/usb/tm6000/ |
| 8746 | 8861 | ||
| 8747 | TPM DEVICE DRIVER | 8862 | TPM DEVICE DRIVER |
| 8748 | M: Leonidas Da Silva Barbosa <leosilva@linux.vnet.ibm.com> | ||
| 8749 | M: Ashley Lai <ashley@ashleylai.com> | ||
| 8750 | M: Peter Huewe <peterhuewe@gmx.de> | 8863 | M: Peter Huewe <peterhuewe@gmx.de> |
| 8751 | M: Rajiv Andrade <mail@srajiv.net> | 8864 | M: Ashley Lai <ashley@ashleylai.com> |
| 8752 | W: http://tpmdd.sourceforge.net | ||
| 8753 | M: Marcel Selhorst <tpmdd@selhorst.net> | 8865 | M: Marcel Selhorst <tpmdd@selhorst.net> |
| 8754 | M: Sirrix AG <tpmdd@sirrix.com> | 8866 | W: http://tpmdd.sourceforge.net |
| 8755 | W: http://www.sirrix.com | ||
| 8756 | L: tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers) | 8867 | L: tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers) |
| 8757 | S: Maintained | 8868 | S: Maintained |
| 8758 | F: drivers/char/tpm/ | 8869 | F: drivers/char/tpm/ |
| @@ -8904,7 +9015,7 @@ UNSORTED BLOCK IMAGES (UBI) · 145 unmodified lines | |||
| 8904 | M: Artem Bityutskiy <dedekind1@gmail.com> | 9015 | M: Artem Bityutskiy <dedekind1@gmail.com> |
| 8905 | W: http://www.linux-mtd.infradead.org/ | 9016 | W: http://www.linux-mtd.infradead.org/ |
| 8906 | L: linux-mtd@lists.infradead.org | 9017 | L: linux-mtd@lists.infradead.org |
| 8907 | T: git git://git.infradead.org/ubi-2.6.git | 9018 | T: git git://git.infradead.org/ubifs-2.6.git |
| 8908 | S: Maintained | 9019 | S: Maintained |
| 8909 | F: drivers/mtd/ubi/ | 9020 | F: drivers/mtd/ubi/ |
| 8910 | F: include/linux/mtd/ubi.h | 9021 | F: include/linux/mtd/ubi.h |
| @@ -9098,8 +9209,7 @@ L: linux-media@vger.kernel.org · 187 unmodified lines | |||
| 9098 | T: git git://linuxtv.org/media_tree.git | 9209 | T: git git://linuxtv.org/media_tree.git |
| 9099 | W: http://www.linux-projects.org | 9210 | W: http://www.linux-projects.org |
| 9100 | S: Maintained | 9211 | S: Maintained |
| 9101 | F: Documentation/video4linux/sn9c102.txt | 9212 | F: drivers/staging/media/sn9c102/ |
| 9102 | F: drivers/media/usb/sn9c102/ | ||
| 9103 | 9213 | ||
| 9104 | USB SUBSYSTEM | 9214 | USB SUBSYSTEM |
| 9105 | M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 9215 | M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| @@ -9405,7 +9515,7 @@ F: Documentation/hwmon/w83793 · 299 unmodified lines | |||
| 9405 | F: drivers/hwmon/w83793.c | 9515 | F: drivers/hwmon/w83793.c |
| 9406 | 9516 | ||
| 9407 | W83795 HARDWARE MONITORING DRIVER | 9517 | W83795 HARDWARE MONITORING DRIVER |
| 9408 | M: Jean Delvare <khali@linux-fr.org> | 9518 | M: Jean Delvare <jdelvare@suse.de> |
| 9409 | L: lm-sensors@lm-sensors.org | 9519 | L: lm-sensors@lm-sensors.org |
| 9410 | S: Maintained | 9520 | S: Maintained |
| 9411 | F: drivers/hwmon/w83795.c | 9521 | F: drivers/hwmon/w83795.c |
| @@ -9531,6 +9641,7 @@ M: Thomas Gleixner <tglx@linutronix.de> · 119 unmodified lines | |||
| 9531 | M: Ingo Molnar <mingo@redhat.com> | 9641 | M: Ingo Molnar <mingo@redhat.com> |
| 9532 | M: "H. Peter Anvin" <hpa@zytor.com> | 9642 | M: "H. Peter Anvin" <hpa@zytor.com> |
| 9533 | M: x86@kernel.org | 9643 | M: x86@kernel.org |
| 9644 | L: linux-kernel@vger.kernel.org | ||
| 9534 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/core | 9645 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/core |
| 9535 | S: Maintained | 9646 | S: Maintained |
| 9536 | F: Documentation/x86/ | 9647 | F: Documentation/x86/ |
| @@ -9563,6 +9674,7 @@ M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> · 26 unmodified lines | |||
| 9563 | M: Boris Ostrovsky <boris.ostrovsky@oracle.com> | 9674 | M: Boris Ostrovsky <boris.ostrovsky@oracle.com> |
| 9564 | M: David Vrabel <david.vrabel@citrix.com> | 9675 | M: David Vrabel <david.vrabel@citrix.com> |
| 9565 | L: xen-devel@lists.xenproject.org (moderated for non-subscribers) | 9676 | L: xen-devel@lists.xenproject.org (moderated for non-subscribers) |
| 9677 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip.git | ||
| 9566 | S: Supported | 9678 | S: Supported |
| 9567 | F: arch/x86/xen/ | 9679 | F: arch/x86/xen/ |
| 9568 | F: drivers/*/xen-*front.c | 9680 | F: drivers/*/xen-*front.c |
| @@ -9683,11 +9795,27 @@ T: Mercurial http://linuxtv.org/hg/v4l-dvb · 114 unmodified lines | |||
| 9683 | S: Odd Fixes | 9795 | S: Odd Fixes |
| 9684 | F: drivers/media/pci/zoran/ | 9796 | F: drivers/media/pci/zoran/ |
| 9685 | 9797 | ||
| 9798 | ZRAM COMPRESSED RAM BLOCK DEVICE DRVIER | ||
| 9799 | M: Minchan Kim <minchan@kernel.org> | ||
| 9800 | M: Nitin Gupta <ngupta@vflare.org> | ||
| 9801 | L: linux-kernel@vger.kernel.org | ||
| 9802 | S: Maintained | ||
| 9803 | F: drivers/block/zram/ | ||
| 9804 | F: Documentation/blockdev/zram.txt | ||
| 9805 | |||
| 9686 | ZS DECSTATION Z85C30 SERIAL DRIVER | 9806 | ZS DECSTATION Z85C30 SERIAL DRIVER |
| 9687 | M: "Maciej W. Rozycki" <macro@linux-mips.org> | 9807 | M: "Maciej W. Rozycki" <macro@linux-mips.org> |
| 9688 | S: Maintained | 9808 | S: Maintained |
| 9689 | F: drivers/tty/serial/zs.* | 9809 | F: drivers/tty/serial/zs.* |
| 9690 | 9810 | ||
| 9811 | ZSMALLOC COMPRESSED SLAB MEMORY ALLOCATOR | ||
| 9812 | M: Minchan Kim <minchan@kernel.org> | ||
| 9813 | M: Nitin Gupta <ngupta@vflare.org> | ||
| 9814 | L: linux-mm@kvack.org | ||
| 9815 | S: Maintained | ||
| 9816 | F: mm/zsmalloc.c | ||
| 9817 | F: include/linux/zsmalloc.h | ||
| 9818 | |||
| 9691 | ZSWAP COMPRESSED SWAP CACHING | 9819 | ZSWAP COMPRESSED SWAP CACHING |
| 9692 | M: Seth Jennings <sjenning@linux.vnet.ibm.com> | 9820 | M: Seth Jennings <sjenning@linux.vnet.ibm.com> |
| 9693 | L: linux-mm@kvack.org | 9821 | L: linux-mm@kvack.org |
| @@ -311,9 +311,15 @@ endif · 310 unmodified lines | |||
| 311 | # If the user is running make -s (silent mode), suppress echoing of | 311 | # If the user is running make -s (silent mode), suppress echoing of |
| 312 | # commands | 312 | # commands |
| 313 | 313 | ||
| 314 | ifneq ($(filter 4.%,$(MAKE_VERSION)),) # make-4 | ||
| 315 | ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),) | ||
| 316 | quiet=silent_ | ||
| 317 | endif | ||
| 318 | else # make-3.8x | ||
| 314 | ifneq ($(filter s% -s%,$(MAKEFLAGS)),) | 319 | ifneq ($(filter s% -s%,$(MAKEFLAGS)),) |
| 315 | quiet=silent_ | 320 | quiet=silent_ |
| 316 | endif | 321 | endif |
| 322 | endif | ||
| 317 | 323 | ||
| 318 | export quiet Q KBUILD_VERBOSE | 324 | export quiet Q KBUILD_VERBOSE |
| 319 | 325 | ||
| @@ -633,7 +639,7 @@ endif · 313 unmodified lines | |||
| 633 | 639 | ||
| 634 | ifdef CONFIG_DEBUG_INFO | 640 | ifdef CONFIG_DEBUG_INFO |
| 635 | KBUILD_CFLAGS += -g | 641 | KBUILD_CFLAGS += -g |
| 636 | KBUILD_AFLAGS += -gdwarf-2 | 642 | KBUILD_AFLAGS += -Wa,--gdwarf-2 |
| 637 | endif | 643 | endif |
| 638 | 644 | ||
| 639 | ifdef CONFIG_DEBUG_INFO_REDUCED | 645 | ifdef CONFIG_DEBUG_INFO_REDUCED |
| @@ -682,6 +688,9 @@ KBUILD_CFLAGS += $(call cc-option,-Werror=implicit-int) · 42 unmodified lines | |||
| 682 | # require functions to have arguments in prototypes, not empty 'int foo()' | 688 | # require functions to have arguments in prototypes, not empty 'int foo()' |
| 683 | KBUILD_CFLAGS += $(call cc-option,-Werror=strict-prototypes) | 689 | KBUILD_CFLAGS += $(call cc-option,-Werror=strict-prototypes) |
| 684 | 690 | ||
| 691 | # Prohibit date/time macros, which would make the build non-deterministic | ||
| 692 | KBUILD_CFLAGS += $(call cc-option,-Werror=date-time) | ||
| 693 | |||
| 685 | # use the deterministic mode of AR if available | 694 | # use the deterministic mode of AR if available |
| 686 | KBUILD_ARFLAGS := $(call ar-option,D) | 695 | KBUILD_ARFLAGS := $(call ar-option,D) |
| 687 | 696 | ||
| @@ -2,6 +2,7 @@ config ALPHA · 1 unmodified line | |||
| 2 | bool | 2 | bool |
| 3 | default y | 3 | default y |
| 4 | select ARCH_MIGHT_HAVE_PC_PARPORT | 4 | select ARCH_MIGHT_HAVE_PC_PARPORT |
| 5 | select ARCH_MIGHT_HAVE_PC_SERIO | ||
| 5 | select HAVE_AOUT | 6 | select HAVE_AOUT |
| 6 | select HAVE_IDE | 7 | select HAVE_IDE |
| 7 | select HAVE_OPROFILE | 8 | select HAVE_OPROFILE |
| @@ -16,6 +17,7 @@ config ALPHA · 8 unmodified lines | |||
| 16 | select ARCH_WANT_IPC_PARSE_VERSION | 17 | select ARCH_WANT_IPC_PARSE_VERSION |
| 17 | select ARCH_HAVE_NMI_SAFE_CMPXCHG | 18 | select ARCH_HAVE_NMI_SAFE_CMPXCHG |
| 18 | select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE | 19 | select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE |
| 20 | select AUDIT_ARCH | ||
| 19 | select GENERIC_CLOCKEVENTS | 21 | select GENERIC_CLOCKEVENTS |
| 20 | select GENERIC_SMP_IDLE_THREAD | 22 | select GENERIC_SMP_IDLE_THREAD |
| 21 | select GENERIC_STRNCPY_FROM_USER | 23 | select GENERIC_STRNCPY_FROM_USER |
| @@ -76,6 +78,8 @@ config GENERIC_ISA_DMA · 54 unmodified lines | |||
| 76 | source "init/Kconfig" | 78 | source "init/Kconfig" |
| 77 | source "kernel/Kconfig.freezer" | 79 | source "kernel/Kconfig.freezer" |
| 78 | 80 | ||
| 81 | config AUDIT_ARCH | ||
| 82 | bool | ||
| 79 | 83 | ||
| 80 | menu "System setup" | 84 | menu "System setup" |
| 81 | 85 | ||
| @@ -539,13 +543,13 @@ config SMP · 457 unmodified lines | |||
| 539 | depends on ALPHA_SABLE || ALPHA_LYNX || ALPHA_RAWHIDE || ALPHA_DP264 || ALPHA_WILDFIRE || ALPHA_TITAN || ALPHA_GENERIC || ALPHA_SHARK || ALPHA_MARVEL | 543 | depends on ALPHA_SABLE || ALPHA_LYNX || ALPHA_RAWHIDE || ALPHA_DP264 || ALPHA_WILDFIRE || ALPHA_TITAN || ALPHA_GENERIC || ALPHA_SHARK || ALPHA_MARVEL |
| 540 | ---help--- | 544 | ---help--- |
| 541 | This enables support for systems with more than one CPU. If you have | 545 | This enables support for systems with more than one CPU. If you have |
| 542 | a system with only one CPU, like most personal computers, say N. If | 546 | a system with only one CPU, say N. If you have a system with more |
| 543 | you have a system with more than one CPU, say Y. | 547 | than one CPU, say Y. |
| 544 | 548 | ||
| 545 | If you say N here, the kernel will run on single and multiprocessor | 549 | If you say N here, the kernel will run on uni- and multiprocessor |
| 546 | machines, but will use only one CPU of a multiprocessor machine. If | 550 | machines, but will use only one CPU of a multiprocessor machine. If |
| 547 | you say Y here, the kernel will run on many, but not all, | 551 | you say Y here, the kernel will run on many, but not all, |
| 548 | singleprocessor machines. On a singleprocessor machine, the kernel | 552 | uniprocessor machines. On a uniprocessor machine, the kernel |
| 549 | will run faster if you say N here. | 553 | will run faster if you say N here. |
| 550 | 554 | ||
| 551 | See also the SMP-HOWTO available at | 555 | See also the SMP-HOWTO available at |
| @@ -4,3 +4,4 @@ generic-y += clkdev.h · 3 unmodified lines | |||
| 4 | generic-y += exec.h | 4 | generic-y += exec.h |
| 5 | generic-y += trace_clock.h | 5 | generic-y += trace_clock.h |
| 6 | generic-y += preempt.h | 6 | generic-y += preempt.h |
| 7 | generic-y += hash.h | ||
| @@ -19,4 +19,9 @@ · 18 unmodified lines | |||
| 19 | 19 | ||
| 20 | #define force_successful_syscall_return() (current_pt_regs()->r0 = 0) | 20 | #define force_successful_syscall_return() (current_pt_regs()->r0 = 0) |
| 21 | 21 | ||
| 22 | static inline unsigned long regs_return_value(struct pt_regs *regs) | ||
| 23 | { | ||
| 24 | return regs->r0; | ||
| 25 | } | ||
| 26 | |||
| 22 | #endif | 27 | #endif |
| @@ -70,6 +70,7 @@ register struct thread_info *__current_thread_info __asm__("$8"); · 69 unmodified lines | |||
| 70 | #define TIF_NOTIFY_RESUME 1 /* callback before returning to user */ | 70 | #define TIF_NOTIFY_RESUME 1 /* callback before returning to user */ |
| 71 | #define TIF_SIGPENDING 2 /* signal pending */ | 71 | #define TIF_SIGPENDING 2 /* signal pending */ |
| 72 | #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ | 72 | #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ |
| 73 | #define TIF_SYSCALL_AUDIT 4 /* syscall audit active */ | ||
| 73 | #define TIF_DIE_IF_KERNEL 9 /* dik recursion lock */ | 74 | #define TIF_DIE_IF_KERNEL 9 /* dik recursion lock */ |
| 74 | #define TIF_MEMDIE 13 /* is terminating due to OOM killer */ | 75 | #define TIF_MEMDIE 13 /* is terminating due to OOM killer */ |
| 75 | 76 | ||
| @@ -77,6 +78,7 @@ register struct thread_info *__current_thread_info __asm__("$8"); · 1 unmodified line | |||
| 77 | #define _TIF_SIGPENDING (1<<TIF_SIGPENDING) | 78 | #define _TIF_SIGPENDING (1<<TIF_SIGPENDING) |
| 78 | #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) | 79 | #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) |
| 79 | #define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME) | 80 | #define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME) |
| 81 | #define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT) | ||
| 80 | 82 | ||
| 81 | /* Work to do on interrupt/exception return. */ | 83 | /* Work to do on interrupt/exception return. */ |
| 82 | #define _TIF_WORK_MASK (_TIF_SIGPENDING | _TIF_NEED_RESCHED | \ | 84 | #define _TIF_WORK_MASK (_TIF_SIGPENDING | _TIF_NEED_RESCHED | \ |
| @@ -85,4 +85,6 @@ · 84 unmodified lines | |||
| 85 | 85 | ||
| 86 | #define SO_MAX_PACING_RATE 47 | 86 | #define SO_MAX_PACING_RATE 47 |
| 87 | 87 | ||
| 88 | #define SO_BPF_EXTENSIONS 48 | ||
| 89 | |||
| 88 | #endif /* _UAPI_ASM_SOCKET_H */ | 90 | #endif /* _UAPI_ASM_SOCKET_H */ |
| @@ -17,6 +17,7 @@ obj-$(CONFIG_SRM_ENV) += srm_env.o · 16 unmodified lines | |||
| 17 | obj-$(CONFIG_MODULES) += module.o | 17 | obj-$(CONFIG_MODULES) += module.o |
| 18 | obj-$(CONFIG_PERF_EVENTS) += perf_event.o | 18 | obj-$(CONFIG_PERF_EVENTS) += perf_event.o |
| 19 | obj-$(CONFIG_RTC_DRV_ALPHA) += rtc.o | 19 | obj-$(CONFIG_RTC_DRV_ALPHA) += rtc.o |
| 20 | obj-$(CONFIG_AUDIT) += audit.o | ||
| 20 | 21 | ||
| 21 | ifdef CONFIG_ALPHA_GENERIC | 22 | ifdef CONFIG_ALPHA_GENERIC |
| 22 | 23 | ||
| @@ -0,0 +1,60 @@ | |||
| 1 | #include <linux/init.h> | ||
| 2 | #include <linux/types.h> | ||
| 3 | #include <linux/audit.h> | ||
| 4 | #include <asm/unistd.h> | ||
| 5 | |||
| 6 | static unsigned dir_class[] = { | ||
| 7 | #include <asm-generic/audit_dir_write.h> | ||
| 8 | ~0U | ||
| 9 | }; | ||
| 10 | |||
| 11 | static unsigned read_class[] = { | ||
| 12 | #include <asm-generic/audit_read.h> | ||
| 13 | ~0U | ||
| 14 | }; | ||
| 15 | |||
| 16 | static unsigned write_class[] = { | ||
| 17 | #include <asm-generic/audit_write.h> | ||
| 18 | ~0U | ||
| 19 | }; | ||
| 20 | |||
| 21 | static unsigned chattr_class[] = { | ||
| 22 | #include <asm-generic/audit_change_attr.h> | ||
| 23 | ~0U | ||
| 24 | }; | ||
| 25 | |||
| 26 | static unsigned signal_class[] = { | ||
| 27 | #include <asm-generic/audit_signal.h> | ||
| 28 | ~0U | ||
| 29 | }; | ||
| 30 | |||
| 31 | int audit_classify_arch(int arch) | ||
| 32 | { | ||
| 33 | return 0; | ||
| 34 | } | ||
| 35 | |||
| 36 | int audit_classify_syscall(int abi, unsigned syscall) | ||
| 37 | { | ||
| 38 | switch(syscall) { | ||
| 39 | case __NR_open: | ||
| 40 | return 2; | ||
| 41 | case __NR_openat: | ||
| 42 | return 3; | ||
| 43 | case __NR_execve: | ||
| 44 | return 5; | ||
| 45 | default: | ||
| 46 | return 0; | ||
| 47 | } | ||
| 48 | } | ||
| 49 | |||
| 50 | static int __init audit_classes_init(void) | ||
| 51 | { | ||
| 52 | audit_register_class(AUDIT_CLASS_WRITE, write_class); | ||
| 53 | audit_register_class(AUDIT_CLASS_READ, read_class); | ||
| 54 | audit_register_class(AUDIT_CLASS_DIR_WRITE, dir_class); | ||
| 55 | audit_register_class(AUDIT_CLASS_CHATTR, chattr_class); | ||
| 56 | audit_register_class(AUDIT_CLASS_SIGNAL, signal_class); | ||
| 57 | return 0; | ||
| 58 | } | ||
| 59 | |||
| 60 | __initcall(audit_classes_init); | ||
| @@ -465,7 +465,11 @@ entSys: · 464 unmodified lines | |||
| 465 | .cfi_rel_offset $16, SP_OFF+24 | 465 | .cfi_rel_offset $16, SP_OFF+24 |
| 466 | .cfi_rel_offset $17, SP_OFF+32 | 466 | .cfi_rel_offset $17, SP_OFF+32 |
| 467 | .cfi_rel_offset $18, SP_OFF+40 | 467 | .cfi_rel_offset $18, SP_OFF+40 |
| 468 | blbs $3, strace | 468 | #ifdef CONFIG_AUDITSYSCALL |
| 469 | lda $6, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | ||
| 470 | and $3, $6, $3 | ||
| 471 | #endif | ||
| 472 | bne $3, strace | ||
| 469 | beq $4, 1f | 473 | beq $4, 1f |
| 470 | ldq $27, 0($5) | 474 | ldq $27, 0($5) |
| 471 | 1: jsr $26, ($27), alpha_ni_syscall | 475 | 1: jsr $26, ($27), alpha_ni_syscall |
| @@ -83,7 +83,7 @@ static int pci_mmap_resource(struct kobject *kobj, · 82 unmodified lines | |||
| 83 | if (iomem_is_exclusive(res->start)) | 83 | if (iomem_is_exclusive(res->start)) |
| 84 | return -EINVAL; | 84 | return -EINVAL; |
| 85 | 85 | ||
| 86 | pcibios_resource_to_bus(pdev, &bar, res); | 86 | pcibios_resource_to_bus(pdev->bus, &bar, res); |
| 87 | vma->vm_pgoff += bar.start >> (PAGE_SHIFT - (sparse ? 5 : 0)); | 87 | vma->vm_pgoff += bar.start >> (PAGE_SHIFT - (sparse ? 5 : 0)); |
| 88 | mmap_type = res->flags & IORESOURCE_MEM ? pci_mmap_mem : pci_mmap_io; | 88 | mmap_type = res->flags & IORESOURCE_MEM ? pci_mmap_mem : pci_mmap_io; |
| 89 | 89 | ||
| @@ -139,7 +139,7 @@ static int sparse_mem_mmap_fits(struct pci_dev *pdev, int num) · 49 unmodified lines | |||
| 139 | long dense_offset; | 139 | long dense_offset; |
| 140 | unsigned long sparse_size; | 140 | unsigned long sparse_size; |
| 141 | 141 | ||
| 142 | pcibios_resource_to_bus(pdev, &bar, &pdev->resource[num]); | 142 | pcibios_resource_to_bus(pdev->bus, &bar, &pdev->resource[num]); |
| 143 | 143 | ||
| 144 | /* All core logic chips have 4G sparse address space, except | 144 | /* All core logic chips have 4G sparse address space, except |
| 145 | CIA which has 16G (see xxx_SPARSE_MEM and xxx_DENSE_MEM | 145 | CIA which has 16G (see xxx_SPARSE_MEM and xxx_DENSE_MEM |
| @@ -325,7 +325,7 @@ pci_map_single_1(struct pci_dev *pdev, void *cpu_addr, size_t size, · 324 unmodified lines | |||
| 325 | /* Helper for generic DMA-mapping functions. */ | 325 | /* Helper for generic DMA-mapping functions. */ |
| 326 | static struct pci_dev *alpha_gendev_to_pci(struct device *dev) | 326 | static struct pci_dev *alpha_gendev_to_pci(struct device *dev) |
| 327 | { | 327 | { |
| 328 | if (dev && dev->bus == &pci_bus_type) | 328 | if (dev && dev_is_pci(dev)) |
| 329 | return to_pci_dev(dev); | 329 | return to_pci_dev(dev); |
| 330 | 330 | ||
| 331 | /* Assume that non-PCI devices asking for DMA are either ISA or EISA, | 331 | /* Assume that non-PCI devices asking for DMA are either ISA or EISA, |
| @@ -14,6 +14,7 @@ · 13 unmodified lines | |||
| 14 | #include <linux/security.h> | 14 | #include <linux/security.h> |
| 15 | #include <linux/signal.h> | 15 | #include <linux/signal.h> |
| 16 | #include <linux/tracehook.h> | 16 | #include <linux/tracehook.h> |
| 17 | #include <linux/audit.h> | ||
| 17 | 18 | ||
| 18 | #include <asm/uaccess.h> | 19 | #include <asm/uaccess.h> |
| 19 | #include <asm/pgtable.h> | 20 | #include <asm/pgtable.h> |
| @@ -316,15 +317,18 @@ long arch_ptrace(struct task_struct *child, long request, · 296 unmodified lines | |||
| 316 | asmlinkage unsigned long syscall_trace_enter(void) | 317 | asmlinkage unsigned long syscall_trace_enter(void) |
| 317 | { | 318 | { |
| 318 | unsigned long ret = 0; | 319 | unsigned long ret = 0; |
| 320 | struct pt_regs *regs = current_pt_regs(); | ||
| 319 | if (test_thread_flag(TIF_SYSCALL_TRACE) && | 321 | if (test_thread_flag(TIF_SYSCALL_TRACE) && |
| 320 | tracehook_report_syscall_entry(current_pt_regs())) | 322 | tracehook_report_syscall_entry(current_pt_regs())) |
| 321 | ret = -1UL; | 323 | ret = -1UL; |
| 324 | audit_syscall_entry(AUDIT_ARCH_ALPHA, regs->r0, regs->r16, regs->r17, regs->r18, regs->r19); | ||
| 322 | return ret ?: current_pt_regs()->r0; | 325 | return ret ?: current_pt_regs()->r0; |
| 323 | } | 326 | } |
| 324 | 327 | ||
| 325 | asmlinkage void | 328 | asmlinkage void |
| 326 | syscall_trace_leave(void) | 329 | syscall_trace_leave(void) |
| 327 | { | 330 | { |
| 331 | audit_syscall_exit(current_pt_regs()); | ||
| 328 | if (test_thread_flag(TIF_SYSCALL_TRACE)) | 332 | if (test_thread_flag(TIF_SYSCALL_TRACE)) |
| 329 | tracehook_report_syscall_exit(current_pt_regs(), 0); | 333 | tracehook_report_syscall_exit(current_pt_regs(), 0); |
| 330 | } | 334 | } |
| @@ -378,6 +378,11 @@ csum_partial_copy_from_user(const void __user *src, void *dst, int len, · 377 unmodified lines | |||
| 378 | __wsum | 378 | __wsum |
| 379 | csum_partial_copy_nocheck(const void *src, void *dst, int len, __wsum sum) | 379 | csum_partial_copy_nocheck(const void *src, void *dst, int len, __wsum sum) |
| 380 | { | 380 | { |
| 381 | return csum_partial_copy_from_user((__force const void __user *)src, | 381 | __wsum checksum; |
| 382 | dst, len, sum, NULL); | 382 | mm_segment_t oldfs = get_fs(); |
| 383 | set_fs(KERNEL_DS); | ||
| 384 | checksum = csum_partial_copy_from_user((__force const void __user *)src, | ||
| 385 | dst, len, sum, NULL); | ||
| 386 | set_fs(oldfs); | ||
| 387 | return checksum; | ||
| 383 | } | 388 | } |
| @@ -128,8 +128,8 @@ config SMP · 127 unmodified lines | |||
| 128 | default n | 128 | default n |
| 129 | help | 129 | help |
| 130 | This enables support for systems with more than one CPU. If you have | 130 | This enables support for systems with more than one CPU. If you have |
| 131 | a system with only one CPU, like most personal computers, say N. If | 131 | a system with only one CPU, say N. If you have a system with more |
| 132 | you have a system with more than one CPU, say Y. | 132 | than one CPU, say Y. |
| 133 | 133 | ||
| 134 | if SMP | 134 | if SMP |
| 135 | 135 | ||
| @@ -409,17 +409,6 @@ config ARC_DBG_TLB_MISS_COUNT · 273 unmodified lines | |||
| 409 | Counts number of I and D TLB Misses and exports them via Debugfs | 409 | Counts number of I and D TLB Misses and exports them via Debugfs |
| 410 | The counters can be cleared via Debugfs as well | 410 | The counters can be cleared via Debugfs as well |
| 411 | 411 | ||
| 412 | config CMDLINE_UBOOT | ||
| 413 | bool "Support U-boot kernel command line passing" | ||
| 414 | default n | ||
| 415 | help | ||
| 416 | If you are using U-boot (www.denx.de) and wish to pass the kernel | ||
| 417 | command line from the U-boot environment to the Linux kernel then | ||
| 418 | switch this option on. | ||
| 419 | ARC U-boot will setup the cmdline in RAM/flash and set r2 to point | ||
| 420 | to it. kernel startup code will append this to DeviceTree | ||
| 421 | /bootargs provided cmdline args. | ||
| 422 | |||
| 423 | config ARC_BUILTIN_DTB_NAME | 412 | config ARC_BUILTIN_DTB_NAME |
| 424 | string "Built in DTB" | 413 | string "Built in DTB" |
| 425 | help | 414 | help |
| @@ -12,6 +12,7 @@ generic-y += fcntl.h · 11 unmodified lines | |||
| 12 | generic-y += fb.h | 12 | generic-y += fb.h |
| 13 | generic-y += ftrace.h | 13 | generic-y += ftrace.h |
| 14 | generic-y += hardirq.h | 14 | generic-y += hardirq.h |
| 15 | generic-y += hash.h | ||
| 15 | generic-y += hw_irq.h | 16 | generic-y += hw_irq.h |
| 16 | generic-y += ioctl.h | 17 | generic-y += ioctl.h |
| 17 | generic-y += ioctls.h | 18 | generic-y += ioctls.h |
| @@ -11,6 +11,8 @@ · 10 unmodified lines | |||
| 11 | 11 | ||
| 12 | #ifdef __ASSEMBLY__ | 12 | #ifdef __ASSEMBLY__ |
| 13 | 13 | ||
| 14 | #define ASM_NL ` /* use '`' to mark new line in macro */ | ||
| 15 | |||
| 14 | /* Can't use the ENTRY macro in linux/linkage.h | 16 | /* Can't use the ENTRY macro in linux/linkage.h |
| 15 | * gas considers ';' as comment vs. newline | 17 | * gas considers ';' as comment vs. newline |
| 16 | */ | 18 | */ |
| @@ -46,14 +46,14 @@ extern int smp_ipi_irq_setup(int cpu, int irq); · 45 unmodified lines | |||
| 46 | * | 46 | * |
| 47 | * @info: SoC SMP specific info for /proc/cpuinfo etc | 47 | * @info: SoC SMP specific info for /proc/cpuinfo etc |
| 48 | * @cpu_kick: For Master to kickstart a cpu (optionally at a PC) | 48 | * @cpu_kick: For Master to kickstart a cpu (optionally at a PC) |
| 49 | * @ipi_send: To send IPI to a @cpumask | 49 | * @ipi_send: To send IPI to a @cpu |
| 50 | * @ips_clear: To clear IPI received by @cpu at @irq | 50 | * @ips_clear: To clear IPI received at @irq |
| 51 | */ | 51 | */ |
| 52 | struct plat_smp_ops { | 52 | struct plat_smp_ops { |
| 53 | const char *info; | 53 | const char *info; |
| 54 | void (*cpu_kick)(int cpu, unsigned long pc); | 54 | void (*cpu_kick)(int cpu, unsigned long pc); |
| 55 | void (*ipi_send)(void *callmap); | 55 | void (*ipi_send)(int cpu); |
| 56 | void (*ipi_clear)(int cpu, int irq); | 56 | void (*ipi_clear)(int irq); |
| 57 | }; | 57 | }; |
| 58 | 58 | ||
| 59 | /* TBD: stop exporting it for direct population by platform */ | 59 | /* TBD: stop exporting it for direct population by platform */ |
| @@ -49,25 +49,13 @@ stext: · 48 unmodified lines | |||
| 49 | st.ab 0, [r5,4] | 49 | st.ab 0, [r5,4] |
| 50 | brlt r5, r6, 1b | 50 | brlt r5, r6, 1b |
| 51 | 51 | ||
| 52 | #ifdef CONFIG_CMDLINE_UBOOT | 52 | ; Uboot - kernel ABI |
| 53 | ; support for bootloader provided cmdline | 53 | ; r0 = [0] No uboot interaction, [1] cmdline in r2, [2] DTB in r2 |
| 54 | ; If cmdline passed by u-boot, then | 54 | ; r1 = magic number (board identity, unused as of now |
| 55 | ; r0 = 1 (because ATAGS parsing, now retired, used to use 0) | 55 | ; r2 = pointer to uboot provided cmdline or external DTB in mem |
| 56 | ; r1 = magic number (board identity) | 56 | ; These are handled later in setup_arch() |
| 57 | ; r2 = addr of cmdline string (somewhere in memory/flash) | 57 | st r0, [@uboot_tag] |
| 58 | 58 | st r2, [@uboot_arg] | |
| 59 | brne r0, 1, .Lother_bootup_chores ; u-boot didn't pass cmdline | ||
| 60 | breq r2, 0, .Lother_bootup_chores ; or cmdline is NULL | ||
| 61 | |||
| 62 | mov r5, @command_line | ||
| 63 | 1: | ||
| 64 | ldb.ab r6, [r2, 1] | ||
| 65 | breq r6, 0, .Lother_bootup_chores | ||
| 66 | b.d 1b | ||
| 67 | stb.ab r6, [r5, 1] | ||
| 68 | #endif | ||
| 69 | |||
| 70 | .Lother_bootup_chores: | ||
| 71 | 59 | ||
| 72 | ; Identify if running on ISS vs Silicon | 60 | ; Identify if running on ISS vs Silicon |
| 73 | ; IDENTITY Reg [ 3 2 1 0 ] | 61 | ; IDENTITY Reg [ 3 2 1 0 ] |
| @@ -29,7 +29,10 @@ · 28 unmodified lines | |||
| 29 | 29 | ||
| 30 | int running_on_hw = 1; /* vs. on ISS */ | 30 | int running_on_hw = 1; /* vs. on ISS */ |
| 31 | 31 | ||
| 32 | char __initdata command_line[COMMAND_LINE_SIZE]; | 32 | /* Part of U-boot ABI: see head.S */ |
| 33 | int __initdata uboot_tag; | ||
| 34 | char __initdata *uboot_arg; | ||
| 35 | |||
| 33 | const struct machine_desc *machine_desc; | 36 | const struct machine_desc *machine_desc; |
| 34 | 37 | ||
| 35 | struct task_struct *_current_task[NR_CPUS]; /* For stack switching */ | 38 | struct task_struct *_current_task[NR_CPUS]; /* For stack switching */ |
| @@ -311,19 +314,40 @@ void setup_processor(void) · 275 unmodified lines | |||
| 311 | arc_chk_fpu(); | 314 | arc_chk_fpu(); |
| 312 | } | 315 | } |
| 313 | 316 | ||
| 317 | static inline int is_kernel(unsigned long addr) | ||
| 318 | { | ||
| 319 | if (addr >= (unsigned long)_stext && addr <= (unsigned long)_end) | ||
| 320 | return 1; | ||
| 321 | return 0; | ||
| 322 | } | ||
| 323 | |||
| 314 | void __init setup_arch(char **cmdline_p) | 324 | void __init setup_arch(char **cmdline_p) |
| 315 | { | 325 | { |
| 316 | /* This also populates @boot_command_line from /bootargs */ | 326 | /* make sure that uboot passed pointer to cmdline/dtb is valid */ |
| 317 | machine_desc = setup_machine_fdt(__dtb_start); | 327 | if (uboot_tag && is_kernel((unsigned long)uboot_arg)) |
| 318 | if (!machine_desc) | 328 | panic("Invalid uboot arg\n"); |
| 319 | panic("Embedded DT invalid\n"); | 329 | |
| 320 | 330 | /* See if u-boot passed an external Device Tree blob */ | |
| 321 | /* Append any u-boot provided cmdline */ | 331 | machine_desc = setup_machine_fdt(uboot_arg); /* uboot_tag == 2 */ |
| 322 | #ifdef CONFIG_CMDLINE_UBOOT | 332 | if (!machine_desc) { |
| 323 | /* Add a whitespace seperator between the 2 cmdlines */ | 333 | /* No, so try the embedded one */ |
| 324 | strlcat(boot_command_line, " ", COMMAND_LINE_SIZE); | 334 | machine_desc = setup_machine_fdt(__dtb_start); |
| 325 | strlcat(boot_command_line, command_line, COMMAND_LINE_SIZE); | 335 | if (!machine_desc) |
| 326 | #endif | 336 | panic("Embedded DT invalid\n"); |
| 337 | |||
| 338 | /* | ||
| 339 | * If we are here, it is established that @uboot_arg didn't | ||
| 340 | * point to DT blob. Instead if u-boot says it is cmdline, | ||
| 341 | * Appent to embedded DT cmdline. | ||
| 342 | * setup_machine_fdt() would have populated @boot_command_line | ||
| 343 | */ | ||
| 344 | if (uboot_tag == 1) { | ||
| 345 | /* Ensure a whitespace between the 2 cmdlines */ | ||
| 346 | strlcat(boot_command_line, " ", COMMAND_LINE_SIZE); | ||
| 347 | strlcat(boot_command_line, uboot_arg, | ||
| 348 | COMMAND_LINE_SIZE); | ||
| 349 | } | ||
| 350 | } | ||
| 327 | 351 | ||
| 328 | /* Save unparsed command line copy for /proc/cmdline */ | 352 | /* Save unparsed command line copy for /proc/cmdline */ |
| 329 | *cmdline_p = boot_command_line; | 353 | *cmdline_p = boot_command_line; |
| @@ -197,51 +197,65 @@ int __init setup_profiling_timer(unsigned int multiplier) · 196 unmodified lines | |||
| 197 | /* Inter Processor Interrupt Handling */ | 197 | /* Inter Processor Interrupt Handling */ |
| 198 | /*****************************************************************************/ | 198 | /*****************************************************************************/ |
| 199 | 199 | ||
| 200 | /* | ||
| 201 | * structures for inter-processor calls | ||
| 202 | * A Collection of single bit ipi messages | ||
| 203 | * | ||
| 204 | */ | ||
| 205 | |||
| 206 | /* | ||
| 207 | * TODO_rajesh investigate tlb message types. | ||
| 208 | * IPI Timer not needed because each ARC has an individual Interrupting Timer | ||
| 209 | */ | ||
| 210 | enum ipi_msg_type { | 200 | enum ipi_msg_type { |
| 211 | IPI_NOP = 0, | 201 | IPI_EMPTY = 0, |
| 212 | IPI_RESCHEDULE = 1, | 202 | IPI_RESCHEDULE = 1, |
| 213 | IPI_CALL_FUNC, | 203 | IPI_CALL_FUNC, |
| 214 | IPI_CPU_STOP | 204 | IPI_CPU_STOP, |
| 215 | }; | 205 | }; |
| 216 | 206 | ||
| 217 | struct ipi_data { | 207 | /* |
| 218 | unsigned long bits; | 208 | * In arches with IRQ for each msg type (above), receiver can use IRQ-id to |
| 219 | }; | 209 | * figure out what msg was sent. For those which don't (ARC has dedicated IPI |
| 210 | * IRQ), the msg-type needs to be conveyed via per-cpu data | ||
| 211 | */ | ||
| 220 | 212 | ||
| 221 | static DEFINE_PER_CPU(struct ipi_data, ipi_data); | 213 | static DEFINE_PER_CPU(unsigned long, ipi_data); |
| 222 | 214 | ||
| 223 | static void ipi_send_msg(const struct cpumask *callmap, enum ipi_msg_type msg) | 215 | static void ipi_send_msg_one(int cpu, enum ipi_msg_type msg) |
| 224 | { | 216 | { |
| 217 | unsigned long __percpu *ipi_data_ptr = per_cpu_ptr(&ipi_data, cpu); | ||
| 218 | unsigned long old, new; | ||
| 225 | unsigned long flags; | 219 | unsigned long flags; |
| 226 | unsigned int cpu; | 220 | |
| 221 | pr_debug("%d Sending msg [%d] to %d\n", smp_processor_id(), msg, cpu); | ||
| 227 | 222 | ||
| 228 | local_irq_save(flags); | 223 | local_irq_save(flags); |
| 229 | 224 | ||
| 230 | for_each_cpu(cpu, callmap) { | 225 | /* |
| 231 | struct ipi_data *ipi = &per_cpu(ipi_data, cpu); | 226 | * Atomically write new msg bit (in case others are writing too), |
| 232 | set_bit(msg, &ipi->bits); | 227 | * and read back old value |
| 233 | } | 228 | */ |
| 229 | do { | ||
| 230 | new = old = *ipi_data_ptr; | ||
| 231 | new |= 1U << msg; | ||
| 232 | } while (cmpxchg(ipi_data_ptr, old, new) != old); | ||
| 234 | 233 | ||
| 235 | /* Call the platform specific cross-CPU call function */ | 234 | /* |
| 236 | if (plat_smp_ops.ipi_send) | 235 | * Call the platform specific IPI kick function, but avoid if possible: |
| 237 | plat_smp_ops.ipi_send((void *)callmap); | 236 | * Only do so if there's no pending msg from other concurrent sender(s). |
| 237 | * Otherwise, recevier will see this msg as well when it takes the | ||
| 238 | * IPI corresponding to that msg. This is true, even if it is already in | ||
| 239 | * IPI handler, because !@old means it has not yet dequeued the msg(s) | ||
| 240 | * so @new msg can be a free-loader | ||
| 241 | */ | ||
| 242 | if (plat_smp_ops.ipi_send && !old) | ||
| 243 | plat_smp_ops.ipi_send(cpu); | ||
| 238 | 244 | ||
| 239 | local_irq_restore(flags); | 245 | local_irq_restore(flags); |
| 240 | } | 246 | } |
| 241 | 247 | ||
| 248 | static void ipi_send_msg(const struct cpumask *callmap, enum ipi_msg_type msg) | ||
| 249 | { | ||
| 250 | unsigned int cpu; | ||
| 251 | |||
| 252 | for_each_cpu(cpu, callmap) | ||
| 253 | ipi_send_msg_one(cpu, msg); | ||
| 254 | } | ||
| 255 | |||
| 242 | void smp_send_reschedule(int cpu) | 256 | void smp_send_reschedule(int cpu) |
| 243 | { | 257 | { |
| 244 | ipi_send_msg(cpumask_of(cpu), IPI_RESCHEDULE); | 258 | ipi_send_msg_one(cpu, IPI_RESCHEDULE); |
| 245 | } | 259 | } |
| 246 | 260 | ||
| 247 | void smp_send_stop(void) | 261 | void smp_send_stop(void) |
| @@ -254,7 +268,7 @@ void smp_send_stop(void) · 6 unmodified lines | |||
| 254 | 268 | ||
| 255 | void arch_send_call_function_single_ipi(int cpu) | 269 | void arch_send_call_function_single_ipi(int cpu) |
| 256 | { | 270 | { |
| 257 | ipi_send_msg(cpumask_of(cpu), IPI_CALL_FUNC); | 271 | ipi_send_msg_one(cpu, IPI_CALL_FUNC); |
| 258 | } | 272 | } |
| 259 | 273 | ||
| 260 | void arch_send_call_function_ipi_mask(const struct cpumask *mask) | 274 | void arch_send_call_function_ipi_mask(const struct cpumask *mask) |
| @@ -265,33 +279,29 @@ void arch_send_call_function_ipi_mask(const struct cpumask *mask) · 4 unmodified lines | |||
| 265 | /* | 279 | /* |
| 266 | * ipi_cpu_stop - handle IPI from smp_send_stop() | 280 | * ipi_cpu_stop - handle IPI from smp_send_stop() |
| 267 | */ | 281 | */ |
| 268 | static void ipi_cpu_stop(unsigned int cpu) | 282 | static void ipi_cpu_stop(void) |
| 269 | { | 283 | { |
| 270 | machine_halt(); | 284 | machine_halt(); |
| 271 | } | 285 | } |
| 272 | 286 | ||
| 273 | static inline void __do_IPI(unsigned long *ops, struct ipi_data *ipi, int cpu) | 287 | static inline void __do_IPI(unsigned long msg) |
| 274 | { | 288 | { |
| 275 | unsigned long msg = 0; | 289 | switch (msg) { |
| 290 | case IPI_RESCHEDULE: | ||
| 291 | scheduler_ipi(); | ||
| 292 | break; | ||
| 276 | 293 | ||
| 277 | do { | 294 | case IPI_CALL_FUNC: |
| 278 | msg = find_next_bit(ops, BITS_PER_LONG, msg+1); | 295 | generic_smp_call_function_interrupt(); |
| 296 | break; | ||
| 279 | 297 | ||
| 280 | switch (msg) { | 298 | case IPI_CPU_STOP: |
| 281 | case IPI_RESCHEDULE: | 299 | ipi_cpu_stop(); |
| 282 | scheduler_ipi(); | 300 | break; |
| 283 | break; | ||
| 284 | |||
| 285 | case IPI_CALL_FUNC: | ||
| 286 | generic_smp_call_function_interrupt(); | ||
| 287 | break; | ||
| 288 | |||
| 289 | case IPI_CPU_STOP: | ||
| 290 | ipi_cpu_stop(cpu); | ||
| 291 | break; | ||
| 292 | } | ||
| 293 | } while (msg < BITS_PER_LONG); | ||
| 294 | 301 | ||
| 302 | default: | ||
| 303 | pr_warn("IPI with unexpected msg %ld\n", msg); | ||
| 304 | } | ||
| 295 | } | 305 | } |
| 296 | 306 | ||
| 297 | /* | 307 | /* |
| @@ -300,19 +310,25 @@ static inline void __do_IPI(unsigned long *ops, struct ipi_data *ipi, int cpu) · 2 unmodified lines | |||
| 300 | */ | 310 | */ |
| 301 | irqreturn_t do_IPI(int irq, void *dev_id) | 311 | irqreturn_t do_IPI(int irq, void *dev_id) |
| 302 | { | 312 | { |
| 303 | int cpu = smp_processor_id(); | 313 | unsigned long pending; |
| 304 | struct ipi_data *ipi = &per_cpu(ipi_data, cpu); | 314 | |
| 305 | unsigned long ops; | 315 | pr_debug("IPI [%ld] received on cpu %d\n", |
| 316 | *this_cpu_ptr(&ipi_data), smp_processor_id()); | ||
| 306 | 317 | ||
| 307 | if (plat_smp_ops.ipi_clear) | 318 | if (plat_smp_ops.ipi_clear) |
| 308 | plat_smp_ops.ipi_clear(cpu, irq); | 319 | plat_smp_ops.ipi_clear(irq); |
| 309 | 320 | ||
| 310 | /* | 321 | /* |
| 311 | * XXX: is this loop really needed | 322 | * "dequeue" the msg corresponding to this IPI (and possibly other |
| 312 | * And do we need to move ipi_clean inside | 323 | * piggybacked msg from elided IPIs: see ipi_send_msg_one() above) |
| 313 | */ | 324 | */ |
| 314 | while ((ops = xchg(&ipi->bits, 0)) != 0) | 325 | pending = xchg(this_cpu_ptr(&ipi_data), 0); |
| 315 | __do_IPI(&ops, ipi, cpu); | 326 | |
| 327 | do { | ||
| 328 | unsigned long msg = __ffs(pending); | ||
| 329 | __do_IPI(msg); | ||
| 330 | pending &= ~(1U << msg); | ||
| 331 | } while (pending); | ||
| 316 | 332 | ||
| 317 | return IRQ_HANDLED; | 333 | return IRQ_HANDLED; |
| 318 | } | 334 | } |
| @@ -88,18 +88,14 @@ void iss_model_init_smp(unsigned int cpu) · 87 unmodified lines | |||
| 88 | smp_ipi_irq_setup(cpu, IDU_INTERRUPT_0 + cpu); | 88 | smp_ipi_irq_setup(cpu, IDU_INTERRUPT_0 + cpu); |
| 89 | } | 89 | } |
| 90 | 90 | ||
| 91 | static void iss_model_ipi_send(void *arg) | 91 | static void iss_model_ipi_send(int cpu) |
| 92 | { | 92 | { |
| 93 | struct cpumask *callmap = arg; | 93 | idu_irq_assert(cpu); |
| 94 | unsigned int cpu; | ||
| 95 | |||
| 96 | for_each_cpu(cpu, callmap) | ||
| 97 | idu_irq_assert(cpu); | ||
| 98 | } | 94 | } |
| 99 | 95 | ||
| 100 | static void iss_model_ipi_clear(int cpu, int irq) | 96 | static void iss_model_ipi_clear(int irq) |
| 101 | { | 97 | { |
| 102 | idu_irq_clear(IDU_INTERRUPT_0 + cpu); | 98 | idu_irq_clear(IDU_INTERRUPT_0 + smp_processor_id()); |
| 103 | } | 99 | } |
| 104 | 100 | ||
| 105 | void iss_model_init_early_smp(void) | 101 | void iss_model_init_early_smp(void) |
| @@ -6,12 +6,13 @@ config ARM · 5 unmodified lines | |||
| 6 | select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST | 6 | select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST |
| 7 | select ARCH_HAVE_CUSTOM_GPIO_H | 7 | select ARCH_HAVE_CUSTOM_GPIO_H |
| 8 | select ARCH_MIGHT_HAVE_PC_PARPORT | 8 | select ARCH_MIGHT_HAVE_PC_PARPORT |
| 9 | select ARCH_USE_BUILTIN_BSWAP | ||
| 9 | select ARCH_USE_CMPXCHG_LOCKREF | 10 | select ARCH_USE_CMPXCHG_LOCKREF |
| 10 | select ARCH_WANT_IPC_PARSE_VERSION | 11 | select ARCH_WANT_IPC_PARSE_VERSION |
| 11 | select BUILDTIME_EXTABLE_SORT if MMU | 12 | select BUILDTIME_EXTABLE_SORT if MMU |
| 12 | select CLONE_BACKWARDS | 13 | select CLONE_BACKWARDS |
| 13 | select CPU_PM if (SUSPEND || CPU_IDLE) | 14 | select CPU_PM if (SUSPEND || CPU_IDLE) |
| 14 | select DCACHE_WORD_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && !CPU_BIG_ENDIAN && MMU | 15 | select DCACHE_WORD_ACCESS if HAVE_EFFICIENT_UNALIGNED_ACCESS |
| 15 | select GENERIC_ATOMIC64 if (CPU_V7M || CPU_V6 || !CPU_32v6K || !AEABI) | 16 | select GENERIC_ATOMIC64 if (CPU_V7M || CPU_V6 || !CPU_32v6K || !AEABI) |
| 16 | select GENERIC_CLOCKEVENTS_BROADCAST if SMP | 17 | select GENERIC_CLOCKEVENTS_BROADCAST if SMP |
| 17 | select GENERIC_IDLE_POLL_SETUP | 18 | select GENERIC_IDLE_POLL_SETUP |
| @@ -36,6 +37,7 @@ config ARM · 18 unmodified lines | |||
| 36 | select HAVE_DMA_ATTRS | 37 | select HAVE_DMA_ATTRS |
| 37 | select HAVE_DMA_CONTIGUOUS if MMU | 38 | select HAVE_DMA_CONTIGUOUS if MMU |
| 38 | select HAVE_DYNAMIC_FTRACE if (!XIP_KERNEL) | 39 | select HAVE_DYNAMIC_FTRACE if (!XIP_KERNEL) |
| 40 | select HAVE_EFFICIENT_UNALIGNED_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && MMU | ||
| 39 | select HAVE_FTRACE_MCOUNT_RECORD if (!XIP_KERNEL) | 41 | select HAVE_FTRACE_MCOUNT_RECORD if (!XIP_KERNEL) |
| 40 | select HAVE_FUNCTION_GRAPH_TRACER if (!THUMB2_KERNEL) | 42 | select HAVE_FUNCTION_GRAPH_TRACER if (!THUMB2_KERNEL) |
| 41 | select HAVE_FUNCTION_TRACER if (!XIP_KERNEL) | 43 | select HAVE_FUNCTION_TRACER if (!XIP_KERNEL) |
| @@ -63,6 +65,7 @@ config ARM · 21 unmodified lines | |||
| 63 | select IRQ_FORCED_THREADING | 65 | select IRQ_FORCED_THREADING |
| 64 | select KTIME_SCALAR | 66 | select KTIME_SCALAR |
| 65 | select MODULES_USE_ELF_REL | 67 | select MODULES_USE_ELF_REL |
| 68 | select NO_BOOTMEM | ||
| 66 | select OLD_SIGACTION | 69 | select OLD_SIGACTION |
| 67 | select OLD_SIGSUSPEND3 | 70 | select OLD_SIGSUSPEND3 |
| 68 | select PERF_USE_VMALLOC | 71 | select PERF_USE_VMALLOC |
| @@ -314,6 +317,8 @@ config ARCH_INTEGRATOR · 245 unmodified lines | |||
| 314 | bool "ARM Ltd. Integrator family" | 317 | bool "ARM Ltd. Integrator family" |
| 315 | select ARCH_HAS_CPUFREQ | 318 | select ARCH_HAS_CPUFREQ |
| 316 | select ARM_AMBA | 319 | select ARM_AMBA |
| 320 | select ARM_PATCH_PHYS_VIRT | ||
| 321 | select AUTO_ZRELADDR | ||
| 317 | select COMMON_CLK | 322 | select COMMON_CLK |
| 318 | select COMMON_CLK_VERSATILE | 323 | select COMMON_CLK_VERSATILE |
| 319 | select GENERIC_CLOCKEVENTS | 324 | select GENERIC_CLOCKEVENTS |
| @@ -411,6 +416,26 @@ config ARCH_EBSA110 · 91 unmodified lines | |||
| 411 | Ethernet interface, two PCMCIA sockets, two serial ports and a | 416 | Ethernet interface, two PCMCIA sockets, two serial ports and a |
| 412 | parallel port. | 417 | parallel port. |
| 413 | 418 | ||
| 419 | config ARCH_EFM32 | ||
| 420 | bool "Energy Micro efm32" | ||
| 421 | depends on !MMU | ||
| 422 | select ARCH_REQUIRE_GPIOLIB | ||
| 423 | select ARM_NVIC | ||
| 424 | # CLKSRC_MMIO is wrong here, but needed until a proper fix is merged, | ||
| 425 | # i.e. CLKSRC_EFM32 selecting CLKSRC_MMIO | ||
| 426 | select CLKSRC_MMIO | ||
| 427 | select CLKSRC_OF | ||
| 428 | select COMMON_CLK | ||
| 429 | select CPU_V7M | ||
| 430 | select GENERIC_CLOCKEVENTS | ||
| 431 | select NO_DMA | ||
| 432 | select NO_IOPORT | ||
| 433 | select SPARSE_IRQ | ||
| 434 | select USE_OF | ||
| 435 | help | ||
| 436 | Support for Energy Micro's (now Silicon Labs) efm32 Giant Gecko | ||
| 437 | processors. | ||
| 438 | |||
| 414 | config ARCH_EP93XX | 439 | config ARCH_EP93XX |
| 415 | bool "EP93xx-based" | 440 | bool "EP93xx-based" |
| 416 | select ARCH_HAS_HOLES_MEMORYMODEL | 441 | select ARCH_HAS_HOLES_MEMORYMODEL |
| @@ -632,10 +657,10 @@ config ARCH_PXA · 215 unmodified lines | |||
| 632 | help | 657 | help |
| 633 | Support for Intel/Marvell's PXA2xx/PXA3xx processor line. | 658 | Support for Intel/Marvell's PXA2xx/PXA3xx processor line. |
| 634 | 659 | ||
| 635 | config ARCH_MSM | 660 | config ARCH_MSM_NODT |
| 636 | bool "Qualcomm MSM" | 661 | bool "Qualcomm MSM" |
| 662 | select ARCH_MSM | ||
| 637 | select ARCH_REQUIRE_GPIOLIB | 663 | select ARCH_REQUIRE_GPIOLIB |
| 638 | select CLKSRC_OF if OF | ||
| 639 | select COMMON_CLK | 664 | select COMMON_CLK |
| 640 | select GENERIC_CLOCKEVENTS | 665 | select GENERIC_CLOCKEVENTS |
| 641 | help | 666 | help |
| @@ -645,8 +670,9 @@ config ARCH_MSM · 3 unmodified lines | |||
| 645 | stack and controls some vital subsystems | 670 | stack and controls some vital subsystems |
| 646 | (clock and power control, etc). | 671 | (clock and power control, etc). |
| 647 | 672 | ||
| 648 | config ARCH_SHMOBILE | 673 | config ARCH_SHMOBILE_LEGACY |
| 649 | bool "Renesas SH-Mobile / R-Mobile" | 674 | bool "Renesas ARM SoCs (non-multiplatform)" |
| 675 | select ARCH_SHMOBILE | ||
| 650 | select ARM_PATCH_PHYS_VIRT | 676 | select ARM_PATCH_PHYS_VIRT |
| 651 | select CLKDEV_LOOKUP | 677 | select CLKDEV_LOOKUP |
| 652 | select GENERIC_CLOCKEVENTS | 678 | select GENERIC_CLOCKEVENTS |
| @@ -661,7 +687,9 @@ config ARCH_SHMOBILE · 8 unmodified lines | |||
| 661 | select PM_GENERIC_DOMAINS if PM | 687 | select PM_GENERIC_DOMAINS if PM |
| 662 | select SPARSE_IRQ | 688 | select SPARSE_IRQ |
| 663 | help | 689 | help |
| 664 | Support for Renesas's SH-Mobile and R-Mobile ARM platforms. | 690 | Support for Renesas ARM SoC platforms using a non-multiplatform |
| 691 | kernel. This includes the SH-Mobile, R-Mobile, EMMA-Mobile, R-Car | ||
| 692 | and RZ families. | ||
| 665 | 693 | ||
| 666 | config ARCH_RPC | 694 | config ARCH_RPC |
| 667 | bool "RiscPC" | 695 | bool "RiscPC" |
| @@ -711,7 +739,6 @@ config ARCH_S3C24XX · 43 unmodified lines | |||
| 711 | select HAVE_S3C2410_WATCHDOG if WATCHDOG | 739 | select HAVE_S3C2410_WATCHDOG if WATCHDOG |
| 712 | select HAVE_S3C_RTC if RTC_CLASS | 740 | select HAVE_S3C_RTC if RTC_CLASS |
| 713 | select MULTI_IRQ_HANDLER | 741 | select MULTI_IRQ_HANDLER |
| 714 | select NEED_MACH_GPIO_H | ||
| 715 | select NEED_MACH_IO_H | 742 | select NEED_MACH_IO_H |
| 716 | select SAMSUNG_ATAGS | 743 | select SAMSUNG_ATAGS |
| 717 | help | 744 | help |
| @@ -724,24 +751,23 @@ config ARCH_S3C64XX · 6 unmodified lines | |||
| 724 | bool "Samsung S3C64XX" | 751 | bool "Samsung S3C64XX" |
| 725 | select ARCH_HAS_CPUFREQ | 752 | select ARCH_HAS_CPUFREQ |
| 726 | select ARCH_REQUIRE_GPIOLIB | 753 | select ARCH_REQUIRE_GPIOLIB |
| 754 | select ARM_AMBA | ||
| 727 | select ARM_VIC | 755 | select ARM_VIC |
| 728 | select CLKDEV_LOOKUP | 756 | select CLKDEV_LOOKUP |
| 729 | select CLKSRC_SAMSUNG_PWM | 757 | select CLKSRC_SAMSUNG_PWM |
| 730 | select COMMON_CLK | 758 | select COMMON_CLK |
| 731 | select CPU_V6 | 759 | select CPU_V6K |
| 732 | select GENERIC_CLOCKEVENTS | 760 | select GENERIC_CLOCKEVENTS |
| 733 | select GPIO_SAMSUNG | 761 | select GPIO_SAMSUNG |
| 734 | select HAVE_S3C2410_I2C if I2C | 762 | select HAVE_S3C2410_I2C if I2C |
| 735 | select HAVE_S3C2410_WATCHDOG if WATCHDOG | 763 | select HAVE_S3C2410_WATCHDOG if WATCHDOG |
| 736 | select HAVE_TCM | 764 | select HAVE_TCM |
| 737 | select NEED_MACH_GPIO_H | ||
| 738 | select NO_IOPORT | 765 | select NO_IOPORT |
| 739 | select PLAT_SAMSUNG | 766 | select PLAT_SAMSUNG |
| 740 | select PM_GENERIC_DOMAINS | 767 | select PM_GENERIC_DOMAINS |
| 741 | select S3C_DEV_NAND | 768 | select S3C_DEV_NAND |
| 742 | select S3C_GPIO_TRACK | 769 | select S3C_GPIO_TRACK |
| 743 | select SAMSUNG_ATAGS | 770 | select SAMSUNG_ATAGS |
| 744 | select SAMSUNG_GPIOLIB_4BIT | ||
| 745 | select SAMSUNG_WAKEMASK | 771 | select SAMSUNG_WAKEMASK |
| 746 | select SAMSUNG_WDT_RESET | 772 | select SAMSUNG_WDT_RESET |
| 747 | select USB_ARCH_HAS_OHCI | 773 | select USB_ARCH_HAS_OHCI |
| @@ -912,6 +938,8 @@ source "arch/arm/mach-bcm/Kconfig" · 164 unmodified lines | |||
| 912 | 938 | ||
| 913 | source "arch/arm/mach-bcm2835/Kconfig" | 939 | source "arch/arm/mach-bcm2835/Kconfig" |
| 914 | 940 | ||
| 941 | source "arch/arm/mach-berlin/Kconfig" | ||
| 942 | |||
| 915 | source "arch/arm/mach-clps711x/Kconfig" | 943 | source "arch/arm/mach-clps711x/Kconfig" |
| 916 | 944 | ||
| 917 | source "arch/arm/mach-cns3xxx/Kconfig" | 945 | source "arch/arm/mach-cns3xxx/Kconfig" |
| @@ -928,6 +956,8 @@ source "arch/arm/mach-gemini/Kconfig" · 10 unmodified lines | |||
| 928 | 956 | ||
| 929 | source "arch/arm/mach-highbank/Kconfig" | 957 | source "arch/arm/mach-highbank/Kconfig" |
| 930 | 958 | ||
| 959 | source "arch/arm/mach-hisi/Kconfig" | ||
| 960 | |||
| 931 | source "arch/arm/mach-integrator/Kconfig" | 961 | source "arch/arm/mach-integrator/Kconfig" |
| 932 | 962 | ||
| 933 | source "arch/arm/mach-iop32x/Kconfig" | 963 | source "arch/arm/mach-iop32x/Kconfig" |
| @@ -946,6 +976,8 @@ source "arch/arm/mach-ks8695/Kconfig" · 12 unmodified lines | |||
| 946 | 976 | ||
| 947 | source "arch/arm/mach-msm/Kconfig" | 977 | source "arch/arm/mach-msm/Kconfig" |
| 948 | 978 | ||
| 979 | source "arch/arm/mach-moxart/Kconfig" | ||
| 980 | |||
| 949 | source "arch/arm/mach-mv78xx0/Kconfig" | 981 | source "arch/arm/mach-mv78xx0/Kconfig" |
| 950 | 982 | ||
| 951 | source "arch/arm/mach-imx/Kconfig" | 983 | source "arch/arm/mach-imx/Kconfig" |
| @@ -1054,6 +1086,8 @@ config ARM_TIMER_SP804 · 102 unmodified lines | |||
| 1054 | select CLKSRC_MMIO | 1086 | select CLKSRC_MMIO |
| 1055 | select CLKSRC_OF if OF | 1087 | select CLKSRC_OF if OF |
| 1056 | 1088 | ||
| 1089 | source "arch/arm/firmware/Kconfig" | ||
| 1090 | |||
| 1057 | source arch/arm/mm/Kconfig | 1091 | source arch/arm/mm/Kconfig |
| 1058 | 1092 | ||
| 1059 | config ARM_NR_BANKS | 1093 | config ARM_NR_BANKS |
| @@ -1436,14 +1470,14 @@ config SMP · 376 unmodified lines | |||
| 1436 | depends on MMU || ARM_MPU | 1470 | depends on MMU || ARM_MPU |
| 1437 | help | 1471 | help |
| 1438 | This enables support for systems with more than one CPU. If you have | 1472 | This enables support for systems with more than one CPU. If you have |
| 1439 | a system with only one CPU, like most personal computers, say N. If | 1473 | a system with only one CPU, say N. If you have a system with more |
| 1440 | you have a system with more than one CPU, say Y. | 1474 | than one CPU, say Y. |
| 1441 | 1475 | ||
| 1442 | If you say N here, the kernel will run on single and multiprocessor | 1476 | If you say N here, the kernel will run on uni- and multiprocessor |
| 1443 | machines, but will use only one CPU of a multiprocessor machine. If | 1477 | machines, but will use only one CPU of a multiprocessor machine. If |
| 1444 | you say Y here, the kernel will run on many, but not all, single | 1478 | you say Y here, the kernel will run on many, but not all, |
| 1445 | processor machines. On a single processor machine, the kernel will | 1479 | uniprocessor machines. On a uniprocessor machine, the kernel |
| 1446 | run faster if you say N here. | 1480 | will run faster if you say N here. |
| 1447 | 1481 | ||
| 1448 | See also <file:Documentation/x86/i386/IO-APIC.txt>, | 1482 | See also <file:Documentation/x86/i386/IO-APIC.txt>, |
| 1449 | <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at | 1483 | <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at |
| @@ -1594,7 +1628,7 @@ config ARM_PSCI · 144 unmodified lines | |||
| 1594 | config ARCH_NR_GPIO | 1628 | config ARCH_NR_GPIO |
| 1595 | int | 1629 | int |
| 1596 | default 1024 if ARCH_SHMOBILE || ARCH_TEGRA | 1630 | default 1024 if ARCH_SHMOBILE || ARCH_TEGRA |
| 1597 | default 512 if ARCH_EXYNOS || ARCH_KEYSTONE || SOC_OMAP5 || SOC_DRA7XX | 1631 | default 512 if ARCH_EXYNOS || ARCH_KEYSTONE || SOC_OMAP5 || SOC_DRA7XX || ARCH_S3C24XX || ARCH_S3C64XX |
| 1598 | default 392 if ARCH_U8500 | 1632 | default 392 if ARCH_U8500 |
| 1599 | default 352 if ARCH_VT8500 | 1633 | default 352 if ARCH_VT8500 |
| 1600 | default 288 if ARCH_SUNXI | 1634 | default 288 if ARCH_SUNXI |
| @@ -1612,7 +1646,7 @@ config HZ_FIXED · 11 unmodified lines | |||
| 1612 | default 200 if ARCH_EBSA110 || ARCH_S3C24XX || ARCH_S5P64X0 || \ | 1646 | default 200 if ARCH_EBSA110 || ARCH_S3C24XX || ARCH_S5P64X0 || \ |
| 1613 | ARCH_S5PV210 || ARCH_EXYNOS4 | 1647 | ARCH_S5PV210 || ARCH_EXYNOS4 |
| 1614 | default AT91_TIMER_HZ if ARCH_AT91 | 1648 | default AT91_TIMER_HZ if ARCH_AT91 |
| 1615 | default SHMOBILE_TIMER_HZ if ARCH_SHMOBILE | 1649 | default SHMOBILE_TIMER_HZ if ARCH_SHMOBILE_LEGACY |
| 1616 | default 0 | 1650 | default 0 |
| 1617 | 1651 | ||
| 1618 | choice | 1652 | choice |
| @@ -1652,9 +1686,6 @@ config HZ · 33 unmodified lines | |||
| 1652 | config SCHED_HRTICK | 1686 | config SCHED_HRTICK |
| 1653 | def_bool HIGH_RES_TIMERS | 1687 | def_bool HIGH_RES_TIMERS |
| 1654 | 1688 | ||
| 1655 | config SCHED_HRTICK | ||
| 1656 | def_bool HIGH_RES_TIMERS | ||
| 1657 | |||
| 1658 | config THUMB2_KERNEL | 1689 | config THUMB2_KERNEL |
| 1659 | bool "Compile the kernel in Thumb-2 mode" if !CPU_THUMBONLY | 1690 | bool "Compile the kernel in Thumb-2 mode" if !CPU_THUMBONLY |
| 1660 | depends on (CPU_V7 || CPU_V7M) && !CPU_V6 && !CPU_V6K | 1691 | depends on (CPU_V7 || CPU_V7M) && !CPU_V6 && !CPU_V6K |
| @@ -1797,10 +1828,10 @@ config ARCH_WANT_GENERAL_HUGETLB · 136 unmodified lines | |||
| 1797 | source "mm/Kconfig" | 1828 | source "mm/Kconfig" |
| 1798 | 1829 | ||
| 1799 | config FORCE_MAX_ZONEORDER | 1830 | config FORCE_MAX_ZONEORDER |
| 1800 | int "Maximum zone order" if ARCH_SHMOBILE | 1831 | int "Maximum zone order" if ARCH_SHMOBILE_LEGACY |
| 1801 | range 11 64 if ARCH_SHMOBILE | 1832 | range 11 64 if ARCH_SHMOBILE_LEGACY |
| 1802 | default "12" if SOC_AM33XX | 1833 | default "12" if SOC_AM33XX |
| 1803 | default "9" if SA1111 | 1834 | default "9" if SA1111 || ARCH_EFM32 |
| 1804 | default "11" | 1835 | default "11" |
| 1805 | help | 1836 | help |
| 1806 | The kernel memory allocator divides physically contiguous memory | 1837 | The kernel memory allocator divides physically contiguous memory |
| @@ -1874,6 +1905,7 @@ config XEN · 67 unmodified lines | |||
| 1874 | depends on !GENERIC_ATOMIC64 | 1905 | depends on !GENERIC_ATOMIC64 |
| 1875 | select ARM_PSCI | 1906 | select ARM_PSCI |
| 1876 | select SWIOTLB_XEN | 1907 | select SWIOTLB_XEN |
| 1908 | select ARCH_DMA_ADDR_T_64BIT | ||
| 1877 | help | 1909 | help |
| 1878 | Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. | 1910 | Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. |
| 1879 | 1911 | ||
| @@ -1935,6 +1967,7 @@ config ZBOOT_ROM_BSS · 55 unmodified lines | |||
| 1935 | config ZBOOT_ROM | 1967 | config ZBOOT_ROM |
| 1936 | bool "Compressed boot loader in ROM/flash" | 1968 | bool "Compressed boot loader in ROM/flash" |
| 1937 | depends on ZBOOT_ROM_TEXT != ZBOOT_ROM_BSS | 1969 | depends on ZBOOT_ROM_TEXT != ZBOOT_ROM_BSS |
| 1970 | depends on !ARM_APPENDED_DTB && !XIP_KERNEL && !AUTO_ZRELADDR | ||
| 1938 | help | 1971 | help |
| 1939 | Say Y here if you intend to execute your compressed kernel image | 1972 | Say Y here if you intend to execute your compressed kernel image |
| 1940 | (zImage) directly from ROM or flash. If unsure, say N. | 1973 | (zImage) directly from ROM or flash. If unsure, say N. |
| @@ -1970,7 +2003,7 @@ endchoice · 29 unmodified lines | |||
| 1970 | 2003 | ||
| 1971 | config ARM_APPENDED_DTB | 2004 | config ARM_APPENDED_DTB |
| 1972 | bool "Use appended device tree blob to zImage (EXPERIMENTAL)" | 2005 | bool "Use appended device tree blob to zImage (EXPERIMENTAL)" |
| 1973 | depends on OF && !ZBOOT_ROM | 2006 | depends on OF |
| 1974 | help | 2007 | help |
| 1975 | With this option, the boot code will look for a device tree binary | 2008 | With this option, the boot code will look for a device tree binary |
| 1976 | (DTB) appended to zImage | 2009 | (DTB) appended to zImage |
| @@ -2058,7 +2091,7 @@ endchoice · 81 unmodified lines | |||
| 2058 | 2091 | ||
| 2059 | config XIP_KERNEL | 2092 | config XIP_KERNEL |
| 2060 | bool "Kernel Execute-In-Place from ROM" | 2093 | bool "Kernel Execute-In-Place from ROM" |
| 2061 | depends on !ZBOOT_ROM && !ARM_LPAE && !ARCH_MULTIPLATFORM | 2094 | depends on !ARM_LPAE && !ARCH_MULTIPLATFORM |
| 2062 | help | 2095 | help |
| 2063 | Execute-In-Place allows the kernel to run from non-volatile storage | 2096 | Execute-In-Place allows the kernel to run from non-volatile storage |
| 2064 | directly addressable by the CPU, such as NOR flash. This saves RAM | 2097 | directly addressable by the CPU, such as NOR flash. This saves RAM |
| @@ -2121,7 +2154,6 @@ config CRASH_DUMP · 56 unmodified lines | |||
| 2121 | 2154 | ||
| 2122 | config AUTO_ZRELADDR | 2155 | config AUTO_ZRELADDR |
| 2123 | bool "Auto calculation of the decompressed kernel image address" | 2156 | bool "Auto calculation of the decompressed kernel image address" |
| 2124 | depends on !ZBOOT_ROM | ||
| 2125 | help | 2157 | help |
| 2126 | ZRELADDR is the physical address where the decompressed kernel | 2158 | ZRELADDR is the physical address where the decompressed kernel |
| 2127 | image will be placed. If AUTO_ZRELADDR is selected, the address | 2159 | image will be placed. If AUTO_ZRELADDR is selected, the address |
| @@ -2,6 +2,18 @@ menu "Kernel hacking" · 1 unmodified line | |||
| 2 | 2 | ||
| 3 | source "lib/Kconfig.debug" | 3 | source "lib/Kconfig.debug" |
| 4 | 4 | ||
| 5 | config ARM_PTDUMP | ||
| 6 | bool "Export kernel pagetable layout to userspace via debugfs" | ||
| 7 | depends on DEBUG_KERNEL | ||
| 8 | select DEBUG_FS | ||
| 9 | ---help--- | ||
| 10 | Say Y here if you want to show the kernel pagetable layout in a | ||
| 11 | debugfs file. This information is only useful for kernel developers | ||
| 12 | who are working in architecture specific areas of the kernel. | ||
| 13 | It is probably not a good idea to enable this feature in a production | ||
| 14 | kernel. | ||
| 15 | If in doubt, say "N" | ||
| 16 | |||
| 5 | config STRICT_DEVMEM | 17 | config STRICT_DEVMEM |
| 6 | bool "Filter access to /dev/mem" | 18 | bool "Filter access to /dev/mem" |
| 7 | depends on MMU | 19 | depends on MMU |
| @@ -94,6 +106,25 @@ choice · 86 unmodified lines | |||
| 94 | depends on ARCH_BCM2835 | 106 | depends on ARCH_BCM2835 |
| 95 | select DEBUG_UART_PL01X | 107 | select DEBUG_UART_PL01X |
| 96 | 108 | ||
| 109 | config DEBUG_BCM_KONA_UART | ||
| 110 | bool "Kernel low-level debugging messages via BCM KONA UART" | ||
| 111 | depends on ARCH_BCM | ||
| 112 | select DEBUG_UART_8250 | ||
| 113 | help | ||
| 114 | Say Y here if you want kernel low-level debugging support | ||
| 115 | on Broadcom SoC platforms. | ||
| 116 | This low level debug works for Broadcom | ||
| 117 | mobile SoCs in the Kona family of chips (e.g. bcm28155, | ||
| 118 | bcm11351, etc...) | ||
| 119 | |||
| 120 | config DEBUG_BERLIN_UART | ||
| 121 | bool "Marvell Berlin SoC Debug UART" | ||
| 122 | depends on ARCH_BERLIN | ||
| 123 | select DEBUG_UART_8250 | ||
| 124 | help | ||
| 125 | Say Y here if you want kernel low-level debugging support | ||
| 126 | on Marvell Berlin SoC based platforms. | ||
| 127 | |||
| 97 | config DEBUG_CLPS711X_UART1 | 128 | config DEBUG_CLPS711X_UART1 |
| 98 | bool "Kernel low-level debugging messages via UART1" | 129 | bool "Kernel low-level debugging messages via UART1" |
| 99 | depends on ARCH_CLPS711X | 130 | depends on ARCH_CLPS711X |
| @@ -255,6 +286,13 @@ choice · 155 unmodified lines | |||
| 255 | Say Y here if you want kernel low-level debugging support | 286 | Say Y here if you want kernel low-level debugging support |
| 256 | on i.MX35. | 287 | on i.MX35. |
| 257 | 288 | ||
| 289 | config DEBUG_IMX50_UART | ||
| 290 | bool "i.MX50 Debug UART" | ||
| 291 | depends on SOC_IMX50 | ||
| 292 | help | ||
| 293 | Say Y here if you want kernel low-level debugging support | ||
| 294 | on i.MX50. | ||
| 295 | |||
| 258 | config DEBUG_IMX51_UART | 296 | config DEBUG_IMX51_UART |
| 259 | bool "i.MX51 Debug UART" | 297 | bool "i.MX51 Debug UART" |
| 260 | depends on SOC_IMX51 | 298 | depends on SOC_IMX51 |
| @@ -897,6 +935,7 @@ config DEBUG_IMX_UART_PORT · 636 unmodified lines | |||
| 897 | DEBUG_IMX21_IMX27_UART || \ | 935 | DEBUG_IMX21_IMX27_UART || \ |
| 898 | DEBUG_IMX31_UART || \ | 936 | DEBUG_IMX31_UART || \ |
| 899 | DEBUG_IMX35_UART || \ | 937 | DEBUG_IMX35_UART || \ |
| 938 | DEBUG_IMX50_UART || \ | ||
| 900 | DEBUG_IMX51_UART || \ | 939 | DEBUG_IMX51_UART || \ |
| 901 | DEBUG_IMX53_UART || \ | 940 | DEBUG_IMX53_UART || \ |
| 902 | DEBUG_IMX6Q_UART || \ | 941 | DEBUG_IMX6Q_UART || \ |
| @@ -931,6 +970,7 @@ config DEBUG_LL_INCLUDE · 28 unmodified lines | |||
| 931 | DEBUG_IMX21_IMX27_UART || \ | 970 | DEBUG_IMX21_IMX27_UART || \ |
| 932 | DEBUG_IMX31_UART || \ | 971 | DEBUG_IMX31_UART || \ |
| 933 | DEBUG_IMX35_UART || \ | 972 | DEBUG_IMX35_UART || \ |
| 973 | DEBUG_IMX50_UART || \ | ||
| 934 | DEBUG_IMX51_UART || \ | 974 | DEBUG_IMX51_UART || \ |
| 935 | DEBUG_IMX53_UART ||\ | 975 | DEBUG_IMX53_UART ||\ |
| 936 | DEBUG_IMX6Q_UART || \ | 976 | DEBUG_IMX6Q_UART || \ |
| @@ -988,6 +1028,7 @@ config DEBUG_UART_PHYS · 51 unmodified lines | |||
| 988 | default 0x20064000 if DEBUG_RK29_UART1 || DEBUG_RK3X_UART2 | 1028 | default 0x20064000 if DEBUG_RK29_UART1 || DEBUG_RK3X_UART2 |
| 989 | default 0x20068000 if DEBUG_RK29_UART2 || DEBUG_RK3X_UART3 | 1029 | default 0x20068000 if DEBUG_RK29_UART2 || DEBUG_RK3X_UART3 |
| 990 | default 0x20201000 if DEBUG_BCM2835 | 1030 | default 0x20201000 if DEBUG_BCM2835 |
| 1031 | default 0x3e000000 if DEBUG_BCM_KONA_UART | ||
| 991 | default 0x4000e400 if DEBUG_LL_UART_EFM32 | 1032 | default 0x4000e400 if DEBUG_LL_UART_EFM32 |
| 992 | default 0x40090000 if ARCH_LPC32XX | 1033 | default 0x40090000 if ARCH_LPC32XX |
| 993 | default 0x40100000 if DEBUG_PXA_UART1 | 1034 | default 0x40100000 if DEBUG_PXA_UART1 |
| @@ -1011,6 +1052,7 @@ config DEBUG_UART_PHYS · 17 unmodified lines | |||
| 1011 | default 0xf1012000 if DEBUG_MVEBU_UART_ALTERNATE | 1052 | default 0xf1012000 if DEBUG_MVEBU_UART_ALTERNATE |
| 1012 | default 0xf1012000 if ARCH_DOVE || ARCH_KIRKWOOD || ARCH_MV78XX0 || \ | 1053 | default 0xf1012000 if ARCH_DOVE || ARCH_KIRKWOOD || ARCH_MV78XX0 || \ |
| 1013 | ARCH_ORION5X | 1054 | ARCH_ORION5X |
| 1055 | default 0xf7fc9000 if DEBUG_BERLIN_UART | ||
| 1014 | default 0xf8b00000 if DEBUG_HI3716_UART | 1056 | default 0xf8b00000 if DEBUG_HI3716_UART |
| 1015 | default 0xfcb00000 if DEBUG_HI3620_UART | 1057 | default 0xfcb00000 if DEBUG_HI3620_UART |
| 1016 | default 0xfe800000 if ARCH_IOP32X | 1058 | default 0xfe800000 if ARCH_IOP32X |
| @@ -1036,6 +1078,7 @@ config DEBUG_UART_VIRT · 19 unmodified lines | |||
| 1036 | default 0xf2100000 if DEBUG_PXA_UART1 | 1078 | default 0xf2100000 if DEBUG_PXA_UART1 |
| 1037 | default 0xf4090000 if ARCH_LPC32XX | 1079 | default 0xf4090000 if ARCH_LPC32XX |
| 1038 | default 0xf4200000 if ARCH_GEMINI | 1080 | default 0xf4200000 if ARCH_GEMINI |
| 1081 | default 0xf7fc9000 if DEBUG_BERLIN_UART | ||
| 1039 | default 0xf8009000 if DEBUG_VEXPRESS_UART0_CA9 | 1082 | default 0xf8009000 if DEBUG_VEXPRESS_UART0_CA9 |
| 1040 | default 0xf8090000 if DEBUG_VEXPRESS_UART0_RS1 | 1083 | default 0xf8090000 if DEBUG_VEXPRESS_UART0_RS1 |
| 1041 | default 0xfb009000 if DEBUG_REALVIEW_STD_PORT | 1084 | default 0xfb009000 if DEBUG_REALVIEW_STD_PORT |
| @@ -1049,6 +1092,7 @@ config DEBUG_UART_VIRT · 7 unmodified lines | |||
| 1049 | default 0xfe018000 if DEBUG_MMP_UART3 | 1092 | default 0xfe018000 if DEBUG_MMP_UART3 |
| 1050 | default 0xfe100000 if DEBUG_IMX23_UART || DEBUG_IMX28_UART | 1093 | default 0xfe100000 if DEBUG_IMX23_UART || DEBUG_IMX28_UART |
| 1051 | default 0xfe230000 if DEBUG_PICOXCELL_UART | 1094 | default 0xfe230000 if DEBUG_PICOXCELL_UART |
| 1095 | default 0xfe300000 if DEBUG_BCM_KONA_UART | ||
| 1052 | default 0xfe800000 if ARCH_IOP32X | 1096 | default 0xfe800000 if ARCH_IOP32X |
| 1053 | default 0xfeb00000 if DEBUG_HI3620_UART || DEBUG_HI3716_UART | 1097 | default 0xfeb00000 if DEBUG_HI3620_UART || DEBUG_HI3716_UART |
| 1054 | default 0xfeb24000 if DEBUG_RK3X_UART0 | 1098 | default 0xfeb24000 if DEBUG_RK3X_UART0 |
| @@ -1091,7 +1135,8 @@ config DEBUG_UART_8250_WORD · 36 unmodified lines | |||
| 1091 | default y if DEBUG_PICOXCELL_UART || DEBUG_SOCFPGA_UART || \ | 1135 | default y if DEBUG_PICOXCELL_UART || DEBUG_SOCFPGA_UART || \ |
| 1092 | ARCH_KEYSTONE || \ | 1136 | ARCH_KEYSTONE || \ |
| 1093 | DEBUG_DAVINCI_DMx_UART0 || DEBUG_DAVINCI_DA8XX_UART1 || \ | 1137 | DEBUG_DAVINCI_DMx_UART0 || DEBUG_DAVINCI_DA8XX_UART1 || \ |
| 1094 | DEBUG_DAVINCI_DA8XX_UART2 || DEBUG_DAVINCI_TNETV107X_UART1 | 1138 | DEBUG_DAVINCI_DA8XX_UART2 || DEBUG_DAVINCI_TNETV107X_UART1 || \ |
| 1139 | DEBUG_BCM_KONA_UART | ||
| 1095 | 1140 | ||
| 1096 | config DEBUG_UART_8250_FLOW_CONTROL | 1141 | config DEBUG_UART_8250_FLOW_CONTROL |
| 1097 | bool "Enable flow control for 8250 UART" | 1142 | bool "Enable flow control for 8250 UART" |
| @@ -1150,4 +1195,15 @@ config PID_IN_CONTEXTIDR · 52 unmodified lines | |||
| 1150 | additional instructions during context switch. Say Y here only if you | 1195 | additional instructions during context switch. Say Y here only if you |
| 1151 | are planning to use hardware trace tools with this kernel. | 1196 | are planning to use hardware trace tools with this kernel. |
| 1152 | 1197 | ||
| 1198 | config DEBUG_SET_MODULE_RONX | ||
| 1199 | bool "Set loadable kernel module data as NX and text as RO" | ||
| 1200 | depends on MODULES | ||
| 1201 | ---help--- | ||
| 1202 | This option helps catch unintended modifications to loadable | ||
| 1203 | kernel module's text and read-only data. It also prevents execution | ||
| 1204 | of module data. Such protection may interfere with run-time code | ||
| 1205 | patching and dynamic kernel tracing - and they might also protect | ||
| 1206 | against certain classes of kernel exploits. | ||
| 1207 | If in doubt, say "N". | ||
| 1208 | |||
| 1153 | endmenu | 1209 | endmenu |
| @@ -96,7 +96,7 @@ tune-$(CONFIG_CPU_V6K) =$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm) · 95 unmodified lines | |||
| 96 | tune-y := $(tune-y) | 96 | tune-y := $(tune-y) |
| 97 | 97 | ||
| 98 | ifeq ($(CONFIG_AEABI),y) | 98 | ifeq ($(CONFIG_AEABI),y) |
| 99 | CFLAGS_ABI :=-mabi=aapcs-linux -mno-thumb-interwork | 99 | CFLAGS_ABI :=-mabi=aapcs-linux -mno-thumb-interwork -mfpu=vfp |
| 100 | else | 100 | else |
| 101 | CFLAGS_ABI :=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) $(call cc-option,-mno-thumb-interwork,) | 101 | CFLAGS_ABI :=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) $(call cc-option,-mno-thumb-interwork,) |
| 102 | endif | 102 | endif |
| @@ -144,15 +144,18 @@ textofs-$(CONFIG_ARCH_MSM8960) := 0x00208000 · 41 unmodified lines | |||
| 144 | machine-$(CONFIG_ARCH_AT91) += at91 | 144 | machine-$(CONFIG_ARCH_AT91) += at91 |
| 145 | machine-$(CONFIG_ARCH_BCM) += bcm | 145 | machine-$(CONFIG_ARCH_BCM) += bcm |
| 146 | machine-$(CONFIG_ARCH_BCM2835) += bcm2835 | 146 | machine-$(CONFIG_ARCH_BCM2835) += bcm2835 |
| 147 | machine-$(CONFIG_ARCH_BERLIN) += berlin | ||
| 147 | machine-$(CONFIG_ARCH_CLPS711X) += clps711x | 148 | machine-$(CONFIG_ARCH_CLPS711X) += clps711x |
| 148 | machine-$(CONFIG_ARCH_CNS3XXX) += cns3xxx | 149 | machine-$(CONFIG_ARCH_CNS3XXX) += cns3xxx |
| 149 | machine-$(CONFIG_ARCH_DAVINCI) += davinci | 150 | machine-$(CONFIG_ARCH_DAVINCI) += davinci |
| 150 | machine-$(CONFIG_ARCH_DOVE) += dove | 151 | machine-$(CONFIG_ARCH_DOVE) += dove |
| 151 | machine-$(CONFIG_ARCH_EBSA110) += ebsa110 | 152 | machine-$(CONFIG_ARCH_EBSA110) += ebsa110 |
| 153 | machine-$(CONFIG_ARCH_EFM32) += efm32 | ||
| 152 | machine-$(CONFIG_ARCH_EP93XX) += ep93xx | 154 | machine-$(CONFIG_ARCH_EP93XX) += ep93xx |
| 153 | machine-$(CONFIG_ARCH_EXYNOS) += exynos | 155 | machine-$(CONFIG_ARCH_EXYNOS) += exynos |
| 154 | machine-$(CONFIG_ARCH_GEMINI) += gemini | 156 | machine-$(CONFIG_ARCH_GEMINI) += gemini |
| 155 | machine-$(CONFIG_ARCH_HIGHBANK) += highbank | 157 | machine-$(CONFIG_ARCH_HIGHBANK) += highbank |
| 158 | machine-$(CONFIG_ARCH_HI3xxx) += hisi | ||
| 156 | machine-$(CONFIG_ARCH_INTEGRATOR) += integrator | 159 | machine-$(CONFIG_ARCH_INTEGRATOR) += integrator |
| 157 | machine-$(CONFIG_ARCH_IOP13XX) += iop13xx | 160 | machine-$(CONFIG_ARCH_IOP13XX) += iop13xx |
| 158 | machine-$(CONFIG_ARCH_IOP32X) += iop32x | 161 | machine-$(CONFIG_ARCH_IOP32X) += iop32x |
| @@ -163,6 +166,7 @@ machine-$(CONFIG_ARCH_KIRKWOOD) += kirkwood · 4 unmodified lines | |||
| 163 | machine-$(CONFIG_ARCH_KS8695) += ks8695 | 166 | machine-$(CONFIG_ARCH_KS8695) += ks8695 |
| 164 | machine-$(CONFIG_ARCH_LPC32XX) += lpc32xx | 167 | machine-$(CONFIG_ARCH_LPC32XX) += lpc32xx |
| 165 | machine-$(CONFIG_ARCH_MMP) += mmp | 168 | machine-$(CONFIG_ARCH_MMP) += mmp |
| 169 | machine-$(CONFIG_ARCH_MOXART) += moxart | ||
| 166 | machine-$(CONFIG_ARCH_MSM) += msm | 170 | machine-$(CONFIG_ARCH_MSM) += msm |
| 167 | machine-$(CONFIG_ARCH_MV78XX0) += mv78xx0 | 171 | machine-$(CONFIG_ARCH_MV78XX0) += mv78xx0 |
| 168 | machine-$(CONFIG_ARCH_MVEBU) += mvebu | 172 | machine-$(CONFIG_ARCH_MVEBU) += mvebu |
| @@ -186,7 +190,6 @@ machine-$(CONFIG_ARCH_S5PC100) += s5pc100 · 17 unmodified lines | |||
| 186 | machine-$(CONFIG_ARCH_S5PV210) += s5pv210 | 190 | machine-$(CONFIG_ARCH_S5PV210) += s5pv210 |
| 187 | machine-$(CONFIG_ARCH_SA1100) += sa1100 | 191 | machine-$(CONFIG_ARCH_SA1100) += sa1100 |
| 188 | machine-$(CONFIG_ARCH_SHMOBILE) += shmobile | 192 | machine-$(CONFIG_ARCH_SHMOBILE) += shmobile |
| 189 | machine-$(CONFIG_ARCH_SHMOBILE_MULTI) += shmobile | ||
| 190 | machine-$(CONFIG_ARCH_SIRF) += prima2 | 193 | machine-$(CONFIG_ARCH_SIRF) += prima2 |
| 191 | machine-$(CONFIG_ARCH_SOCFPGA) += socfpga | 194 | machine-$(CONFIG_ARCH_SOCFPGA) += socfpga |
| 192 | machine-$(CONFIG_ARCH_STI) += sti | 195 | machine-$(CONFIG_ARCH_STI) += sti |
| @@ -264,6 +267,7 @@ core-$(CONFIG_KVM_ARM_HOST) += arch/arm/kvm/ · 71 unmodified lines | |||
| 264 | core-y += arch/arm/kernel/ arch/arm/mm/ arch/arm/common/ | 267 | core-y += arch/arm/kernel/ arch/arm/mm/ arch/arm/common/ |
| 265 | core-y += arch/arm/net/ | 268 | core-y += arch/arm/net/ |
| 266 | core-y += arch/arm/crypto/ | 269 | core-y += arch/arm/crypto/ |
| 270 | core-y += arch/arm/firmware/ | ||
| 267 | core-y += $(machdirs) $(platdirs) | 271 | core-y += $(machdirs) $(platdirs) |
| 268 | 272 | ||
| 269 | drivers-$(CONFIG_OPROFILE) += arch/arm/oprofile/ | 273 | drivers-$(CONFIG_OPROFILE) += arch/arm/oprofile/ |
| @@ -64,7 +64,7 @@ else · 63 unmodified lines | |||
| 64 | endif | 64 | endif |
| 65 | endif | 65 | endif |
| 66 | 66 | ||
| 67 | ifeq ($(CONFIG_ARCH_SHMOBILE),y) | 67 | ifeq ($(CONFIG_ARCH_SHMOBILE_LEGACY),y) |
| 68 | OBJS += head-shmobile.o | 68 | OBJS += head-shmobile.o |
| 69 | endif | 69 | endif |
| 70 | 70 | ||
| @@ -108,12 +108,12 @@ endif · 37 unmodified lines | |||
| 108 | 108 | ||
| 109 | targets := vmlinux vmlinux.lds \ | 109 | targets := vmlinux vmlinux.lds \ |
| 110 | piggy.$(suffix_y) piggy.$(suffix_y).o \ | 110 | piggy.$(suffix_y) piggy.$(suffix_y).o \ |
| 111 | lib1funcs.o lib1funcs.S ashldi3.o ashldi3.S \ | 111 | lib1funcs.o lib1funcs.S ashldi3.o ashldi3.S bswapsdi2.o \ |
| 112 | font.o font.c head.o misc.o $(OBJS) | 112 | bswapsdi2.S font.o font.c head.o misc.o $(OBJS) |
| 113 | 113 | ||
| 114 | # Make sure files are removed during clean | 114 | # Make sure files are removed during clean |
| 115 | extra-y += piggy.gzip piggy.lzo piggy.lzma piggy.xzkern piggy.lz4 \ | 115 | extra-y += piggy.gzip piggy.lzo piggy.lzma piggy.xzkern piggy.lz4 \ |
| 116 | lib1funcs.S ashldi3.S $(libfdt) $(libfdt_hdrs) \ | 116 | lib1funcs.S ashldi3.S bswapsdi2.S $(libfdt) $(libfdt_hdrs) \ |
| 117 | hyp-stub.S | 117 | hyp-stub.S |
| 118 | 118 | ||
| 119 | ifeq ($(CONFIG_FUNCTION_TRACER),y) | 119 | ifeq ($(CONFIG_FUNCTION_TRACER),y) |
| @@ -156,6 +156,12 @@ ashldi3 = $(obj)/ashldi3.o · 36 unmodified lines | |||
| 156 | $(obj)/ashldi3.S: $(srctree)/arch/$(SRCARCH)/lib/ashldi3.S | 156 | $(obj)/ashldi3.S: $(srctree)/arch/$(SRCARCH)/lib/ashldi3.S |
| 157 | $(call cmd,shipped) | 157 | $(call cmd,shipped) |
| 158 | 158 | ||
| 159 | # For __bswapsi2, __bswapdi2 | ||
| 160 | bswapsdi2 = $(obj)/bswapsdi2.o | ||
| 161 | |||
| 162 | $(obj)/bswapsdi2.S: $(srctree)/arch/$(SRCARCH)/lib/bswapsdi2.S | ||
| 163 | $(call cmd,shipped) | ||
| 164 | |||
| 159 | # We need to prevent any GOTOFF relocs being used with references | 165 | # We need to prevent any GOTOFF relocs being used with references |
| 160 | # to symbols in the .bss section since we cannot relocate them | 166 | # to symbols in the .bss section since we cannot relocate them |
| 161 | # independently from the rest at run time. This can be achieved by | 167 | # independently from the rest at run time. This can be achieved by |
| @@ -177,7 +183,8 @@ if [ $(words $(ZRELADDR)) -gt 1 -a "$(CONFIG_AUTO_ZRELADDR)" = "" ]; then \ · 15 unmodified lines | |||
| 177 | fi | 183 | fi |
| 178 | 184 | ||
| 179 | $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \ | 185 | $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \ |
| 180 | $(addprefix $(obj)/, $(OBJS)) $(lib1funcs) $(ashldi3) FORCE | 186 | $(addprefix $(obj)/, $(OBJS)) $(lib1funcs) $(ashldi3) \ |
| 187 | $(bswapsdi2) FORCE | ||
| 181 | @$(check_for_multiple_zreladdr) | 188 | @$(check_for_multiple_zreladdr) |
| 182 | $(call if_changed,ld) | 189 | $(call if_changed,ld) |
| 183 | @$(check_for_bad_syms) | 190 | @$(check_for_bad_syms) |
| @@ -6,6 +6,7 @@ dtb-$(CONFIG_ARCH_AT91) += at91rm9200ek.dtb · 5 unmodified lines | |||
| 6 | dtb-$(CONFIG_ARCH_AT91) += mpa1600.dtb | 6 | dtb-$(CONFIG_ARCH_AT91) += mpa1600.dtb |
| 7 | # sam9260 | 7 | # sam9260 |
| 8 | dtb-$(CONFIG_ARCH_AT91) += animeo_ip.dtb | 8 | dtb-$(CONFIG_ARCH_AT91) += animeo_ip.dtb |
| 9 | dtb-$(CONFIG_ARCH_AT91) += at91-qil_a9260.dtb | ||
| 9 | dtb-$(CONFIG_ARCH_AT91) += aks-cdu.dtb | 10 | dtb-$(CONFIG_ARCH_AT91) += aks-cdu.dtb |
| 10 | dtb-$(CONFIG_ARCH_AT91) += ethernut5.dtb | 11 | dtb-$(CONFIG_ARCH_AT91) += ethernut5.dtb |
| 11 | dtb-$(CONFIG_ARCH_AT91) += evk-pro3.dtb | 12 | dtb-$(CONFIG_ARCH_AT91) += evk-pro3.dtb |
| @@ -30,6 +31,7 @@ dtb-$(CONFIG_ARCH_AT91) += pm9g45.dtb · 18 unmodified lines | |||
| 30 | dtb-$(CONFIG_ARCH_AT91) += at91sam9n12ek.dtb | 31 | dtb-$(CONFIG_ARCH_AT91) += at91sam9n12ek.dtb |
| 31 | # sam9x5 | 32 | # sam9x5 |
| 32 | dtb-$(CONFIG_ARCH_AT91) += at91-ariag25.dtb | 33 | dtb-$(CONFIG_ARCH_AT91) += at91-ariag25.dtb |
| 34 | dtb-$(CONFIG_ARCH_AT91) += at91-cosino_mega2560.dtb | ||
| 33 | dtb-$(CONFIG_ARCH_AT91) += at91sam9g15ek.dtb | 35 | dtb-$(CONFIG_ARCH_AT91) += at91sam9g15ek.dtb |
| 34 | dtb-$(CONFIG_ARCH_AT91) += at91sam9g25ek.dtb | 36 | dtb-$(CONFIG_ARCH_AT91) += at91sam9g25ek.dtb |
| 35 | dtb-$(CONFIG_ARCH_AT91) += at91sam9g35ek.dtb | 37 | dtb-$(CONFIG_ARCH_AT91) += at91sam9g35ek.dtb |
| @@ -40,11 +42,16 @@ dtb-$(CONFIG_ARCH_AT91) += sama5d31ek.dtb · 4 unmodified lines | |||
| 40 | dtb-$(CONFIG_ARCH_AT91) += sama5d33ek.dtb | 42 | dtb-$(CONFIG_ARCH_AT91) += sama5d33ek.dtb |
| 41 | dtb-$(CONFIG_ARCH_AT91) += sama5d34ek.dtb | 43 | dtb-$(CONFIG_ARCH_AT91) += sama5d34ek.dtb |
| 42 | dtb-$(CONFIG_ARCH_AT91) += sama5d35ek.dtb | 44 | dtb-$(CONFIG_ARCH_AT91) += sama5d35ek.dtb |
| 45 | dtb-$(CONFIG_ARCH_AT91) += sama5d36ek.dtb | ||
| 46 | |||
| 43 | dtb-$(CONFIG_ARCH_ATLAS6) += atlas6-evb.dtb | 47 | dtb-$(CONFIG_ARCH_ATLAS6) += atlas6-evb.dtb |
| 44 | dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb | 48 | dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb |
| 45 | dtb-$(CONFIG_ARCH_BCM_MOBILE) += bcm11351-brt.dtb \ | 49 | dtb-$(CONFIG_ARCH_BCM_MOBILE) += bcm11351-brt.dtb \ |
| 46 | bcm28155-ap.dtb | 50 | bcm28155-ap.dtb |
| 47 | dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb | 51 | dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb |
| 52 | dtb-$(CONFIG_ARCH_BERLIN) += \ | ||
| 53 | berlin2-sony-nsz-gs7.dtb \ | ||
| 54 | berlin2cd-google-chromecast.dtb | ||
| 48 | dtb-$(CONFIG_ARCH_DAVINCI) += da850-enbw-cmc.dtb \ | 55 | dtb-$(CONFIG_ARCH_DAVINCI) += da850-enbw-cmc.dtb \ |
| 49 | da850-evm.dtb | 56 | da850-evm.dtb |
| 50 | dtb-$(CONFIG_ARCH_DOVE) += dove-cm-a510.dtb \ | 57 | dtb-$(CONFIG_ARCH_DOVE) += dove-cm-a510.dtb \ |
| @@ -52,6 +59,7 @@ dtb-$(CONFIG_ARCH_DOVE) += dove-cm-a510.dtb \ · 1 unmodified line | |||
| 52 | dove-d2plug.dtb \ | 59 | dove-d2plug.dtb \ |
| 53 | dove-d3plug.dtb \ | 60 | dove-d3plug.dtb \ |
| 54 | dove-dove-db.dtb | 61 | dove-dove-db.dtb |
| 62 | dtb-$(CONFIG_ARCH_EFM32) += efm32gg-dk3750.dtb | ||
| 55 | dtb-$(CONFIG_ARCH_EXYNOS) += exynos4210-origen.dtb \ | 63 | dtb-$(CONFIG_ARCH_EXYNOS) += exynos4210-origen.dtb \ |
| 56 | exynos4210-smdkv310.dtb \ | 64 | exynos4210-smdkv310.dtb \ |
| 57 | exynos4210-trats.dtb \ | 65 | exynos4210-trats.dtb \ |
| @@ -59,13 +67,16 @@ dtb-$(CONFIG_ARCH_EXYNOS) += exynos4210-origen.dtb \ · 1 unmodified line | |||
| 59 | exynos4412-odroidx.dtb \ | 67 | exynos4412-odroidx.dtb \ |
| 60 | exynos4412-origen.dtb \ | 68 | exynos4412-origen.dtb \ |
| 61 | exynos4412-smdk4412.dtb \ | 69 | exynos4412-smdk4412.dtb \ |
| 70 | exynos4412-tiny4412.dtb \ | ||
| 62 | exynos4412-trats2.dtb \ | 71 | exynos4412-trats2.dtb \ |
| 63 | exynos5250-arndale.dtb \ | 72 | exynos5250-arndale.dtb \ |
| 64 | exynos5250-smdk5250.dtb \ | 73 | exynos5250-smdk5250.dtb \ |
| 65 | exynos5250-snow.dtb \ | 74 | exynos5250-snow.dtb \ |
| 75 | exynos5420-arndale-octa.dtb \ | ||
| 66 | exynos5420-smdk5420.dtb \ | 76 | exynos5420-smdk5420.dtb \ |
| 67 | exynos5440-sd5v1.dtb \ | 77 | exynos5440-sd5v1.dtb \ |
| 68 | exynos5440-ssdk5440.dtb | 78 | exynos5440-ssdk5440.dtb |
| 79 | dtb-$(CONFIG_ARCH_HI3xxx) += hi3620-hi4511.dtb | ||
| 69 | dtb-$(CONFIG_ARCH_HIGHBANK) += highbank.dtb \ | 80 | dtb-$(CONFIG_ARCH_HIGHBANK) += highbank.dtb \ |
| 70 | ecx-2000.dtb | 81 | ecx-2000.dtb |
| 71 | dtb-$(CONFIG_ARCH_INTEGRATOR) += integratorap.dtb \ | 82 | dtb-$(CONFIG_ARCH_INTEGRATOR) += integratorap.dtb \ |
| @@ -85,11 +96,13 @@ dtb-$(CONFIG_ARCH_KIRKWOOD) += kirkwood-cloudbox.dtb \ · 13 unmodified lines | |||
| 85 | kirkwood-iomega_ix2_200.dtb \ | 96 | kirkwood-iomega_ix2_200.dtb \ |
| 86 | kirkwood-is2.dtb \ | 97 | kirkwood-is2.dtb \ |
| 87 | kirkwood-km_kirkwood.dtb \ | 98 | kirkwood-km_kirkwood.dtb \ |
| 99 | kirkwood-laplug.dtb \ | ||
| 88 | kirkwood-lschlv2.dtb \ | 100 | kirkwood-lschlv2.dtb \ |
| 89 | kirkwood-lsxhl.dtb \ | 101 | kirkwood-lsxhl.dtb \ |
| 90 | kirkwood-mplcec4.dtb \ | 102 | kirkwood-mplcec4.dtb \ |
| 91 | kirkwood-mv88f6281gtw-ge.dtb \ | 103 | kirkwood-mv88f6281gtw-ge.dtb \ |
| 92 | kirkwood-netgear_readynas_duo_v2.dtb \ | 104 | kirkwood-netgear_readynas_duo_v2.dtb \ |
| 105 | kirkwood-netgear_readynas_nv+_v2.dtb \ | ||
| 93 | kirkwood-ns2.dtb \ | 106 | kirkwood-ns2.dtb \ |
| 94 | kirkwood-ns2lite.dtb \ | 107 | kirkwood-ns2lite.dtb \ |
| 95 | kirkwood-ns2max.dtb \ | 108 | kirkwood-ns2max.dtb \ |
| @@ -104,8 +117,10 @@ dtb-$(CONFIG_ARCH_KIRKWOOD) += kirkwood-cloudbox.dtb \ · 8 unmodified lines | |||
| 104 | kirkwood-ts219-6281.dtb \ | 117 | kirkwood-ts219-6281.dtb \ |
| 105 | kirkwood-ts219-6282.dtb | 118 | kirkwood-ts219-6282.dtb |
| 106 | dtb-$(CONFIG_ARCH_MARCO) += marco-evb.dtb | 119 | dtb-$(CONFIG_ARCH_MARCO) += marco-evb.dtb |
| 120 | dtb-$(CONFIG_ARCH_MOXART) += moxart-uc7112lx.dtb | ||
| 107 | dtb-$(CONFIG_ARCH_MSM) += qcom-msm8660-surf.dtb \ | 121 | dtb-$(CONFIG_ARCH_MSM) += qcom-msm8660-surf.dtb \ |
| 108 | qcom-msm8960-cdp.dtb | 122 | qcom-msm8960-cdp.dtb \ |
| 123 | qcom-apq8074-dragonboard.dtb | ||
| 109 | dtb-$(CONFIG_ARCH_MVEBU) += armada-370-db.dtb \ | 124 | dtb-$(CONFIG_ARCH_MVEBU) += armada-370-db.dtb \ |
| 110 | armada-370-mirabox.dtb \ | 125 | armada-370-mirabox.dtb \ |
| 111 | armada-370-netgear-rn102.dtb \ | 126 | armada-370-netgear-rn102.dtb \ |
| @@ -114,6 +129,7 @@ dtb-$(CONFIG_ARCH_MVEBU) += armada-370-db.dtb \ · 2 unmodified lines | |||
| 114 | armada-xp-axpwifiap.dtb \ | 129 | armada-xp-axpwifiap.dtb \ |
| 115 | armada-xp-db.dtb \ | 130 | armada-xp-db.dtb \ |
| 116 | armada-xp-gp.dtb \ | 131 | armada-xp-gp.dtb \ |
| 132 | armada-xp-netgear-rn2120.dtb \ | ||
| 117 | armada-xp-matrix.dtb \ | 133 | armada-xp-matrix.dtb \ |
| 118 | armada-xp-openblocks-ax3-4.dtb | 134 | armada-xp-openblocks-ax3-4.dtb |
| 119 | dtb-$(CONFIG_ARCH_MXC) += \ | 135 | dtb-$(CONFIG_ARCH_MXC) += \ |
| @@ -136,10 +152,13 @@ dtb-$(CONFIG_ARCH_MXC) += \ · 16 unmodified lines | |||
| 136 | imx53-mba53.dtb \ | 152 | imx53-mba53.dtb \ |
| 137 | imx53-qsb.dtb \ | 153 | imx53-qsb.dtb \ |
| 138 | imx53-smd.dtb \ | 154 | imx53-smd.dtb \ |
| 155 | imx6dl-cubox-i.dtb \ | ||
| 156 | imx6dl-hummingboard.dtb \ | ||
| 139 | imx6dl-sabreauto.dtb \ | 157 | imx6dl-sabreauto.dtb \ |
| 140 | imx6dl-sabresd.dtb \ | 158 | imx6dl-sabresd.dtb \ |
| 141 | imx6dl-wandboard.dtb \ | 159 | imx6dl-wandboard.dtb \ |
| 142 | imx6q-arm2.dtb \ | 160 | imx6q-arm2.dtb \ |
| 161 | imx6q-cubox-i.dtb \ | ||
| 143 | imx6q-phytec-pbab01.dtb \ | 162 | imx6q-phytec-pbab01.dtb \ |
| 144 | imx6q-sabreauto.dtb \ | 163 | imx6q-sabreauto.dtb \ |
| 145 | imx6q-sabrelite.dtb \ | 164 | imx6q-sabrelite.dtb \ |
| @@ -173,12 +192,19 @@ dtb-$(CONFIG_ARCH_NSPIRE) += nspire-cx.dtb \ · 27 unmodified lines | |||
| 173 | nspire-tp.dtb \ | 192 | nspire-tp.dtb \ |
| 174 | nspire-clp.dtb | 193 | nspire-clp.dtb |
| 175 | dtb-$(CONFIG_ARCH_OMAP2PLUS) += omap2420-h4.dtb \ | 194 | dtb-$(CONFIG_ARCH_OMAP2PLUS) += omap2420-h4.dtb \ |
| 195 | omap2430-sdp.dtb \ | ||
| 196 | omap2420-n800.dtb \ | ||
| 197 | omap2420-n810.dtb \ | ||
| 198 | omap2420-n810-wimax.dtb \ | ||
| 176 | omap3430-sdp.dtb \ | 199 | omap3430-sdp.dtb \ |
| 177 | omap3-beagle.dtb \ | 200 | omap3-beagle.dtb \ |
| 201 | omap3-cm-t3730.dtb \ | ||
| 202 | omap3-sbc-t3730.dtb \ | ||
| 178 | omap3-devkit8000.dtb \ | 203 | omap3-devkit8000.dtb \ |
| 179 | omap3-beagle-xm.dtb \ | 204 | omap3-beagle-xm.dtb \ |
| 180 | omap3-evm.dtb \ | 205 | omap3-evm.dtb \ |
| 181 | omap3-evm-37xx.dtb \ | 206 | omap3-evm-37xx.dtb \ |
| 207 | omap3-ldp.dtb \ | ||
| 182 | omap3-n900.dtb \ | 208 | omap3-n900.dtb \ |
| 183 | omap3-n9.dtb \ | 209 | omap3-n9.dtb \ |
| 184 | omap3-n950.dtb \ | 210 | omap3-n950.dtb \ |
| @@ -216,8 +242,9 @@ dtb-$(CONFIG_ARCH_U8500) += ste-snowball.dtb \ · 31 unmodified lines | |||
| 216 | dtb-$(CONFIG_ARCH_S3C24XX) += s3c2416-smdk2416.dtb | 242 | dtb-$(CONFIG_ARCH_S3C24XX) += s3c2416-smdk2416.dtb |
| 217 | dtb-$(CONFIG_ARCH_S3C64XX) += s3c6410-mini6410.dtb \ | 243 | dtb-$(CONFIG_ARCH_S3C64XX) += s3c6410-mini6410.dtb \ |
| 218 | s3c6410-smdk6410.dtb | 244 | s3c6410-smdk6410.dtb |
| 219 | dtb-$(CONFIG_ARCH_SHMOBILE) += emev2-kzm9d.dtb \ | 245 | dtb-$(CONFIG_ARCH_SHMOBILE_LEGACY) += emev2-kzm9d.dtb \ |
| 220 | r7s72100-genmai.dtb \ | 246 | r7s72100-genmai.dtb \ |
| 247 | r7s72100-genmai-reference.dtb \ | ||
| 221 | r8a7740-armadillo800eva.dtb \ | 248 | r8a7740-armadillo800eva.dtb \ |
| 222 | r8a7778-bockw.dtb \ | 249 | r8a7778-bockw.dtb \ |
| 223 | r8a7778-bockw-reference.dtb \ | 250 | r8a7778-bockw-reference.dtb \ |
| @@ -226,13 +253,15 @@ dtb-$(CONFIG_ARCH_SHMOBILE) += emev2-kzm9d.dtb \ · 2 unmodified lines | |||
| 226 | r8a7779-marzen-reference.dtb \ | 253 | r8a7779-marzen-reference.dtb \ |
| 227 | r8a7791-koelsch.dtb \ | 254 | r8a7791-koelsch.dtb \ |
| 228 | r8a7790-lager.dtb \ | 255 | r8a7790-lager.dtb \ |
| 229 | r8a7790-lager-reference.dtb \ | ||
| 230 | sh73a0-kzm9g.dtb \ | 256 | sh73a0-kzm9g.dtb \ |
| 231 | sh73a0-kzm9g-reference.dtb \ | 257 | sh73a0-kzm9g-reference.dtb \ |
| 232 | r8a73a4-ape6evm.dtb \ | 258 | r8a73a4-ape6evm.dtb \ |
| 233 | r8a73a4-ape6evm-reference.dtb \ | 259 | r8a73a4-ape6evm-reference.dtb \ |
| 234 | sh7372-mackerel.dtb | 260 | sh7372-mackerel.dtb |
| 235 | dtb-$(CONFIG_ARCH_SHMOBILE_MULTI) += emev2-kzm9d.dtb | 261 | dtb-$(CONFIG_ARCH_SHMOBILE_MULTI) += emev2-kzm9d.dtb \ |
| 262 | r7s72100-genmai-reference.dtb \ | ||
| 263 | r8a7791-koelsch.dtb \ | ||
| 264 | r8a7790-lager.dtb | ||
| 236 | dtb-$(CONFIG_ARCH_SOCFPGA) += socfpga_arria5_socdk.dtb \ | 265 | dtb-$(CONFIG_ARCH_SOCFPGA) += socfpga_arria5_socdk.dtb \ |
| 237 | socfpga_cyclone5_socdk.dtb \ | 266 | socfpga_cyclone5_socdk.dtb \ |
| 238 | socfpga_cyclone5_sockit.dtb \ | 267 | socfpga_cyclone5_sockit.dtb \ |
| @@ -255,6 +284,7 @@ dtb-$(CONFIG_ARCH_SUNXI) += \ · 16 unmodified lines | |||
| 255 | sun4i-a10-hackberry.dtb \ | 284 | sun4i-a10-hackberry.dtb \ |
| 256 | sun5i-a10s-olinuxino-micro.dtb \ | 285 | sun5i-a10s-olinuxino-micro.dtb \ |
| 257 | sun5i-a13-olinuxino.dtb \ | 286 | sun5i-a13-olinuxino.dtb \ |
| 287 | sun5i-a13-olinuxino-micro.dtb \ | ||
| 258 | sun6i-a31-colombus.dtb \ | 288 | sun6i-a31-colombus.dtb \ |
| 259 | sun7i-a20-cubieboard2.dtb \ | 289 | sun7i-a20-cubieboard2.dtb \ |
| 260 | sun7i-a20-cubietruck.dtb \ | 290 | sun7i-a20-cubietruck.dtb \ |
| @@ -0,0 +1,664 @@ | |||
| 1 | /* | ||
| 2 | * Device Tree Source for AM33xx clock data | ||
| 3 | * | ||
| 4 | * Copyright (C) 2013 Texas Instruments, Inc. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | */ | ||
| 10 | &scrm_clocks { | ||
| 11 | sys_clkin_ck: sys_clkin_ck { | ||
| 12 | #clock-cells = <0>; | ||
| 13 | compatible = "ti,mux-clock"; | ||
| 14 | clocks = <&virt_19200000_ck>, <&virt_24000000_ck>, <&virt_25000000_ck>, <&virt_26000000_ck>; | ||
| 15 | ti,bit-shift = <22>; | ||
| 16 | reg = <0x0040>; | ||
| 17 | }; | ||
| 18 | |||
| 19 | adc_tsc_fck: adc_tsc_fck { | ||
| 20 | #clock-cells = <0>; | ||
| 21 | compatible = "fixed-factor-clock"; | ||
| 22 | clocks = <&sys_clkin_ck>; | ||
| 23 | clock-mult = <1>; | ||
| 24 | clock-div = <1>; | ||
| 25 | }; | ||
| 26 | |||
| 27 | dcan0_fck: dcan0_fck { | ||
| 28 | #clock-cells = <0>; | ||
| 29 | compatible = "fixed-factor-clock"; | ||
| 30 | clocks = <&sys_clkin_ck>; | ||
| 31 | clock-mult = <1>; | ||
| 32 | clock-div = <1>; | ||
| 33 | }; | ||
| 34 | |||
| 35 | dcan1_fck: dcan1_fck { | ||
| 36 | #clock-cells = <0>; | ||
| 37 | compatible = "fixed-factor-clock"; | ||
| 38 | clocks = <&sys_clkin_ck>; | ||
| 39 | clock-mult = <1>; | ||
| 40 | clock-div = <1>; | ||
| 41 | }; | ||
| 42 | |||
| 43 | mcasp0_fck: mcasp0_fck { | ||
| 44 | #clock-cells = <0>; | ||
| 45 | compatible = "fixed-factor-clock"; | ||
| 46 | clocks = <&sys_clkin_ck>; | ||
| 47 | clock-mult = <1>; | ||
| 48 | clock-div = <1>; | ||
| 49 | }; | ||
| 50 | |||
| 51 | mcasp1_fck: mcasp1_fck { | ||
| 52 | #clock-cells = <0>; | ||
| 53 | compatible = "fixed-factor-clock"; | ||
| 54 | clocks = <&sys_clkin_ck>; | ||
| 55 | clock-mult = <1>; | ||
| 56 | clock-div = <1>; | ||
| 57 | }; | ||
| 58 | |||
| 59 | smartreflex0_fck: smartreflex0_fck { | ||
| 60 | #clock-cells = <0>; | ||
| 61 | compatible = "fixed-factor-clock"; | ||
| 62 | clocks = <&sys_clkin_ck>; | ||
| 63 | clock-mult = <1>; | ||
| 64 | clock-div = <1>; | ||
| 65 | }; | ||
| 66 | |||
| 67 | smartreflex1_fck: smartreflex1_fck { | ||
| 68 | #clock-cells = <0>; | ||
| 69 | compatible = "fixed-factor-clock"; | ||
| 70 | clocks = <&sys_clkin_ck>; | ||
| 71 | clock-mult = <1>; | ||
| 72 | clock-div = <1>; | ||
| 73 | }; | ||
| 74 | |||
| 75 | sha0_fck: sha0_fck { | ||
| 76 | #clock-cells = <0>; | ||
| 77 | compatible = "fixed-factor-clock"; | ||
| 78 | clocks = <&sys_clkin_ck>; | ||
| 79 | clock-mult = <1>; | ||
| 80 | clock-div = <1>; | ||
| 81 | }; | ||
| 82 | |||
| 83 | aes0_fck: aes0_fck { | ||
| 84 | #clock-cells = <0>; | ||
| 85 | compatible = "fixed-factor-clock"; | ||
| 86 | clocks = <&sys_clkin_ck>; | ||
| 87 | clock-mult = <1>; | ||
| 88 | clock-div = <1>; | ||
| 89 | }; | ||
| 90 | |||
| 91 | rng_fck: rng_fck { | ||
| 92 | #clock-cells = <0>; | ||
| 93 | compatible = "fixed-factor-clock"; | ||
| 94 | clocks = <&sys_clkin_ck>; | ||
| 95 | clock-mult = <1>; | ||
| 96 | clock-div = <1>; | ||
| 97 | }; | ||
| 98 | |||
| 99 | ehrpwm0_gate_tbclk: ehrpwm0_gate_tbclk { | ||
| 100 | #clock-cells = <0>; | ||
| 101 | compatible = "ti,composite-no-wait-gate-clock"; | ||
| 102 | clocks = <&dpll_per_m2_ck>; | ||
| 103 | ti,bit-shift = <0>; | ||
| 104 | reg = <0x0664>; | ||
| 105 | }; | ||
| 106 | |||
| 107 | ehrpwm0_tbclk: ehrpwm0_tbclk { | ||
| 108 | #clock-cells = <0>; | ||
| 109 | compatible = "ti,composite-clock"; | ||
| 110 | clocks = <&ehrpwm0_gate_tbclk>; | ||
| 111 | }; | ||
| 112 | |||
| 113 | ehrpwm1_gate_tbclk: ehrpwm1_gate_tbclk { | ||
| 114 | #clock-cells = <0>; | ||
| 115 | compatible = "ti,composite-no-wait-gate-clock"; | ||
| 116 | clocks = <&dpll_per_m2_ck>; | ||
| 117 | ti,bit-shift = <1>; | ||
| 118 | reg = <0x0664>; | ||
| 119 | }; | ||
| 120 | |||
| 121 | ehrpwm1_tbclk: ehrpwm1_tbclk { | ||
| 122 | #clock-cells = <0>; | ||
| 123 | compatible = "ti,composite-clock"; | ||
| 124 | clocks = <&ehrpwm1_gate_tbclk>; | ||
| 125 | }; | ||
| 126 | |||
| 127 | ehrpwm2_gate_tbclk: ehrpwm2_gate_tbclk { | ||
| 128 | #clock-cells = <0>; | ||
| 129 | compatible = "ti,composite-no-wait-gate-clock"; | ||
| 130 | clocks = <&dpll_per_m2_ck>; | ||
| 131 | ti,bit-shift = <2>; | ||
| 132 | reg = <0x0664>; | ||
| 133 | }; | ||
| 134 | |||
| 135 | ehrpwm2_tbclk: ehrpwm2_tbclk { | ||
| 136 | #clock-cells = <0>; | ||
| 137 | compatible = "ti,composite-clock"; | ||
| 138 | clocks = <&ehrpwm2_gate_tbclk>; | ||
| 139 | }; | ||
| 140 | }; | ||
| 141 | &prcm_clocks { | ||
| 142 | clk_32768_ck: clk_32768_ck { | ||
| 143 | #clock-cells = <0>; | ||
| 144 | compatible = "fixed-clock"; | ||
| 145 | clock-frequency = <32768>; | ||
| 146 | }; | ||
| 147 | |||
| 148 | clk_rc32k_ck: clk_rc32k_ck { | ||
| 149 | #clock-cells = <0>; | ||
| 150 | compatible = "fixed-clock"; | ||
| 151 | clock-frequency = <32000>; | ||
| 152 | }; | ||
| 153 | |||
| 154 | virt_19200000_ck: virt_19200000_ck { | ||
| 155 | #clock-cells = <0>; | ||
| 156 | compatible = "fixed-clock"; | ||
| 157 | clock-frequency = <19200000>; | ||
| 158 | }; | ||
| 159 | |||
| 160 | virt_24000000_ck: virt_24000000_ck { | ||
| 161 | #clock-cells = <0>; | ||
| 162 | compatible = "fixed-clock"; | ||
| 163 | clock-frequency = <24000000>; | ||
| 164 | }; | ||
| 165 | |||
| 166 | virt_25000000_ck: virt_25000000_ck { | ||
| 167 | #clock-cells = <0>; | ||
| 168 | compatible = "fixed-clock"; | ||
| 169 | clock-frequency = <25000000>; | ||
| 170 | }; | ||
| 171 | |||
| 172 | virt_26000000_ck: virt_26000000_ck { | ||
| 173 | #clock-cells = <0>; | ||
| 174 | compatible = "fixed-clock"; | ||
| 175 | clock-frequency = <26000000>; | ||
| 176 | }; | ||
| 177 | |||
| 178 | tclkin_ck: tclkin_ck { | ||
| 179 | #clock-cells = <0>; | ||
| 180 | compatible = "fixed-clock"; | ||
| 181 | clock-frequency = <12000000>; | ||
| 182 | }; | ||
| 183 | |||
| 184 | dpll_core_ck: dpll_core_ck { | ||
| 185 | #clock-cells = <0>; | ||
| 186 | compatible = "ti,am3-dpll-core-clock"; | ||
| 187 | clocks = <&sys_clkin_ck>, <&sys_clkin_ck>; | ||
| 188 | reg = <0x0490>, <0x045c>, <0x0468>; | ||
| 189 | }; | ||
| 190 | |||
| 191 | dpll_core_x2_ck: dpll_core_x2_ck { | ||
| 192 | #clock-cells = <0>; | ||
| 193 | compatible = "ti,am3-dpll-x2-clock"; | ||
| 194 | clocks = <&dpll_core_ck>; | ||
| 195 | }; | ||
| 196 | |||
| 197 | dpll_core_m4_ck: dpll_core_m4_ck { | ||
| 198 | #clock-cells = <0>; | ||
| 199 | compatible = "ti,divider-clock"; | ||
| 200 | clocks = <&dpll_core_x2_ck>; | ||
| 201 | ti,max-div = <31>; | ||
| 202 | reg = <0x0480>; | ||
| 203 | ti,index-starts-at-one; | ||
| 204 | }; | ||
| 205 | |||
| 206 | dpll_core_m5_ck: dpll_core_m5_ck { | ||
| 207 | #clock-cells = <0>; | ||
| 208 | compatible = "ti,divider-clock"; | ||
| 209 | clocks = <&dpll_core_x2_ck>; | ||
| 210 | ti,max-div = <31>; | ||
| 211 | reg = <0x0484>; | ||
| 212 | ti,index-starts-at-one; | ||
| 213 | }; | ||
| 214 | |||
| 215 | dpll_core_m6_ck: dpll_core_m6_ck { | ||
| 216 | #clock-cells = <0>; | ||
| 217 | compatible = "ti,divider-clock"; | ||
| 218 | clocks = <&dpll_core_x2_ck>; | ||
| 219 | ti,max-div = <31>; | ||
| 220 | reg = <0x04d8>; | ||
| 221 | ti,index-starts-at-one; | ||
| 222 | }; | ||
| 223 | |||
| 224 | dpll_mpu_ck: dpll_mpu_ck { | ||
| 225 | #clock-cells = <0>; | ||
| 226 | compatible = "ti,am3-dpll-clock"; | ||
| 227 | clocks = <&sys_clkin_ck>, <&sys_clkin_ck>; | ||
| 228 | reg = <0x0488>, <0x0420>, <0x042c>; | ||
| 229 | }; | ||
| 230 | |||
| 231 | dpll_mpu_m2_ck: dpll_mpu_m2_ck { | ||
| 232 | #clock-cells = <0>; | ||
| 233 | compatible = "ti,divider-clock"; | ||
| 234 | clocks = <&dpll_mpu_ck>; | ||
| 235 | ti,max-div = <31>; | ||
| 236 | reg = <0x04a8>; | ||
| 237 | ti,index-starts-at-one; | ||
| 238 | }; | ||
| 239 | |||
| 240 | dpll_ddr_ck: dpll_ddr_ck { | ||
| 241 | #clock-cells = <0>; | ||
| 242 | compatible = "ti,am3-dpll-no-gate-clock"; | ||
| 243 | clocks = <&sys_clkin_ck>, <&sys_clkin_ck>; | ||
| 244 | reg = <0x0494>, <0x0434>, <0x0440>; | ||
| 245 | }; | ||
| 246 | |||
| 247 | dpll_ddr_m2_ck: dpll_ddr_m2_ck { | ||
| 248 | #clock-cells = <0>; | ||
| 249 | compatible = "ti,divider-clock"; | ||
| 250 | clocks = <&dpll_ddr_ck>; | ||
| 251 | ti,max-div = <31>; | ||
| 252 | reg = <0x04a0>; | ||
| 253 | ti,index-starts-at-one; | ||
| 254 | }; | ||
| 255 | |||
| 256 | dpll_ddr_m2_div2_ck: dpll_ddr_m2_div2_ck { | ||
| 257 | #clock-cells = <0>; | ||
| 258 | compatible = "fixed-factor-clock"; | ||
| 259 | clocks = <&dpll_ddr_m2_ck>; | ||
| 260 | clock-mult = <1>; | ||
| 261 | clock-div = <2>; | ||
| 262 | }; | ||
| 263 | |||
| 264 | dpll_disp_ck: dpll_disp_ck { | ||
| 265 | #clock-cells = <0>; | ||
| 266 | compatible = "ti,am3-dpll-no-gate-clock"; | ||
| 267 | clocks = <&sys_clkin_ck>, <&sys_clkin_ck>; | ||
| 268 | reg = <0x0498>, <0x0448>, <0x0454>; | ||
| 269 | }; | ||
| 270 | |||
| 271 | dpll_disp_m2_ck: dpll_disp_m2_ck { | ||
| 272 | #clock-cells = <0>; | ||
| 273 | compatible = "ti,divider-clock"; | ||
| 274 | clocks = <&dpll_disp_ck>; | ||
| 275 | ti,max-div = <31>; | ||
| 276 | reg = <0x04a4>; | ||
| 277 | ti,index-starts-at-one; | ||
| 278 | ti,set-rate-parent; | ||
| 279 | }; | ||
| 280 | |||
| 281 | dpll_per_ck: dpll_per_ck { | ||
| 282 | #clock-cells = <0>; | ||
| 283 | compatible = "ti,am3-dpll-no-gate-j-type-clock"; | ||
| 284 | clocks = <&sys_clkin_ck>, <&sys_clkin_ck>; | ||
| 285 | reg = <0x048c>, <0x0470>, <0x049c>; | ||
| 286 | }; | ||
| 287 | |||
| 288 | dpll_per_m2_ck: dpll_per_m2_ck { | ||
| 289 | #clock-cells = <0>; | ||
| 290 | compatible = "ti,divider-clock"; | ||
| 291 | clocks = <&dpll_per_ck>; | ||
| 292 | ti,max-div = <31>; | ||
| 293 | reg = <0x04ac>; | ||
| 294 | ti,index-starts-at-one; | ||
| 295 | }; | ||
| 296 | |||
| 297 | dpll_per_m2_div4_wkupdm_ck: dpll_per_m2_div4_wkupdm_ck { | ||
| 298 | #clock-cells = <0>; | ||
| 299 | compatible = "fixed-factor-clock"; | ||
| 300 | clocks = <&dpll_per_m2_ck>; | ||
| 301 | clock-mult = <1>; | ||
| 302 | clock-div = <4>; | ||
| 303 | }; | ||
| 304 | |||
| 305 | dpll_per_m2_div4_ck: dpll_per_m2_div4_ck { | ||
| 306 | #clock-cells = <0>; | ||
| 307 | compatible = "fixed-factor-clock"; | ||
| 308 | clocks = <&dpll_per_m2_ck>; | ||
| 309 | clock-mult = <1>; | ||
| 310 | clock-div = <4>; | ||
| 311 | }; | ||
| 312 | |||
| 313 | cefuse_fck: cefuse_fck { | ||
| 314 | #clock-cells = <0>; | ||
| 315 | compatible = "ti,gate-clock"; | ||
| 316 | clocks = <&sys_clkin_ck>; | ||
| 317 | ti,bit-shift = <1>; | ||
| 318 | reg = <0x0a20>; | ||
| 319 | }; | ||
| 320 | |||
| 321 | clk_24mhz: clk_24mhz { | ||
| 322 | #clock-cells = <0>; | ||
| 323 | compatible = "fixed-factor-clock"; | ||
| 324 | clocks = <&dpll_per_m2_ck>; | ||
| 325 | clock-mult = <1>; | ||
| 326 | clock-div = <8>; | ||
| 327 | }; | ||
| 328 | |||
| 329 | clkdiv32k_ck: clkdiv32k_ck { | ||
| 330 | #clock-cells = <0>; | ||
| 331 | compatible = "fixed-factor-clock"; | ||
| 332 | clocks = <&clk_24mhz>; | ||
| 333 | clock-mult = <1>; | ||
| 334 | clock-div = <732>; | ||
| 335 | }; | ||
| 336 | |||
| 337 | clkdiv32k_ick: clkdiv32k_ick { | ||
| 338 | #clock-cells = <0>; | ||
| 339 | compatible = "ti,gate-clock"; | ||
| 340 | clocks = <&clkdiv32k_ck>; | ||
| 341 | ti,bit-shift = <1>; | ||
| 342 | reg = <0x014c>; | ||
| 343 | }; | ||
| 344 | |||
| 345 | l3_gclk: l3_gclk { | ||
| 346 | #clock-cells = <0>; | ||
| 347 | compatible = "fixed-factor-clock"; | ||
| 348 | clocks = <&dpll_core_m4_ck>; | ||
| 349 | clock-mult = <1>; | ||
| 350 | clock-div = <1>; | ||
| 351 | }; | ||
| 352 | |||
| 353 | pruss_ocp_gclk: pruss_ocp_gclk { | ||
| 354 | #clock-cells = <0>; | ||
| 355 | compatible = "ti,mux-clock"; | ||
| 356 | clocks = <&l3_gclk>, <&dpll_disp_m2_ck>; | ||
| 357 | reg = <0x0530>; | ||
| 358 | }; | ||
| 359 | |||
| 360 | mmu_fck: mmu_fck { | ||
| 361 | #clock-cells = <0>; | ||
| 362 | compatible = "ti,gate-clock"; | ||
| 363 | clocks = <&dpll_core_m4_ck>; | ||
| 364 | ti,bit-shift = <1>; | ||
| 365 | reg = <0x0914>; | ||
| 366 | }; | ||
| 367 | |||
| 368 | timer1_fck: timer1_fck { | ||
| 369 | #clock-cells = <0>; | ||
| 370 | compatible = "ti,mux-clock"; | ||
| 371 | clocks = <&sys_clkin_ck>, <&clkdiv32k_ick>, <&tclkin_ck>, <&clk_rc32k_ck>, <&clk_32768_ck>; | ||
| 372 | reg = <0x0528>; | ||
| 373 | }; | ||
| 374 | |||
| 375 | timer2_fck: timer2_fck { | ||
| 376 | #clock-cells = <0>; | ||
| 377 | compatible = "ti,mux-clock"; | ||
| 378 | clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>; | ||
| 379 | reg = <0x0508>; | ||
| 380 | }; | ||
| 381 | |||
| 382 | timer3_fck: timer3_fck { | ||
| 383 | #clock-cells = <0>; | ||
| 384 | compatible = "ti,mux-clock"; | ||
| 385 | clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>; | ||
| 386 | reg = <0x050c>; | ||
| 387 | }; | ||
| 388 | |||
| 389 | timer4_fck: timer4_fck { | ||
| 390 | #clock-cells = <0>; | ||
| 391 | compatible = "ti,mux-clock"; | ||
| 392 | clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>; | ||
| 393 | reg = <0x0510>; | ||
| 394 | }; | ||
| 395 | |||
| 396 | timer5_fck: timer5_fck { | ||
| 397 | #clock-cells = <0>; | ||
| 398 | compatible = "ti,mux-clock"; | ||
| 399 | clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>; | ||
| 400 | reg = <0x0518>; | ||
| 401 | }; | ||
| 402 | |||
| 403 | timer6_fck: timer6_fck { | ||
| 404 | #clock-cells = <0>; | ||
| 405 | compatible = "ti,mux-clock"; | ||
| 406 | clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>; | ||
| 407 | reg = <0x051c>; | ||
| 408 | }; | ||
| 409 | |||
| 410 | timer7_fck: timer7_fck { | ||
| 411 | #clock-cells = <0>; | ||
| 412 | compatible = "ti,mux-clock"; | ||
| 413 | clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>; | ||
| 414 | reg = <0x0504>; | ||
| 415 | }; | ||
| 416 | |||
| 417 | usbotg_fck: usbotg_fck { | ||
| 418 | #clock-cells = <0>; | ||
| 419 | compatible = "ti,gate-clock"; | ||
| 420 | clocks = <&dpll_per_ck>; | ||
| 421 | ti,bit-shift = <8>; | ||
| 422 | reg = <0x047c>; | ||
| 423 | }; | ||
| 424 | |||
| 425 | dpll_core_m4_div2_ck: dpll_core_m4_div2_ck { | ||
| 426 | #clock-cells = <0>; | ||
| 427 | compatible = "fixed-factor-clock"; | ||
| 428 | clocks = <&dpll_core_m4_ck>; | ||
| 429 | clock-mult = <1>; | ||
| 430 | clock-div = <2>; | ||
| 431 | }; | ||
| 432 | |||
| 433 | ieee5000_fck: ieee5000_fck { | ||
| 434 | #clock-cells = <0>; | ||
| 435 | compatible = "ti,gate-clock"; | ||
| 436 | clocks = <&dpll_core_m4_div2_ck>; | ||
| 437 | ti,bit-shift = <1>; | ||
| 438 | reg = <0x00e4>; | ||
| 439 | }; | ||
| 440 | |||
| 441 | wdt1_fck: wdt1_fck { | ||
| 442 | #clock-cells = <0>; | ||
| 443 | compatible = "ti,mux-clock"; | ||
| 444 | clocks = <&clk_rc32k_ck>, <&clkdiv32k_ick>; | ||
| 445 | reg = <0x0538>; | ||
| 446 | }; | ||
| 447 | |||
| 448 | l4_rtc_gclk: l4_rtc_gclk { | ||
| 449 | #clock-cells = <0>; | ||
| 450 | compatible = "fixed-factor-clock"; | ||
| 451 | clocks = <&dpll_core_m4_ck>; | ||
| 452 | clock-mult = <1>; | ||
| 453 | clock-div = <2>; | ||
| 454 | }; | ||
| 455 | |||
| 456 | l4hs_gclk: l4hs_gclk { | ||
| 457 | #clock-cells = <0>; | ||
| 458 | compatible = "fixed-factor-clock"; | ||
| 459 | clocks = <&dpll_core_m4_ck>; | ||
| 460 | clock-mult = <1>; | ||
| 461 | clock-div = <1>; | ||
| 462 | }; | ||
| 463 | |||
| 464 | l3s_gclk: l3s_gclk { | ||
| 465 | #clock-cells = <0>; | ||
| 466 | compatible = "fixed-factor-clock"; | ||
| 467 | clocks = <&dpll_core_m4_div2_ck>; | ||
| 468 | clock-mult = <1>; | ||
| 469 | clock-div = <1>; | ||
| 470 | }; | ||
| 471 | |||
| 472 | l4fw_gclk: l4fw_gclk { | ||
| 473 | #clock-cells = <0>; | ||
| 474 | compatible = "fixed-factor-clock"; | ||
| 475 | clocks = <&dpll_core_m4_div2_ck>; | ||
| 476 | clock-mult = <1>; | ||
| 477 | clock-div = <1>; | ||
| 478 | }; | ||
| 479 | |||
| 480 | l4ls_gclk: l4ls_gclk { | ||
| 481 | #clock-cells = <0>; | ||
| 482 | compatible = "fixed-factor-clock"; | ||
| 483 | clocks = <&dpll_core_m4_div2_ck>; | ||
| 484 | clock-mult = <1>; | ||
| 485 | clock-div = <1>; | ||
| 486 | }; | ||
| 487 | |||
| 488 | sysclk_div_ck: sysclk_div_ck { | ||
| 489 | #clock-cells = <0>; | ||
| 490 | compatible = "fixed-factor-clock"; | ||
| 491 | clocks = <&dpll_core_m4_ck>; | ||
| 492 | clock-mult = <1>; | ||
| 493 | clock-div = <1>; | ||
| 494 | }; | ||
| 495 | |||
| 496 | cpsw_125mhz_gclk: cpsw_125mhz_gclk { | ||
| 497 | #clock-cells = <0>; | ||
| 498 | compatible = "fixed-factor-clock"; | ||
| 499 | clocks = <&dpll_core_m5_ck>; | ||
| 500 | clock-mult = <1>; | ||
| 501 | clock-div = <2>; | ||
| 502 | }; | ||
| 503 | |||
| 504 | cpsw_cpts_rft_clk: cpsw_cpts_rft_clk { | ||
| 505 | #clock-cells = <0>; | ||
| 506 | compatible = "ti,mux-clock"; | ||
| 507 | clocks = <&dpll_core_m5_ck>, <&dpll_core_m4_ck>; | ||
| 508 | reg = <0x0520>; | ||
| 509 | }; | ||
| 510 | |||
| 511 | gpio0_dbclk_mux_ck: gpio0_dbclk_mux_ck { | ||
| 512 | #clock-cells = <0>; | ||
| 513 | compatible = "ti,mux-clock"; | ||
| 514 | clocks = <&clk_rc32k_ck>, <&clk_32768_ck>, <&clkdiv32k_ick>; | ||
| 515 | reg = <0x053c>; | ||
| 516 | }; | ||
| 517 | |||
| 518 | gpio0_dbclk: gpio0_dbclk { | ||
| 519 | #clock-cells = <0>; | ||
| 520 | compatible = "ti,gate-clock"; | ||
| 521 | clocks = <&gpio0_dbclk_mux_ck>; | ||
| 522 | ti,bit-shift = <18>; | ||
| 523 | reg = <0x0408>; | ||
| 524 | }; | ||
| 525 | |||
| 526 | gpio1_dbclk: gpio1_dbclk { | ||
| 527 | #clock-cells = <0>; | ||
| 528 | compatible = "ti,gate-clock"; | ||
| 529 | clocks = <&clkdiv32k_ick>; | ||
| 530 | ti,bit-shift = <18>; | ||
| 531 | reg = <0x00ac>; | ||
| 532 | }; | ||
| 533 | |||
| 534 | gpio2_dbclk: gpio2_dbclk { | ||
| 535 | #clock-cells = <0>; | ||
| 536 | compatible = "ti,gate-clock"; | ||
| 537 | clocks = <&clkdiv32k_ick>; | ||
| 538 | ti,bit-shift = <18>; | ||
| 539 | reg = <0x00b0>; | ||
| 540 | }; | ||
| 541 | |||
| 542 | gpio3_dbclk: gpio3_dbclk { | ||
| 543 | #clock-cells = <0>; | ||
| 544 | compatible = "ti,gate-clock"; | ||
| 545 | clocks = <&clkdiv32k_ick>; | ||
| 546 | ti,bit-shift = <18>; | ||
| 547 | reg = <0x00b4>; | ||
| 548 | }; | ||
| 549 | |||
| 550 | lcd_gclk: lcd_gclk { | ||
| 551 | #clock-cells = <0>; | ||
| 552 | compatible = "ti,mux-clock"; | ||
| 553 | clocks = <&dpll_disp_m2_ck>, <&dpll_core_m5_ck>, <&dpll_per_m2_ck>; | ||
| 554 | reg = <0x0534>; | ||
| 555 | ti,set-rate-parent; | ||
| 556 | }; | ||
| 557 | |||
| 558 | mmc_clk: mmc_clk { | ||
| 559 | #clock-cells = <0>; | ||
| 560 | compatible = "fixed-factor-clock"; | ||
| 561 | clocks = <&dpll_per_m2_ck>; | ||
| 562 | clock-mult = <1>; | ||
| 563 | clock-div = <2>; | ||
| 564 | }; | ||
| 565 | |||
| 566 | gfx_fclk_clksel_ck: gfx_fclk_clksel_ck { | ||
| 567 | #clock-cells = <0>; | ||
| 568 | compatible = "ti,mux-clock"; | ||
| 569 | clocks = <&dpll_core_m4_ck>, <&dpll_per_m2_ck>; | ||
| 570 | ti,bit-shift = <1>; | ||
| 571 | reg = <0x052c>; | ||
| 572 | }; | ||
| 573 | |||
| 574 | gfx_fck_div_ck: gfx_fck_div_ck { | ||
| 575 | #clock-cells = <0>; | ||
| 576 | compatible = "ti,divider-clock"; | ||
| 577 | clocks = <&gfx_fclk_clksel_ck>; | ||
| 578 | reg = <0x052c>; | ||
| 579 | ti,max-div = <2>; | ||
| 580 | }; | ||
| 581 | |||
| 582 | sysclkout_pre_ck: sysclkout_pre_ck { | ||
| 583 | #clock-cells = <0>; | ||
| 584 | compatible = "ti,mux-clock"; | ||
| 585 | clocks = <&clk_32768_ck>, <&l3_gclk>, <&dpll_ddr_m2_ck>, <&dpll_per_m2_ck>, <&lcd_gclk>; | ||
| 586 | reg = <0x0700>; | ||
| 587 | }; | ||
| 588 | |||
| 589 | clkout2_div_ck: clkout2_div_ck { | ||
| 590 | #clock-cells = <0>; | ||
| 591 | compatible = "ti,divider-clock"; | ||
| 592 | clocks = <&sysclkout_pre_ck>; | ||
| 593 | ti,bit-shift = <3>; | ||
| 594 | ti,max-div = <8>; | ||
| 595 | reg = <0x0700>; | ||
| 596 | }; | ||
| 597 | |||
| 598 | dbg_sysclk_ck: dbg_sysclk_ck { | ||
| 599 | #clock-cells = <0>; | ||
| 600 | compatible = "ti,gate-clock"; | ||
| 601 | clocks = <&sys_clkin_ck>; | ||
| 602 | ti,bit-shift = <19>; | ||
| 603 | reg = <0x0414>; | ||
| 604 | }; | ||
| 605 | |||
| 606 | dbg_clka_ck: dbg_clka_ck { | ||
| 607 | #clock-cells = <0>; | ||
| 608 | compatible = "ti,gate-clock"; | ||
| 609 | clocks = <&dpll_core_m4_ck>; | ||
| 610 | ti,bit-shift = <30>; | ||
| 611 | reg = <0x0414>; | ||
| 612 | }; | ||
| 613 | |||
| 614 | stm_pmd_clock_mux_ck: stm_pmd_clock_mux_ck { | ||
| 615 | #clock-cells = <0>; | ||
| 616 | compatible = "ti,mux-clock"; | ||
| 617 | clocks = <&dbg_sysclk_ck>, <&dbg_clka_ck>; | ||
| 618 | ti,bit-shift = <22>; | ||
| 619 | reg = <0x0414>; | ||
| 620 | }; | ||
| 621 | |||
| 622 | trace_pmd_clk_mux_ck: trace_pmd_clk_mux_ck { | ||
| 623 | #clock-cells = <0>; | ||
| 624 | compatible = "ti,mux-clock"; | ||
| 625 | clocks = <&dbg_sysclk_ck>, <&dbg_clka_ck>; | ||
| 626 | ti,bit-shift = <20>; | ||
| 627 | reg = <0x0414>; | ||
| 628 | }; | ||
| 629 | |||
| 630 | stm_clk_div_ck: stm_clk_div_ck { | ||
| 631 | #clock-cells = <0>; | ||
| 632 | compatible = "ti,divider-clock"; | ||
| 633 | clocks = <&stm_pmd_clock_mux_ck>; | ||
| 634 | ti,bit-shift = <27>; | ||
| 635 | ti,max-div = <64>; | ||
| 636 | reg = <0x0414>; | ||
| 637 | ti,index-power-of-two; | ||
| 638 | }; | ||
| 639 | |||
| 640 | trace_clk_div_ck: trace_clk_div_ck { | ||
| 641 | #clock-cells = <0>; | ||
| 642 | compatible = "ti,divider-clock"; | ||
| 643 | clocks = <&trace_pmd_clk_mux_ck>; | ||
| 644 | ti,bit-shift = <24>; | ||
| 645 | ti,max-div = <64>; | ||
| 646 | reg = <0x0414>; | ||
| 647 | ti,index-power-of-two; | ||
| 648 | }; | ||
| 649 | |||
| 650 | clkout2_ck: clkout2_ck { | ||
| 651 | #clock-cells = <0>; | ||
| 652 | compatible = "ti,gate-clock"; | ||
| 653 | clocks = <&clkout2_div_ck>; | ||
| 654 | ti,bit-shift = <7>; | ||
| 655 | reg = <0x0700>; | ||
| 656 | }; | ||
| 657 | }; | ||
| 658 | |||
| 659 | &prcm_clockdomains { | ||
| 660 | clk_24mhz_clkdm: clk_24mhz_clkdm { | ||
| 661 | compatible = "ti,clockdomain"; | ||
| 662 | clocks = <&clkdiv32k_ick>; | ||
| 663 | }; | ||
| 664 | }; | ||
| @@ -102,6 +102,32 @@ · 101 unmodified lines | |||
| 102 | ranges; | 102 | ranges; |
| 103 | ti,hwmods = "l3_main"; | 103 | ti,hwmods = "l3_main"; |
| 104 | 104 | ||
| 105 | prcm: prcm@44e00000 { | ||
| 106 | compatible = "ti,am3-prcm"; | ||
| 107 | reg = <0x44e00000 0x4000>; | ||
| 108 | |||
| 109 | prcm_clocks: clocks { | ||
| 110 | #address-cells = <1>; | ||
| 111 | #size-cells = <0>; | ||
| 112 | }; | ||
| 113 | |||
| 114 | prcm_clockdomains: clockdomains { | ||
| 115 | }; | ||
| 116 | }; | ||
| 117 | |||
| 118 | scrm: scrm@44e10000 { | ||
| 119 | compatible = "ti,am3-scrm"; | ||
| 120 | reg = <0x44e10000 0x2000>; | ||
| 121 | |||
| 122 | scrm_clocks: clocks { | ||
| 123 | #address-cells = <1>; | ||
| 124 | #size-cells = <0>; | ||
| 125 | }; | ||
| 126 | |||
| 127 | scrm_clockdomains: clockdomains { | ||
| 128 | }; | ||
| 129 | }; | ||
| 130 | |||
| 105 | intc: interrupt-controller@48200000 { | 131 | intc: interrupt-controller@48200000 { |
| 106 | compatible = "ti,omap2-intc"; | 132 | compatible = "ti,omap2-intc"; |
| 107 | interrupt-controller; | 133 | interrupt-controller; |
| @@ -794,3 +820,5 @@ · 686 unmodified lines | |||
| 794 | }; | 820 | }; |
| 795 | }; | 821 | }; |
| 796 | }; | 822 | }; |
| 823 | |||
| 824 | /include/ "am33xx-clocks.dtsi" | ||
| @@ -17,6 +17,21 @@ · 16 unmodified lines | |||
| 17 | device_type = "memory"; | 17 | device_type = "memory"; |
| 18 | reg = <0x80000000 0x10000000>; /* 256 MB */ | 18 | reg = <0x80000000 0x10000000>; /* 256 MB */ |
| 19 | }; | 19 | }; |
| 20 | |||
| 21 | vmmc_fixed: vmmc { | ||
| 22 | compatible = "regulator-fixed"; | ||
| 23 | regulator-name = "vmmc_fixed"; | ||
| 24 | regulator-min-microvolt = <3300000>; | ||
| 25 | regulator-max-microvolt = <3300000>; | ||
| 26 | }; | ||
| 27 | }; | ||
| 28 | |||
| 29 | &davinci_emac { | ||
| 30 | status = "okay"; | ||
| 31 | }; | ||
| 32 | |||
| 33 | &davinci_mdio { | ||
| 34 | status = "okay"; | ||
| 20 | }; | 35 | }; |
| 21 | 36 | ||
| 22 | &i2c1 { | 37 | &i2c1 { |
| @@ -30,3 +45,17 @@ · 7 unmodified lines | |||
| 30 | &i2c3 { | 45 | &i2c3 { |
| 31 | clock-frequency = <400000>; | 46 | clock-frequency = <400000>; |
| 32 | }; | 47 | }; |
| 48 | |||
| 49 | &mmc1 { | ||
| 50 | vmmc-supply = <&vmmc_fixed>; | ||
| 51 | bus-width = <4>; | ||
| 52 | }; | ||
| 53 | |||
| 54 | &mmc2 { | ||
| 55 | status = "disabled"; | ||
| 56 | }; | ||
| 57 | |||
| 58 | &mmc3 { | ||
| 59 | status = "disabled"; | ||
| 60 | }; | ||
| 61 | |||
| @@ -61,3 +61,6 @@ · 60 unmodified lines | |||
| 61 | }; | 61 | }; |
| 62 | }; | 62 | }; |
| 63 | }; | 63 | }; |
| 64 | |||
| 65 | /include/ "am35xx-clocks.dtsi" | ||
| 66 | /include/ "omap36xx-am35xx-omap3430es2plus-clocks.dtsi" | ||
| @@ -0,0 +1,128 @@ | |||
| 1 | /* | ||
| 2 | * Device Tree Source for OMAP3 clock data | ||
| 3 | * | ||
| 4 | * Copyright (C) 2013 Texas Instruments, Inc. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | */ | ||
| 10 | &scrm_clocks { | ||
| 11 | emac_ick: emac_ick { | ||
| 12 | #clock-cells = <0>; | ||
| 13 | compatible = "ti,am35xx-gate-clock"; | ||
| 14 | clocks = <&ipss_ick>; | ||
| 15 | reg = <0x059c>; | ||
| 16 | ti,bit-shift = <1>; | ||
| 17 | }; | ||
| 18 | |||
| 19 | emac_fck: emac_fck { | ||
| 20 | #clock-cells = <0>; | ||
| 21 | compatible = "ti,gate-clock"; | ||
| 22 | clocks = <&rmii_ck>; | ||
| 23 | reg = <0x059c>; | ||
| 24 | ti,bit-shift = <9>; | ||
| 25 | }; | ||
| 26 | |||
| 27 | vpfe_ick: vpfe_ick { | ||
| 28 | #clock-cells = <0>; | ||
| 29 | compatible = "ti,am35xx-gate-clock"; | ||
| 30 | clocks = <&ipss_ick>; | ||
| 31 | reg = <0x059c>; | ||
| 32 | ti,bit-shift = <2>; | ||
| 33 | }; | ||
| 34 | |||
| 35 | vpfe_fck: vpfe_fck { | ||
| 36 | #clock-cells = <0>; | ||
| 37 | compatible = "ti,gate-clock"; | ||
| 38 | clocks = <&pclk_ck>; | ||
| 39 | reg = <0x059c>; | ||
| 40 | ti,bit-shift = <10>; | ||
| 41 | }; | ||
| 42 | |||
| 43 | hsotgusb_ick_am35xx: hsotgusb_ick_am35xx { | ||
| 44 | #clock-cells = <0>; | ||
| 45 | compatible = "ti,am35xx-gate-clock"; | ||
| 46 | clocks = <&ipss_ick>; | ||
| 47 | reg = <0x059c>; | ||
| 48 | ti,bit-shift = <0>; | ||
| 49 | }; | ||
| 50 | |||
| 51 | hsotgusb_fck_am35xx: hsotgusb_fck_am35xx { | ||
| 52 | #clock-cells = <0>; | ||
| 53 | compatible = "ti,gate-clock"; | ||
| 54 | clocks = <&sys_ck>; | ||
| 55 | reg = <0x059c>; | ||
| 56 | ti,bit-shift = <8>; | ||
| 57 | }; | ||
| 58 | |||
| 59 | hecc_ck: hecc_ck { | ||
| 60 | #clock-cells = <0>; | ||
| 61 | compatible = "ti,am35xx-gate-clock"; | ||
| 62 | clocks = <&sys_ck>; | ||
| 63 | reg = <0x059c>; | ||
| 64 | ti,bit-shift = <3>; | ||
| 65 | }; | ||
| 66 | }; | ||
| 67 | &cm_clocks { | ||
| 68 | ipss_ick: ipss_ick { | ||
| 69 | #clock-cells = <0>; | ||
| 70 | compatible = "ti,am35xx-interface-clock"; | ||
| 71 | clocks = <&core_l3_ick>; | ||
| 72 | reg = <0x0a10>; | ||
| 73 | ti,bit-shift = <4>; | ||
| 74 | }; | ||
| 75 | |||
| 76 | rmii_ck: rmii_ck { | ||
| 77 | #clock-cells = <0>; | ||
| 78 | compatible = "fixed-clock"; | ||
| 79 | clock-frequency = <50000000>; | ||
| 80 | }; | ||
| 81 | |||
| 82 | pclk_ck: pclk_ck { | ||
| 83 | #clock-cells = <0>; | ||
| 84 | compatible = "fixed-clock"; | ||
| 85 | clock-frequency = <27000000>; | ||
| 86 | }; | ||
| 87 | |||
| 88 | uart4_ick_am35xx: uart4_ick_am35xx { | ||
| 89 | #clock-cells = <0>; | ||
| 90 | compatible = "ti,omap3-interface-clock"; | ||
| 91 | clocks = <&core_l4_ick>; | ||
| 92 | reg = <0x0a10>; | ||
| 93 | ti,bit-shift = <23>; | ||
| 94 | }; | ||
| 95 | |||
| 96 | uart4_fck_am35xx: uart4_fck_am35xx { | ||
| 97 | #clock-cells = <0>; | ||
| 98 | compatible = "ti,wait-gate-clock"; | ||
| 99 | clocks = <&core_48m_fck>; | ||
| 100 | reg = <0x0a00>; | ||
| 101 | ti,bit-shift = <23>; | ||
| 102 | }; | ||
| 103 | }; | ||
| 104 | |||
| 105 | &cm_clockdomains { | ||
| 106 | core_l3_clkdm: core_l3_clkdm { | ||
| 107 | compatible = "ti,clockdomain"; | ||
| 108 | clocks = <&sdrc_ick>, <&ipss_ick>, <&emac_ick>, <&vpfe_ick>, | ||
| 109 | <&hsotgusb_ick_am35xx>, <&hsotgusb_fck_am35xx>, | ||
| 110 | <&hecc_ck>; | ||
| 111 | }; | ||
| 112 | |||
| 113 | core_l4_clkdm: core_l4_clkdm { | ||
| 114 | compatible = "ti,clockdomain"; | ||
| 115 | clocks = <&cpefuse_fck>, <&ts_fck>, <&usbtll_fck>, | ||
| 116 | <&usbtll_ick>, <&mmchs3_ick>, <&mmchs3_fck>, | ||
| 117 | <&mmchs2_fck>, <&mmchs1_fck>, <&i2c3_fck>, <&i2c2_fck>, | ||
| 118 | <&i2c1_fck>, <&mcspi4_fck>, <&mcspi3_fck>, | ||
| 119 | <&mcspi2_fck>, <&mcspi1_fck>, <&uart2_fck>, | ||
| 120 | <&uart1_fck>, <&hdq_fck>, <&mmchs2_ick>, <&mmchs1_ick>, | ||
| 121 | <&hdq_ick>, <&mcspi4_ick>, <&mcspi3_ick>, | ||
| 122 | <&mcspi2_ick>, <&mcspi1_ick>, <&i2c3_ick>, <&i2c2_ick>, | ||
| 123 | <&i2c1_ick>, <&uart2_ick>, <&uart1_ick>, <&gpt11_ick>, | ||
| 124 | <&gpt10_ick>, <&mcbsp5_ick>, <&mcbsp1_ick>, | ||
| 125 | <&omapctrl_ick>, <&aes2_ick>, <&sha12_ick>, | ||
| 126 | <&uart4_ick_am35xx>, <&uart4_fck_am35xx>; | ||
| 127 | }; | ||
| 128 | }; | ||
| @@ -67,6 +67,32 @@ · 66 unmodified lines | |||
| 67 | ranges; | 67 | ranges; |
| 68 | ti,hwmods = "l3_main"; | 68 | ti,hwmods = "l3_main"; |
| 69 | 69 | ||
| 70 | prcm: prcm@44df0000 { | ||
| 71 | compatible = "ti,am4-prcm"; | ||
| 72 | reg = <0x44df0000 0x11000>; | ||
| 73 | |||
| 74 | prcm_clocks: clocks { | ||
| 75 | #address-cells = <1>; | ||
| 76 | #size-cells = <0>; | ||
| 77 | }; | ||
| 78 | |||
| 79 | prcm_clockdomains: clockdomains { | ||
| 80 | }; | ||
| 81 | }; | ||
| 82 | |||
| 83 | scrm: scrm@44e10000 { | ||
| 84 | compatible = "ti,am4-scrm"; | ||
| 85 | reg = <0x44e10000 0x2000>; | ||
| 86 | |||
| 87 | scrm_clocks: clocks { | ||
| 88 | #address-cells = <1>; | ||
| 89 | #size-cells = <0>; | ||
| 90 | }; | ||
| 91 | |||
| 92 | scrm_clockdomains: clockdomains { | ||
| 93 | }; | ||
| 94 | }; | ||
| 95 | |||
| 70 | edma: edma@49000000 { | 96 | edma: edma@49000000 { |
| 71 | compatible = "ti,edma3"; | 97 | compatible = "ti,edma3"; |
| 72 | ti,hwmods = "tpcc", "tptc0", "tptc1", "tptc2"; | 98 | ti,hwmods = "tpcc", "tptc0", "tptc1", "tptc2"; |
| @@ -665,3 +691,5 @@ · 592 unmodified lines | |||
| 665 | }; | 691 | }; |
| 666 | }; | 692 | }; |
| 667 | }; | 693 | }; |
| 694 | |||
| 695 | /include/ "am43xx-clocks.dtsi" | ||
| @@ -0,0 +1,656 @@ | |||
| 1 | /* | ||
| 2 | * Device Tree Source for AM43xx clock data | ||
| 3 | * | ||
| 4 | * Copyright (C) 2013 Texas Instruments, Inc. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | */ | ||
| 10 | &scrm_clocks { | ||
| 11 | sys_clkin_ck: sys_clkin_ck { | ||
| 12 | #clock-cells = <0>; | ||
| 13 | compatible = "ti,mux-clock"; | ||
| 14 | clocks = <&virt_19200000_ck>, <&virt_24000000_ck>, <&virt_25000000_ck>, <&virt_26000000_ck>; | ||
| 15 | ti,bit-shift = <22>; | ||
| 16 | reg = <0x0040>; | ||
| 17 | }; | ||
| 18 | |||
| 19 | adc_tsc_fck: adc_tsc_fck { | ||
| 20 | #clock-cells = <0>; | ||
| 21 | compatible = "fixed-factor-clock"; | ||
| 22 | clocks = <&sys_clkin_ck>; | ||
| 23 | clock-mult = <1>; | ||
| 24 | clock-div = <1>; | ||
| 25 | }; | ||
| 26 | |||
| 27 | dcan0_fck: dcan0_fck { | ||
| 28 | #clock-cells = <0>; | ||
| 29 | compatible = "fixed-factor-clock"; | ||
| 30 | clocks = <&sys_clkin_ck>; | ||
| 31 | clock-mult = <1>; | ||
| 32 | clock-div = <1>; | ||
| 33 | }; | ||
| 34 | |||
| 35 | dcan1_fck: dcan1_fck { | ||
| 36 | #clock-cells = <0>; | ||
| 37 | compatible = "fixed-factor-clock"; | ||
| 38 | clocks = <&sys_clkin_ck>; | ||
| 39 | clock-mult = <1>; | ||
| 40 | clock-div = <1>; | ||
| 41 | }; | ||
| 42 | |||
| 43 | mcasp0_fck: mcasp0_fck { | ||
| 44 | #clock-cells = <0>; | ||
| 45 | compatible = "fixed-factor-clock"; | ||
| 46 | clocks = <&sys_clkin_ck>; | ||
| 47 | clock-mult = <1>; | ||
| 48 | clock-div = <1>; | ||
| 49 | }; | ||
| 50 | |||
| 51 | mcasp1_fck: mcasp1_fck { | ||
| 52 | #clock-cells = <0>; | ||
| 53 | compatible = "fixed-factor-clock"; | ||
| 54 | clocks = <&sys_clkin_ck>; | ||
| 55 | clock-mult = <1>; | ||
| 56 | clock-div = <1>; | ||
| 57 | }; | ||
| 58 | |||
| 59 | smartreflex0_fck: smartreflex0_fck { | ||
| 60 | #clock-cells = <0>; | ||
| 61 | compatible = "fixed-factor-clock"; | ||
| 62 | clocks = <&sys_clkin_ck>; | ||
| 63 | clock-mult = <1>; | ||
| 64 | clock-div = <1>; | ||
| 65 | }; | ||
| 66 | |||
| 67 | smartreflex1_fck: smartreflex1_fck { | ||
| 68 | #clock-cells = <0>; | ||
| 69 | compatible = "fixed-factor-clock"; | ||
| 70 | clocks = <&sys_clkin_ck>; | ||
| 71 | clock-mult = <1>; | ||
| 72 | clock-div = <1>; | ||
| 73 | }; | ||
| 74 | |||
| 75 | sha0_fck: sha0_fck { | ||
| 76 | #clock-cells = <0>; | ||
| 77 | compatible = "fixed-factor-clock"; | ||
| 78 | clocks = <&sys_clkin_ck>; | ||
| 79 | clock-mult = <1>; | ||
| 80 | clock-div = <1>; | ||
| 81 | }; | ||
| 82 | |||
| 83 | aes0_fck: aes0_fck { | ||
| 84 | #clock-cells = <0>; | ||
| 85 | compatible = "fixed-factor-clock"; | ||
| 86 | clocks = <&sys_clkin_ck>; | ||
| 87 | clock-mult = <1>; | ||
| 88 | clock-div = <1>; | ||
| 89 | }; | ||
| 90 | }; | ||
| 91 | &prcm_clocks { | ||
| 92 | clk_32768_ck: clk_32768_ck { | ||
| 93 | #clock-cells = <0>; | ||
| 94 | compatible = "fixed-clock"; | ||
| 95 | clock-frequency = <32768>; | ||
| 96 | }; | ||
| 97 | |||
| 98 | clk_rc32k_ck: clk_rc32k_ck { | ||
| 99 | #clock-cells = <0>; | ||
| 100 | compatible = "fixed-clock"; | ||
| 101 | clock-frequency = <32768>; | ||
| 102 | }; | ||
| 103 | |||
| 104 | virt_19200000_ck: virt_19200000_ck { | ||
| 105 | #clock-cells = <0>; | ||
| 106 | compatible = "fixed-clock"; | ||
| 107 | clock-frequency = <19200000>; | ||
| 108 | }; | ||
| 109 | |||
| 110 | virt_24000000_ck: virt_24000000_ck { | ||
| 111 | #clock-cells = <0>; | ||
| 112 | compatible = "fixed-clock"; | ||
| 113 | clock-frequency = <24000000>; | ||
| 114 | }; | ||
| 115 | |||
| 116 | virt_25000000_ck: virt_25000000_ck { | ||
| 117 | #clock-cells = <0>; | ||
| 118 | compatible = "fixed-clock"; | ||
| 119 | clock-frequency = <25000000>; | ||
| 120 | }; | ||
| 121 | |||
| 122 | virt_26000000_ck: virt_26000000_ck { | ||
| 123 | #clock-cells = <0>; | ||
| 124 | compatible = "fixed-clock"; | ||
| 125 | clock-frequency = <26000000>; | ||
| 126 | }; | ||
| 127 | |||
| 128 | tclkin_ck: tclkin_ck { | ||
| 129 | #clock-cells = <0>; | ||
| 130 | compatible = "fixed-clock"; | ||
| 131 | clock-frequency = <26000000>; | ||
| 132 | }; | ||
| 133 | |||
| 134 | dpll_core_ck: dpll_core_ck { | ||
| 135 | #clock-cells = <0>; | ||
| 136 | compatible = "ti,am3-dpll-core-clock"; | ||
| 137 | clocks = <&sys_clkin_ck>, <&sys_clkin_ck>; | ||
| 138 | reg = <0x2d20>, <0x2d24>, <0x2d2c>; | ||
| 139 | }; | ||
| 140 | |||
| 141 | dpll_core_x2_ck: dpll_core_x2_ck { | ||
| 142 | #clock-cells = <0>; | ||
| 143 | compatible = "ti,am3-dpll-x2-clock"; | ||
| 144 | clocks = <&dpll_core_ck>; | ||
| 145 | }; | ||
| 146 | |||
| 147 | dpll_core_m4_ck: dpll_core_m4_ck { | ||
| 148 | #clock-cells = <0>; | ||
| 149 | compatible = "ti,divider-clock"; | ||
| 150 | clocks = <&dpll_core_x2_ck>; | ||
| 151 | ti,max-div = <31>; | ||
| 152 | ti,autoidle-shift = <8>; | ||
| 153 | reg = <0x2d38>; | ||
| 154 | ti,index-starts-at-one; | ||
| 155 | ti,invert-autoidle-bit; | ||
| 156 | }; | ||
| 157 | |||
| 158 | dpll_core_m5_ck: dpll_core_m5_ck { | ||
| 159 | #clock-cells = <0>; | ||
| 160 | compatible = "ti,divider-clock"; | ||
| 161 | clocks = <&dpll_core_x2_ck>; | ||
| 162 | ti,max-div = <31>; | ||
| 163 | ti,autoidle-shift = <8>; | ||
| 164 | reg = <0x2d3c>; | ||
| 165 | ti,index-starts-at-one; | ||
| 166 | ti,invert-autoidle-bit; | ||
| 167 | }; | ||
| 168 | |||
| 169 | dpll_core_m6_ck: dpll_core_m6_ck { | ||
| 170 | #clock-cells = <0>; | ||
| 171 | compatible = "ti,divider-clock"; | ||
| 172 | clocks = <&dpll_core_x2_ck>; | ||
| 173 | ti,max-div = <31>; | ||
| 174 | ti,autoidle-shift = <8>; | ||
| 175 | reg = <0x2d40>; | ||
| 176 | ti,index-starts-at-one; | ||
| 177 | ti,invert-autoidle-bit; | ||
| 178 | }; | ||
| 179 | |||
| 180 | dpll_mpu_ck: dpll_mpu_ck { | ||
| 181 | #clock-cells = <0>; | ||
| 182 | compatible = "ti,am3-dpll-clock"; | ||
| 183 | clocks = <&sys_clkin_ck>, <&sys_clkin_ck>; | ||
| 184 | reg = <0x2d60>, <0x2d64>, <0x2d6c>; | ||
| 185 | }; | ||
| 186 | |||
| 187 | dpll_mpu_m2_ck: dpll_mpu_m2_ck { | ||
| 188 | #clock-cells = <0>; | ||
| 189 | compatible = "ti,divider-clock"; | ||
| 190 | clocks = <&dpll_mpu_ck>; | ||
| 191 | ti,max-div = <31>; | ||
| 192 | ti,autoidle-shift = <8>; | ||
| 193 | reg = <0x2d70>; | ||
| 194 | ti,index-starts-at-one; | ||
| 195 | ti,invert-autoidle-bit; | ||
| 196 | }; | ||
| 197 | |||
| 198 | dpll_ddr_ck: dpll_ddr_ck { | ||
| 199 | #clock-cells = <0>; | ||
| 200 | compatible = "ti,am3-dpll-clock"; | ||
| 201 | clocks = <&sys_clkin_ck>, <&sys_clkin_ck>; | ||
| 202 | reg = <0x2da0>, <0x2da4>, <0x2dac>; | ||
| 203 | }; | ||
| 204 | |||
| 205 | dpll_ddr_m2_ck: dpll_ddr_m2_ck { | ||
| 206 | #clock-cells = <0>; | ||
| 207 | compatible = "ti,divider-clock"; | ||
| 208 | clocks = <&dpll_ddr_ck>; | ||
| 209 | ti,max-div = <31>; | ||
| 210 | ti,autoidle-shift = <8>; | ||
| 211 | reg = <0x2db0>; | ||
| 212 | ti,index-starts-at-one; | ||
| 213 | ti,invert-autoidle-bit; | ||
| 214 | }; | ||
| 215 | |||
| 216 | dpll_disp_ck: dpll_disp_ck { | ||
| 217 | #clock-cells = <0>; | ||
| 218 | compatible = "ti,am3-dpll-clock"; | ||
| 219 | clocks = <&sys_clkin_ck>, <&sys_clkin_ck>; | ||
| 220 | reg = <0x2e20>, <0x2e24>, <0x2e2c>; | ||
| 221 | }; | ||
| 222 | |||
| 223 | dpll_disp_m2_ck: dpll_disp_m2_ck { | ||
| 224 | #clock-cells = <0>; | ||
| 225 | compatible = "ti,divider-clock"; | ||
| 226 | clocks = <&dpll_disp_ck>; | ||
| 227 | ti,max-div = <31>; | ||
| 228 | ti,autoidle-shift = <8>; | ||
| 229 | reg = <0x2e30>; | ||
| 230 | ti,index-starts-at-one; | ||
| 231 | ti,invert-autoidle-bit; | ||
| 232 | }; | ||
| 233 | |||
| 234 | dpll_per_ck: dpll_per_ck { | ||
| 235 | #clock-cells = <0>; | ||
| 236 | compatible = "ti,am3-dpll-j-type-clock"; | ||
| 237 | clocks = <&sys_clkin_ck>, <&sys_clkin_ck>; | ||
| 238 | reg = <0x2de0>, <0x2de4>, <0x2dec>; | ||
| 239 | }; | ||
| 240 | |||
| 241 | dpll_per_m2_ck: dpll_per_m2_ck { | ||
| 242 | #clock-cells = <0>; | ||
| 243 | compatible = "ti,divider-clock"; | ||
| 244 | clocks = <&dpll_per_ck>; | ||
| 245 | ti,max-div = <127>; | ||
| 246 | ti,autoidle-shift = <8>; | ||
| 247 | reg = <0x2df0>; | ||
| 248 | ti,index-starts-at-one; | ||
| 249 | ti,invert-autoidle-bit; | ||
| 250 | }; | ||
| 251 | |||
| 252 | dpll_per_m2_div4_wkupdm_ck: dpll_per_m2_div4_wkupdm_ck { | ||
| 253 | #clock-cells = <0>; | ||
| 254 | compatible = "fixed-factor-clock"; | ||
| 255 | clocks = <&dpll_per_m2_ck>; | ||
| 256 | clock-mult = <1>; | ||
| 257 | clock-div = <4>; | ||
| 258 | }; | ||
| 259 | |||
| 260 | dpll_per_m2_div4_ck: dpll_per_m2_div4_ck { | ||
| 261 | #clock-cells = <0>; | ||
| 262 | compatible = "fixed-factor-clock"; | ||
| 263 | clocks = <&dpll_per_m2_ck>; | ||
| 264 | clock-mult = <1>; | ||
| 265 | clock-div = <4>; | ||
| 266 | }; | ||
| 267 | |||
| 268 | clk_24mhz: clk_24mhz { | ||
| 269 | #clock-cells = <0>; | ||
| 270 | compatible = "fixed-factor-clock"; | ||
| 271 | clocks = <&dpll_per_m2_ck>; | ||
| 272 | clock-mult = <1>; | ||
| 273 | clock-div = <8>; | ||
| 274 | }; | ||
| 275 | |||
| 276 | clkdiv32k_ck: clkdiv32k_ck { | ||
| 277 | #clock-cells = <0>; | ||
| 278 | compatible = "fixed-factor-clock"; | ||
| 279 | clocks = <&clk_24mhz>; | ||
| 280 | clock-mult = <1>; | ||
| 281 | clock-div = <732>; | ||
| 282 | }; | ||
| 283 | |||
| 284 | clkdiv32k_ick: clkdiv32k_ick { | ||
| 285 | #clock-cells = <0>; | ||
| 286 | compatible = "ti,gate-clock"; | ||
| 287 | clocks = <&clkdiv32k_ck>; | ||
| 288 | ti,bit-shift = <8>; | ||
| 289 | reg = <0x2a38>; | ||
| 290 | }; | ||
| 291 | |||
| 292 | sysclk_div: sysclk_div { | ||
| 293 | #clock-cells = <0>; | ||
| 294 | compatible = "fixed-factor-clock"; | ||
| 295 | clocks = <&dpll_core_m4_ck>; | ||
| 296 | clock-mult = <1>; | ||
| 297 | clock-div = <1>; | ||
| 298 | }; | ||
| 299 | |||
| 300 | pruss_ocp_gclk: pruss_ocp_gclk { | ||
| 301 | #clock-cells = <0>; | ||
| 302 | compatible = "ti,mux-clock"; | ||
| 303 | clocks = <&sysclk_div>, <&dpll_disp_m2_ck>; | ||
| 304 | reg = <0x4248>; | ||
| 305 | }; | ||
| 306 | |||
| 307 | clk_32k_tpm_ck: clk_32k_tpm_ck { | ||
| 308 | #clock-cells = <0>; | ||
| 309 | compatible = "fixed-clock"; | ||
| 310 | clock-frequency = <32768>; | ||
| 311 | }; | ||
| 312 | |||
| 313 | timer1_fck: timer1_fck { | ||
| 314 | #clock-cells = <0>; | ||
| 315 | compatible = "ti,mux-clock"; | ||
| 316 | clocks = <&sys_clkin_ck>, <&clkdiv32k_ick>, <&tclkin_ck>, <&clk_rc32k_ck>, <&clk_32768_ck>, <&clk_32k_tpm_ck>; | ||
| 317 | reg = <0x4200>; | ||
| 318 | }; | ||
| 319 | |||
| 320 | timer2_fck: timer2_fck { | ||
| 321 | #clock-cells = <0>; | ||
| 322 | compatible = "ti,mux-clock"; | ||
| 323 | clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>; | ||
| 324 | reg = <0x4204>; | ||
| 325 | }; | ||
| 326 | |||
| 327 | timer3_fck: timer3_fck { | ||
| 328 | #clock-cells = <0>; | ||
| 329 | compatible = "ti,mux-clock"; | ||
| 330 | clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>; | ||
| 331 | reg = <0x4208>; | ||
| 332 | }; | ||
| 333 | |||
| 334 | timer4_fck: timer4_fck { | ||
| 335 | #clock-cells = <0>; | ||
| 336 | compatible = "ti,mux-clock"; | ||
| 337 | clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>; | ||
| 338 | reg = <0x420c>; | ||
| 339 | }; | ||
| 340 | |||
| 341 | timer5_fck: timer5_fck { | ||
| 342 | #clock-cells = <0>; | ||
| 343 | compatible = "ti,mux-clock"; | ||
| 344 | clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>; | ||
| 345 | reg = <0x4210>; | ||
| 346 | }; | ||
| 347 | |||
| 348 | timer6_fck: timer6_fck { | ||
| 349 | #clock-cells = <0>; | ||
| 350 | compatible = "ti,mux-clock"; | ||
| 351 | clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>; | ||
| 352 | reg = <0x4214>; | ||
| 353 | }; | ||
| 354 | |||
| 355 | timer7_fck: timer7_fck { | ||
| 356 | #clock-cells = <0>; | ||
| 357 | compatible = "ti,mux-clock"; | ||
| 358 | clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>; | ||
| 359 | reg = <0x4218>; | ||
| 360 | }; | ||
| 361 | |||
| 362 | wdt1_fck: wdt1_fck { | ||
| 363 | #clock-cells = <0>; | ||
| 364 | compatible = "ti,mux-clock"; | ||
| 365 | clocks = <&clk_rc32k_ck>, <&clkdiv32k_ick>; | ||
| 366 | reg = <0x422c>; | ||
| 367 | }; | ||
| 368 | |||
| 369 | l3_gclk: l3_gclk { | ||
| 370 | #clock-cells = <0>; | ||
| 371 | compatible = "fixed-factor-clock"; | ||
| 372 | clocks = <&dpll_core_m4_ck>; | ||
| 373 | clock-mult = <1>; | ||
| 374 | clock-div = <1>; | ||
| 375 | }; | ||
| 376 | |||
| 377 | dpll_core_m4_div2_ck: dpll_core_m4_div2_ck { | ||
| 378 | #clock-cells = <0>; | ||
| 379 | compatible = "fixed-factor-clock"; | ||
| 380 | clocks = <&sysclk_div>; | ||
| 381 | clock-mult = <1>; | ||
| 382 | clock-div = <2>; | ||
| 383 | }; | ||
| 384 | |||
| 385 | l4hs_gclk: l4hs_gclk { | ||
| 386 | #clock-cells = <0>; | ||
| 387 | compatible = "fixed-factor-clock"; | ||
| 388 | clocks = <&dpll_core_m4_ck>; | ||
| 389 | clock-mult = <1>; | ||
| 390 | clock-div = <1>; | ||
| 391 | }; | ||
| 392 | |||
| 393 | l3s_gclk: l3s_gclk { | ||
| 394 | #clock-cells = <0>; | ||
| 395 | compatible = "fixed-factor-clock"; | ||
| 396 | clocks = <&dpll_core_m4_div2_ck>; | ||
| 397 | clock-mult = <1>; | ||
| 398 | clock-div = <1>; | ||
| 399 | }; | ||
| 400 | |||
| 401 | l4ls_gclk: l4ls_gclk { | ||
| 402 | #clock-cells = <0>; | ||
| 403 | compatible = "fixed-factor-clock"; | ||
| 404 | clocks = <&dpll_core_m4_div2_ck>; | ||
| 405 | clock-mult = <1>; | ||
| 406 | clock-div = <1>; | ||
| 407 | }; | ||
| 408 | |||
| 409 | cpsw_125mhz_gclk: cpsw_125mhz_gclk { | ||
| 410 | #clock-cells = <0>; | ||
| 411 | compatible = "fixed-factor-clock"; | ||
| 412 | clocks = <&dpll_core_m5_ck>; | ||
| 413 | clock-mult = <1>; | ||
| 414 | clock-div = <2>; | ||
| 415 | }; | ||
| 416 | |||
| 417 | cpsw_cpts_rft_clk: cpsw_cpts_rft_clk { | ||
| 418 | #clock-cells = <0>; | ||
| 419 | compatible = "ti,mux-clock"; | ||
| 420 | clocks = <&sysclk_div>, <&dpll_core_m5_ck>, <&dpll_disp_m2_ck>; | ||
| 421 | reg = <0x4238>; | ||
| 422 | }; | ||
| 423 | |||
| 424 | clk_32k_mosc_ck: clk_32k_mosc_ck { | ||
| 425 | #clock-cells = <0>; | ||
| 426 | compatible = "fixed-clock"; | ||
| 427 | clock-frequency = <32768>; | ||
| 428 | }; | ||
| 429 | |||
| 430 | gpio0_dbclk_mux_ck: gpio0_dbclk_mux_ck { | ||
| 431 | #clock-cells = <0>; | ||
| 432 | compatible = "ti,mux-clock"; | ||
| 433 | clocks = <&clk_rc32k_ck>, <&clk_32768_ck>, <&clkdiv32k_ick>, <&clk_32k_mosc_ck>, <&clk_32k_tpm_ck>; | ||
| 434 | reg = <0x4240>; | ||
| 435 | }; | ||
| 436 | |||
| 437 | gpio0_dbclk: gpio0_dbclk { | ||
| 438 | #clock-cells = <0>; | ||
| 439 | compatible = "ti,gate-clock"; | ||
| 440 | clocks = <&gpio0_dbclk_mux_ck>; | ||
| 441 | ti,bit-shift = <8>; | ||
| 442 | reg = <0x2b68>; | ||
| 443 | }; | ||
| 444 | |||
| 445 | gpio1_dbclk: gpio1_dbclk { | ||
| 446 | #clock-cells = <0>; | ||
| 447 | compatible = "ti,gate-clock"; | ||
| 448 | clocks = <&clkdiv32k_ick>; | ||
| 449 | ti,bit-shift = <8>; | ||
| 450 | reg = <0x8c78>; | ||
| 451 | }; | ||
| 452 | |||
| 453 | gpio2_dbclk: gpio2_dbclk { | ||
| 454 | #clock-cells = <0>; | ||
| 455 | compatible = "ti,gate-clock"; | ||
| 456 | clocks = <&clkdiv32k_ick>; | ||
| 457 | ti,bit-shift = <8>; | ||
| 458 | reg = <0x8c80>; | ||
| 459 | }; | ||
| 460 | |||
| 461 | gpio3_dbclk: gpio3_dbclk { | ||
| 462 | #clock-cells = <0>; | ||
| 463 | compatible = "ti,gate-clock"; | ||
| 464 | clocks = <&clkdiv32k_ick>; | ||
| 465 | ti,bit-shift = <8>; | ||
| 466 | reg = <0x8c88>; | ||
| 467 | }; | ||
| 468 | |||
| 469 | gpio4_dbclk: gpio4_dbclk { | ||
| 470 | #clock-cells = <0>; | ||
| 471 | compatible = "ti,gate-clock"; | ||
| 472 | clocks = <&clkdiv32k_ick>; | ||
| 473 | ti,bit-shift = <8>; | ||
| 474 | reg = <0x8c90>; | ||
| 475 | }; | ||
| 476 | |||
| 477 | gpio5_dbclk: gpio5_dbclk { | ||
| 478 | #clock-cells = <0>; | ||
| 479 | compatible = "ti,gate-clock"; | ||
| 480 | clocks = <&clkdiv32k_ick>; | ||
| 481 | ti,bit-shift = <8>; | ||
| 482 | reg = <0x8c98>; | ||
| 483 | }; | ||
| 484 | |||
| 485 | mmc_clk: mmc_clk { | ||
| 486 | #clock-cells = <0>; | ||
| 487 | compatible = "fixed-factor-clock"; | ||
| 488 | clocks = <&dpll_per_m2_ck>; | ||
| 489 | clock-mult = <1>; | ||
| 490 | clock-div = <2>; | ||
| 491 | }; | ||
| 492 | |||
| 493 | gfx_fclk_clksel_ck: gfx_fclk_clksel_ck { | ||
| 494 | #clock-cells = <0>; | ||
| 495 | compatible = "ti,mux-clock"; | ||
| 496 | clocks = <&sysclk_div>, <&dpll_per_m2_ck>; | ||
| 497 | ti,bit-shift = <1>; | ||
| 498 | reg = <0x423c>; | ||
| 499 | }; | ||
| 500 | |||
| 501 | gfx_fck_div_ck: gfx_fck_div_ck { | ||
| 502 | #clock-cells = <0>; | ||
| 503 | compatible = "ti,divider-clock"; | ||
| 504 | clocks = <&gfx_fclk_clksel_ck>; | ||
| 505 | reg = <0x423c>; | ||
| 506 | ti,max-div = <2>; | ||
| 507 | }; | ||
| 508 | |||
| 509 | disp_clk: disp_clk { | ||
| 510 | #clock-cells = <0>; | ||
| 511 | compatible = "ti,mux-clock"; | ||
| 512 | clocks = <&dpll_disp_m2_ck>, <&dpll_core_m5_ck>, <&dpll_per_m2_ck>; | ||
| 513 | reg = <0x4244>; | ||
| 514 | }; | ||
| 515 | |||
| 516 | dpll_extdev_ck: dpll_extdev_ck { | ||
| 517 | #clock-cells = <0>; | ||
| 518 | compatible = "ti,am3-dpll-clock"; | ||
| 519 | clocks = <&sys_clkin_ck>, <&sys_clkin_ck>; | ||
| 520 | reg = <0x2e60>, <0x2e64>, <0x2e6c>; | ||
| 521 | }; | ||
| 522 | |||
| 523 | dpll_extdev_m2_ck: dpll_extdev_m2_ck { | ||
| 524 | #clock-cells = <0>; | ||
| 525 | compatible = "ti,divider-clock"; | ||
| 526 | clocks = <&dpll_extdev_ck>; | ||
| 527 | ti,max-div = <127>; | ||
| 528 | ti,autoidle-shift = <8>; | ||
| 529 | reg = <0x2e70>; | ||
| 530 | ti,index-starts-at-one; | ||
| 531 | ti,invert-autoidle-bit; | ||
| 532 | }; | ||
| 533 | |||
| 534 | mux_synctimer32k_ck: mux_synctimer32k_ck { | ||
| 535 | #clock-cells = <0>; | ||
| 536 | compatible = "ti,mux-clock"; | ||
| 537 | clocks = <&clk_32768_ck>, <&clk_32k_tpm_ck>, <&clkdiv32k_ick>; | ||
| 538 | reg = <0x4230>; | ||
| 539 | }; | ||
| 540 | |||
| 541 | synctimer_32kclk: synctimer_32kclk { | ||
| 542 | #clock-cells = <0>; | ||
| 543 | compatible = "ti,gate-clock"; | ||
| 544 | clocks = <&mux_synctimer32k_ck>; | ||
| 545 | ti,bit-shift = <8>; | ||
| 546 | reg = <0x2a30>; | ||
| 547 | }; | ||
| 548 | |||
| 549 | timer8_fck: timer8_fck { | ||
| 550 | #clock-cells = <0>; | ||
| 551 | compatible = "ti,mux-clock"; | ||
| 552 | clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>, <&clk_32k_tpm_ck>; | ||
| 553 | reg = <0x421c>; | ||
| 554 | }; | ||
| 555 | |||
| 556 | timer9_fck: timer9_fck { | ||
| 557 | #clock-cells = <0>; | ||
| 558 | compatible = "ti,mux-clock"; | ||
| 559 | clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>, <&clk_32k_tpm_ck>; | ||
| 560 | reg = <0x4220>; | ||
| 561 | }; | ||
| 562 | |||
| 563 | timer10_fck: timer10_fck { | ||
| 564 | #clock-cells = <0>; | ||
| 565 | compatible = "ti,mux-clock"; | ||
| 566 | clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>, <&clk_32k_tpm_ck>; | ||
| 567 | reg = <0x4224>; | ||
| 568 | }; | ||
| 569 | |||
| 570 | timer11_fck: timer11_fck { | ||
| 571 | #clock-cells = <0>; | ||
| 572 | compatible = "ti,mux-clock"; | ||
| 573 | clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>, <&clk_32k_tpm_ck>; | ||
| 574 | reg = <0x4228>; | ||
| 575 | }; | ||
| 576 | |||
| 577 | cpsw_50m_clkdiv: cpsw_50m_clkdiv { | ||
| 578 | #clock-cells = <0>; | ||
| 579 | compatible = "fixed-factor-clock"; | ||
| 580 | clocks = <&dpll_core_m5_ck>; | ||
| 581 | clock-mult = <1>; | ||
| 582 | clock-div = <1>; | ||
| 583 | }; | ||
| 584 | |||
| 585 | cpsw_5m_clkdiv: cpsw_5m_clkdiv { | ||
| 586 | #clock-cells = <0>; | ||
| 587 | compatible = "fixed-factor-clock"; | ||
| 588 | clocks = <&cpsw_50m_clkdiv>; | ||
| 589 | clock-mult = <1>; | ||
| 590 | clock-div = <10>; | ||
| 591 | }; | ||
| 592 | |||
| 593 | dpll_ddr_x2_ck: dpll_ddr_x2_ck { | ||
| 594 | #clock-cells = <0>; | ||
| 595 | compatible = "ti,am3-dpll-x2-clock"; | ||
| 596 | clocks = <&dpll_ddr_ck>; | ||
| 597 | }; | ||
| 598 | |||
| 599 | dpll_ddr_m4_ck: dpll_ddr_m4_ck { | ||
| 600 | #clock-cells = <0>; | ||
| 601 | compatible = "ti,divider-clock"; | ||
| 602 | clocks = <&dpll_ddr_x2_ck>; | ||
| 603 | ti,max-div = <31>; | ||
| 604 | ti,autoidle-shift = <8>; | ||
| 605 | reg = <0x2db8>; | ||
| 606 | ti,index-starts-at-one; | ||
| 607 | ti,invert-autoidle-bit; | ||
| 608 | }; | ||
| 609 | |||
| 610 | dpll_per_clkdcoldo: dpll_per_clkdcoldo { | ||
| 611 | #clock-cells = <0>; | ||
| 612 | compatible = "fixed-factor-clock"; | ||
| 613 | clocks = <&dpll_per_ck>; | ||
| 614 | clock-mult = <1>; | ||
| 615 | clock-div = <1>; | ||
| 616 | }; | ||
| 617 | |||
| 618 | dll_aging_clk_div: dll_aging_clk_div { | ||
| 619 | #clock-cells = <0>; | ||
| 620 | compatible = "ti,divider-clock"; | ||
| 621 | clocks = <&sys_clkin_ck>; | ||
| 622 | reg = <0x4250>; | ||
| 623 | ti,dividers = <8>, <16>, <32>; | ||
| 624 | }; | ||
| 625 | |||
| 626 | div_core_25m_ck: div_core_25m_ck { | ||
| 627 | #clock-cells = <0>; | ||
| 628 | compatible = "fixed-factor-clock"; | ||
| 629 | clocks = <&sysclk_div>; | ||
| 630 | clock-mult = <1>; | ||
| 631 | clock-div = <8>; | ||
| 632 | }; | ||
| 633 | |||
| 634 | func_12m_clk: func_12m_clk { | ||
| 635 | #clock-cells = <0>; | ||
| 636 | compatible = "fixed-factor-clock"; | ||
| 637 | clocks = <&dpll_per_m2_ck>; | ||
| 638 | clock-mult = <1>; | ||
| 639 | clock-div = <16>; | ||
| 640 | }; | ||
| 641 | |||
| 642 | vtp_clk_div: vtp_clk_div { | ||
| 643 | #clock-cells = <0>; | ||
| 644 | compatible = "fixed-factor-clock"; | ||
| 645 | clocks = <&sys_clkin_ck>; | ||
| 646 | clock-mult = <1>; | ||
| 647 | clock-div = <2>; | ||
| 648 | }; | ||
| 649 | |||
| 650 | usbphy_32khz_clkmux: usbphy_32khz_clkmux { | ||
| 651 | #clock-cells = <0>; | ||
| 652 | compatible = "ti,mux-clock"; | ||
| 653 | clocks = <&clk_32768_ck>, <&clk_32k_tpm_ck>; | ||
| 654 | reg = <0x4260>; | ||
| 655 | }; | ||
| 656 | }; | ||
| @@ -90,34 +90,19 @@ · 89 unmodified lines | |||
| 90 | nand-on-flash-bbt; | 90 | nand-on-flash-bbt; |
| 91 | status = "okay"; | 91 | status = "okay"; |
| 92 | 92 | ||
| 93 | at91bootstrap@0 { | 93 | barebox@0 { |
| 94 | label = "at91bootstrap"; | ||
| 95 | reg = <0x0 0x8000>; | ||
| 96 | }; | ||
| 97 | |||
| 98 | barebox@8000 { | ||
| 99 | label = "barebox"; | 94 | label = "barebox"; |
| 100 | reg = <0x8000 0x40000>; | 95 | reg = <0x0 0x58000>; |
| 101 | }; | ||
| 102 | |||
| 103 | bareboxenv@48000 { | ||
| 104 | label = "bareboxenv"; | ||
| 105 | reg = <0x48000 0x8000>; | ||
| 106 | }; | ||
| 107 | |||
| 108 | user_block@0x50000 { | ||
| 109 | label = "user_block"; | ||
| 110 | reg = <0x50000 0xb0000>; | ||
| 111 | }; | 96 | }; |
| 112 | 97 | ||
| 113 | kernel@100000 { | 98 | u_boot_env@58000 { |
| 114 | label = "kernel"; | 99 | label = "u_boot_env"; |
| 115 | reg = <0x100000 0x1b0000>; | 100 | reg = <0x58000 0x8000>; |
| 116 | }; | 101 | }; |
| 117 | 102 | ||
| 118 | root@2b0000 { | 103 | ubi@60000 { |
| 119 | label = "root"; | 104 | label = "ubi"; |
| 120 | reg = <0x2b0000 0x1D50000>; | 105 | reg = <0x60000 0x1FA0000>; |
| 121 | }; | 106 | }; |
| 122 | }; | 107 | }; |
| 123 | 108 | ||
| @@ -74,13 +74,13 @@ · 73 unmodified lines | |||
| 74 | green_pwr_led { | 74 | green_pwr_led { |
| 75 | label = "mirabox:green:pwr"; | 75 | label = "mirabox:green:pwr"; |
| 76 | gpios = <&gpio1 31 1>; | 76 | gpios = <&gpio1 31 1>; |
| 77 | linux,default-trigger = "heartbeat"; | 77 | default-state = "keep"; |
| 78 | }; | 78 | }; |
| 79 | 79 | ||
| 80 | blue_stat_led { | 80 | blue_stat_led { |
| 81 | label = "mirabox:blue:stat"; | 81 | label = "mirabox:blue:stat"; |
| 82 | gpios = <&gpio2 0 1>; | 82 | gpios = <&gpio2 0 1>; |
| 83 | linux,default-trigger = "cpu0"; | 83 | default-state = "off"; |
| 84 | }; | 84 | }; |
| 85 | 85 | ||
| 86 | green_stat_led { | 86 | green_stat_led { |
| @@ -139,6 +139,27 @@ · 52 unmodified lines | |||
| 139 | reg = <0x25>; | 139 | reg = <0x25>; |
| 140 | }; | 140 | }; |
| 141 | }; | 141 | }; |
| 142 | |||
| 143 | nand@d0000 { | ||
| 144 | status = "okay"; | ||
| 145 | num-cs = <1>; | ||
| 146 | marvell,nand-keep-config; | ||
| 147 | marvell,nand-enable-arbiter; | ||
| 148 | nand-on-flash-bbt; | ||
| 149 | |||
| 150 | partition@0 { | ||
| 151 | label = "U-Boot"; | ||
| 152 | reg = <0 0x400000>; | ||
| 153 | }; | ||
| 154 | partition@400000 { | ||
| 155 | label = "Linux"; | ||
| 156 | reg = <0x400000 0x400000>; | ||
| 157 | }; | ||
| 158 | partition@800000 { | ||
| 159 | label = "Filesystem"; | ||
| 160 | reg = <0x800000 0x3f800000>; | ||
| 161 | }; | ||
| 162 | }; | ||
| 142 | }; | 163 | }; |
| 143 | }; | 164 | }; |
| 144 | }; | 165 | }; |
| @@ -11,6 +11,8 @@ · 10 unmodified lines | |||
| 11 | 11 | ||
| 12 | /dts-v1/; | 12 | /dts-v1/; |
| 13 | 13 | ||
| 14 | #include <dt-bindings/input/input.h> | ||
| 15 | #include <dt-bindings/gpio/gpio.h> | ||
| 14 | #include "armada-370.dtsi" | 16 | #include "armada-370.dtsi" |
| 15 | 17 | ||
| 16 | / { | 18 | / { |
| @@ -62,6 +64,7 @@ · 45 unmodified lines | |||
| 62 | marvell,pins = "mpp57"; | 64 | marvell,pins = "mpp57"; |
| 63 | marvell,function = "gpio"; | 65 | marvell,function = "gpio"; |
| 64 | }; | 66 | }; |
| 67 | |||
| 65 | sata1_led_pin: sata1-led-pin { | 68 | sata1_led_pin: sata1-led-pin { |
| 66 | marvell,pins = "mpp15"; | 69 | marvell,pins = "mpp15"; |
| 67 | marvell,function = "gpio"; | 70 | marvell,function = "gpio"; |
| @@ -77,6 +80,21 @@ · 9 unmodified lines | |||
| 77 | marvell,function = "gpio"; | 80 | marvell,function = "gpio"; |
| 78 | }; | 81 | }; |
| 79 | 82 | ||
| 83 | backup_button_pin: backup-button-pin { | ||
| 84 | marvell,pins = "mpp58"; | ||
| 85 | marvell,function = "gpio"; | ||
| 86 | }; | ||
| 87 | |||
| 88 | power_button_pin: power-button-pin { | ||
| 89 | marvell,pins = "mpp62"; | ||
| 90 | marvell,function = "gpio"; | ||
| 91 | }; | ||
| 92 | |||
| 93 | reset_button_pin: reset-button-pin { | ||
| 94 | marvell,pins = "mpp6"; | ||
| 95 | marvell,function = "gpio"; | ||
| 96 | }; | ||
| 97 | |||
| 80 | poweroff: poweroff { | 98 | poweroff: poweroff { |
| 81 | marvell,pins = "mpp8"; | 99 | marvell,pins = "mpp8"; |
| 82 | marvell,function = "gpio"; | 100 | marvell,function = "gpio"; |
| @@ -84,7 +102,7 @@ · 1 unmodified line | |||
| 84 | }; | 102 | }; |
| 85 | 103 | ||
| 86 | mdio { | 104 | mdio { |
| 87 | phy0: ethernet-phy@0 { | 105 | phy0: ethernet-phy@0 { /* Marvell 88E1318 */ |
| 88 | reg = <0>; | 106 | reg = <0>; |
| 89 | }; | 107 | }; |
| 90 | }; | 108 | }; |
| @@ -104,6 +122,11 @@ · 13 unmodified lines | |||
| 104 | clock-frequency = <100000>; | 122 | clock-frequency = <100000>; |
| 105 | status = "okay"; | 123 | status = "okay"; |
| 106 | 124 | ||
| 125 | isl12057: isl12057@68 { | ||
| 126 | compatible = "isl,isl12057"; | ||
| 127 | reg = <0x68>; | ||
| 128 | }; | ||
| 129 | |||
| 107 | g762: g762@3e { | 130 | g762: g762@3e { |
| 108 | compatible = "gmt,g762"; | 131 | compatible = "gmt,g762"; |
| 109 | reg = <0x3e>; | 132 | reg = <0x3e>; |
| @@ -113,82 +136,116 @@ · 3 unmodified lines | |||
| 113 | pwm_polarity = <0>; | 136 | pwm_polarity = <0>; |
| 114 | }; | 137 | }; |
| 115 | }; | 138 | }; |
| 139 | |||
| 140 | nand@d0000 { | ||
| 141 | status = "okay"; | ||
| 142 | num-cs = <1>; | ||
| 143 | marvell,nand-keep-config; | ||
| 144 | marvell,nand-enable-arbiter; | ||
| 145 | nand-on-flash-bbt; | ||
| 146 | |||
| 147 | partition@0 { | ||
| 148 | label = "u-boot"; | ||
| 149 | reg = <0x0000000 0x180000>; /* 1.5MB */ | ||
| 150 | read-only; | ||
| 151 | }; | ||
| 152 | |||
| 153 | partition@180000 { | ||
| 154 | label = "u-boot-env"; | ||
| 155 | reg = <0x180000 0x20000>; /* 128KB */ | ||
| 156 | read-only; | ||
| 157 | }; | ||
| 158 | |||
| 159 | partition@200000 { | ||
| 160 | label = "uImage"; | ||
| 161 | reg = <0x0200000 0x600000>; /* 6MB */ | ||
| 162 | }; | ||
| 163 | |||
| 164 | partition@800000 { | ||
| 165 | label = "minirootfs"; | ||
| 166 | reg = <0x0800000 0x400000>; /* 4MB */ | ||
| 167 | }; | ||
| 168 | |||
| 169 | /* Last MB is for the BBT, i.e. not writable */ | ||
| 170 | partition@c00000 { | ||
| 171 | label = "ubifs"; | ||
| 172 | reg = <0x0c00000 0x7400000>; /* 116MB */ | ||
| 173 | }; | ||
| 174 | }; | ||
| 116 | }; | 175 | }; |
| 117 | }; | 176 | }; |
| 118 | 177 | ||
| 119 | clocks { | 178 | clocks { |
| 120 | #address-cells = <1>; | 179 | g762_clk: g762-oscillator { |
| 121 | #size-cells = <0>; | ||
| 122 | |||
| 123 | g762_clk: fixedclk { | ||
| 124 | compatible = "fixed-clock"; | 180 | compatible = "fixed-clock"; |
| 125 | #clock-cells = <0>; | 181 | #clock-cells = <0>; |
| 126 | clock-frequency = <8192>; | 182 | clock-frequency = <8192>; |
| 127 | }; | 183 | }; |
| 128 | }; | 184 | }; |
| 129 | 185 | ||
| 130 | gpio_leds { | 186 | gpio-leds { |
| 131 | compatible = "gpio-leds"; | 187 | compatible = "gpio-leds"; |
| 132 | pinctrl-0 = < &power_led_pin | 188 | pinctrl-0 = <&power_led_pin |
| 133 | &sata1_led_pin | 189 | &sata1_led_pin |
| 134 | &sata2_led_pin | 190 | &sata2_led_pin |
| 135 | &backup_led_pin >; | 191 | &backup_led_pin>; |
| 136 | pinctrl-names = "default"; | 192 | pinctrl-names = "default"; |
| 137 | 193 | ||
| 138 | blue_power_led { | 194 | blue-power-led { |
| 139 | label = "rn102:blue:pwr"; | 195 | label = "rn102:blue:pwr"; |
| 140 | gpios = <&gpio1 25 1>; /* GPIO 57 Active Low */ | 196 | gpios = <&gpio1 25 GPIO_ACTIVE_LOW>; |
| 141 | linux,default-trigger = "heartbeat"; | 197 | default-state = "keep"; |
| 142 | }; | 198 | }; |
| 143 | 199 | ||
| 144 | green_sata1_led { | 200 | green-sata1-led { |
| 145 | label = "rn102:green:sata1"; | 201 | label = "rn102:green:sata1"; |
| 146 | gpios = <&gpio0 15 1>; /* GPIO 15 Active Low */ | 202 | gpios = <&gpio0 15 GPIO_ACTIVE_LOW>; |
| 147 | default-state = "on"; | 203 | default-state = "on"; |
| 148 | }; | 204 | }; |
| 149 | 205 | ||
| 150 | green_sata2_led { | 206 | green-sata2-led { |
| 151 | label = "rn102:green:sata2"; | 207 | label = "rn102:green:sata2"; |
| 152 | gpios = <&gpio0 14 1>; /* GPIO 14 Active Low */ | 208 | gpios = <&gpio0 14 GPIO_ACTIVE_LOW>; |
| 153 | default-state = "on"; | 209 | default-state = "on"; |
| 154 | }; | 210 | }; |
| 155 | 211 | ||
| 156 | green_backup_led { | 212 | green-backup-led { |
| 157 | label = "rn102:green:backup"; | 213 | label = "rn102:green:backup"; |
| 158 | gpios = <&gpio1 24 1>; /* GPIO 56 Active Low */ | 214 | gpios = <&gpio1 24 GPIO_ACTIVE_LOW>; |
| 159 | default-state = "on"; | 215 | default-state = "on"; |
| 160 | }; | 216 | }; |
| 161 | }; | 217 | }; |
| 162 | 218 | ||
| 163 | gpio_keys { | 219 | gpio-keys { |
| 164 | compatible = "gpio-keys"; | 220 | compatible = "gpio-keys"; |
| 165 | #address-cells = <1>; | 221 | pinctrl-0 = <&power_button_pin |
| 166 | #size-cells = <0>; | 222 | &reset_button_pin |
| 223 | &backup_button_pin>; | ||
| 224 | pinctrl-names = "default"; | ||
| 167 | 225 | ||
| 168 | button@1 { | 226 | power-button { |
| 169 | label = "Power Button"; | 227 | label = "Power Button"; |
| 170 | linux,code = <116>; /* KEY_POWER */ | 228 | linux,code = <KEY_POWER>; |
| 171 | gpios = <&gpio1 30 0>; | 229 | gpios = <&gpio1 30 GPIO_ACTIVE_HIGH>; |
| 172 | }; | 230 | }; |
| 173 | 231 | ||
| 174 | button@2 { | 232 | reset-button { |
| 175 | label = "Reset Button"; | 233 | label = "Reset Button"; |
| 176 | linux,code = <0x198>; /* KEY_RESTART */ | 234 | linux,code = <KEY_RESTART>; |
| 177 | gpios = <&gpio0 6 1>; | 235 | gpios = <&gpio0 6 GPIO_ACTIVE_LOW>; |
| 178 | }; | 236 | }; |
| 179 | 237 | ||
| 180 | button@3 { | 238 | backup-button { |
| 181 | label = "Backup Button"; | 239 | label = "Backup Button"; |
| 182 | linux,code = <133>; /* KEY_COPY */ | 240 | linux,code = <KEY_COPY>; |
| 183 | gpios = <&gpio1 26 1>; | 241 | gpios = <&gpio1 26 GPIO_ACTIVE_LOW>; |
| 184 | }; | 242 | }; |
| 185 | }; | 243 | }; |
| 186 | 244 | ||
| 187 | gpio_poweroff { | 245 | gpio-poweroff { |
| 188 | compatible = "gpio-poweroff"; | 246 | compatible = "gpio-poweroff"; |
| 189 | pinctrl-0 = <&poweroff>; | 247 | pinctrl-0 = <&poweroff>; |
| 190 | pinctrl-names = "default"; | 248 | pinctrl-names = "default"; |
| 191 | gpios = <&gpio0 8 1>; | 249 | gpios = <&gpio0 8 GPIO_ACTIVE_LOW>; |
| 192 | }; | 250 | }; |
| 193 | |||
| 194 | }; | 251 | }; |
| @@ -11,6 +11,8 @@ · 10 unmodified lines | |||
| 11 | 11 | ||
| 12 | /dts-v1/; | 12 | /dts-v1/; |
| 13 | 13 | ||
| 14 | #include <dt-bindings/input/input.h> | ||
| 15 | #include <dt-bindings/gpio/gpio.h> | ||
| 14 | #include "armada-370.dtsi" | 16 | #include "armada-370.dtsi" |
| 15 | 17 | ||
| 16 | / { | 18 | / { |
| @@ -58,12 +60,12 @@ · 41 unmodified lines | |||
| 58 | marvell,function = "gpio"; | 60 | marvell,function = "gpio"; |
| 59 | }; | 61 | }; |
| 60 | 62 | ||
| 61 | backup_key_pin: backup-key-pin { | 63 | backup_button_pin: backup-button-pin { |
| 62 | marvell,pins = "mpp52"; | 64 | marvell,pins = "mpp52"; |
| 63 | marvell,function = "gpio"; | 65 | marvell,function = "gpio"; |
| 64 | }; | 66 | }; |
| 65 | 67 | ||
| 66 | power_key_pin: power-key-pin { | 68 | power_button_pin: power-button-pin { |
| 67 | marvell,pins = "mpp62"; | 69 | marvell,pins = "mpp62"; |
| 68 | marvell,function = "gpio"; | 70 | marvell,function = "gpio"; |
| 69 | }; | 71 | }; |
| @@ -78,18 +80,18 @@ · 8 unmodified lines | |||
| 78 | marvell,function = "gpio"; | 80 | marvell,function = "gpio"; |
| 79 | }; | 81 | }; |
| 80 | 82 | ||
| 81 | reset_key_pin: reset-key-pin { | 83 | reset_button_pin: reset-button-pin { |
| 82 | marvell,pins = "mpp65"; | 84 | marvell,pins = "mpp65"; |
| 83 | marvell,function = "gpio"; | 85 | marvell,function = "gpio"; |
| 84 | }; | 86 | }; |
| 85 | }; | 87 | }; |
| 86 | 88 | ||
| 87 | mdio { | 89 | mdio { |
| 88 | phy0: ethernet-phy@0 { | 90 | phy0: ethernet-phy@0 { /* Marvell 88E1318 */ |
| 89 | reg = <0>; | 91 | reg = <0>; |
| 90 | }; | 92 | }; |
| 91 | 93 | ||
| 92 | phy1: ethernet-phy@1 { | 94 | phy1: ethernet-phy@1 { /* Marvell 88E1318 */ |
| 93 | reg = <1>; | 95 | reg = <1>; |
| 94 | }; | 96 | }; |
| 95 | }; | 97 | }; |
| @@ -115,6 +117,11 @@ · 19 unmodified lines | |||
| 115 | clock-frequency = <100000>; | 117 | clock-frequency = <100000>; |
| 116 | status = "okay"; | 118 | status = "okay"; |
| 117 | 119 | ||
| 120 | isl12057: isl12057@68 { | ||
| 121 | compatible = "isl,isl12057"; | ||
| 122 | reg = <0x68>; | ||
| 123 | }; | ||
| 124 | |||
| 118 | g762: g762@3e { | 125 | g762: g762@3e { |
| 119 | compatible = "gmt,g762"; | 126 | compatible = "gmt,g762"; |
| 120 | reg = <0x3e>; | 127 | reg = <0x3e>; |
| @@ -123,71 +130,133 @@ · 2 unmodified lines | |||
| 123 | fan_startv = <1>; | 130 | fan_startv = <1>; |
| 124 | pwm_polarity = <0>; | 131 | pwm_polarity = <0>; |
| 125 | }; | 132 | }; |
| 133 | |||
| 134 | pca9554: pca9554@23 { | ||
| 135 | compatible = "nxp,pca9554"; | ||
153 more lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 221 lines aren’t shown here.
This diff is large: its 110 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 328 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 146 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 123 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 186 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 79 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 148 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 238 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 228 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 211 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 540 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 2016 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 173 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 188 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 94 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 144 lines aren’t shown here.
This diff is large: its 131 lines aren’t shown here.
This diff is large: its 172 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 212 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 424 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 650 lines aren’t shown here.
This diff is large: its 566 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 168 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 144 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 108 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 176 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 196 lines aren’t shown here.
This diff is large: its 269 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 79 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 239 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 118 lines aren’t shown here.
This diff is large: its 149 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 100 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 105 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 232 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 209 lines aren’t shown here.
This diff is large: its 269 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 243 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 199 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 1661 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 1652 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 1400 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 148 lines aren’t shown here.
This diff is large: its 111 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 98 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 332 lines aren’t shown here.
This diff is large: its 148 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 249 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 241 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 229 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 556 lines aren’t shown here.
This diff is large: its 116 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 491 lines aren’t shown here.
This diff is large: its 678 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 167 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 290 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 746 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 112 lines aren’t shown here.
This diff is large: its 157 lines aren’t shown here.
This diff is large: its 104 lines aren’t shown here.
This diff is large: its 267 lines aren’t shown here.
This diff is large: its 119 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 317 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 208 lines aren’t shown here.
This diff is large: its 171 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 160 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 286 lines aren’t shown here.
This diff is large: its 1132 lines aren’t shown here.
This diff is large: its 594 lines aren’t shown here.
This diff is large: its 1089 lines aren’t shown here.
This diff is large: its 484 lines aren’t shown here.
This diff is large: its 431 lines aren’t shown here.
This diff is large: its 446 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 159 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 469 lines aren’t shown here.
This diff is large: its 135 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 156 lines aren’t shown here.
This diff is large: its 158 lines aren’t shown here.
This diff is large: its 177 lines aren’t shown here.
This diff is large: its 571 lines aren’t shown here.
This diff is large: its 265 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 225 lines aren’t shown here.
This diff is large: its 682 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 150 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 110 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 94 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 2 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 137 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 160 lines aren’t shown here.
This diff is large: its 134 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 146 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 267 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 368 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 2 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 2 lines aren’t shown here.
This diff is large: its 4 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 4 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 153 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 373 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 116 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 201 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 124 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 883 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 109 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 150 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 4 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 127 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 120 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 274 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 366 lines aren’t shown here.
This diff is large: its 355 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 1065 lines aren’t shown here.
This diff is large: its 1736 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 147 lines aren’t shown here.
This diff is large: its 257 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 128 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 158 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 691 lines aren’t shown here.
This diff is large: its 283 lines aren’t shown here.
This diff is large: its 794 lines aren’t shown here.
This diff is large: its 371 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 317 lines aren’t shown here.
This diff is large: its 578 lines aren’t shown here.
This diff is large: its 339 lines aren’t shown here.
This diff is large: its 281 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 218 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 84 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 763 lines aren’t shown here.
This diff is large: its 162 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 245 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 170 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 106 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 187 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 216 lines aren’t shown here.
This diff is large: its 93 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 223 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 81 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 150 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 196 lines aren’t shown here.
This diff is large: its 106 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 217 lines aren’t shown here.
This diff is large: its 212 lines aren’t shown here.
This diff is large: its 207 lines aren’t shown here.
This diff is large: its 181 lines aren’t shown here.
This diff is large: its 223 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 168 lines aren’t shown here.
This diff is large: its 271 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 3 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 125 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 311 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 98 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 845 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 79 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 106 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 346 lines aren’t shown here.
This diff is large: its 140 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 230 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 124 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 141 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 109 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 141 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 277 lines aren’t shown here.
This diff is large: its 305 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 310 lines aren’t shown here.
This diff is large: its 153 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 159 lines aren’t shown here.
This diff is large: its 185 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 141 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 79 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 76 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 502 lines aren’t shown here.
This diff is large: its 434 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 237 lines aren’t shown here.
This diff is large: its 111 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 2 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 100 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 462 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 113 lines aren’t shown here.
This diff is large: its 532 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 543 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 156 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 175 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 667 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 189 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 153 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 144 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 127 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 153 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 144 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 151 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 121 lines aren’t shown here.
This diff is large: its 180 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 118 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 116 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 149 lines aren’t shown here.
This diff is large: its 429 lines aren’t shown here.
This diff is large: its 111 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 431 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 129 lines aren’t shown here.
This diff is large: its 181 lines aren’t shown here.
This diff is large: its 524 lines aren’t shown here.
This diff is large: its 1345 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 207 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 93 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 275 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 115 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 135 lines aren’t shown here.
This diff is large: its 148 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 122 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 135 lines aren’t shown here.
This diff is large: its 166 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 495 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 185 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 354 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 105 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 354 lines aren’t shown here.
This diff is large: its 157 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 186 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 281 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 189 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 145 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 148 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 198 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 176 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 111 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 121 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 142 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 259 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 279 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 328 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 338 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 353 lines aren’t shown here.
This diff is large: its 285 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 291 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 79 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 452 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 128 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 113 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 543 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 97 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 1667 lines aren’t shown here.
This diff is large: its 479 lines aren’t shown here.
This diff is large: its 286 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 121 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 128 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 200 lines aren’t shown here.
This diff is large: its 449 lines aren’t shown here.
This diff is large: its 119 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 196 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 196 lines aren’t shown here.
This diff is large: its 224 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 1222 lines aren’t shown here.
This diff is large: its 755 lines aren’t shown here.
This diff is large: its 198 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 148 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 222 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 321 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 147 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 327 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 276 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 314 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 142 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 149 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 211 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 193 lines aren’t shown here.
This diff is large: its 105 lines aren’t shown here.
This diff is large: its 97 lines aren’t shown here.
This diff is large: its 233 lines aren’t shown here.
This diff is large: its 233 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 123 lines aren’t shown here.
This diff is large: its 97 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 79 lines aren’t shown here.
This diff is large: its 157 lines aren’t shown here.
This diff is large: its 157 lines aren’t shown here.
This diff is large: its 157 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 76 lines aren’t shown here.
This diff is large: its 241 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 151 lines aren’t shown here.
This diff is large: its 189 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 2812 lines aren’t shown here.
This diff is large: its 186 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 694 lines aren’t shown here.
This diff is large: its 318 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 134 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 196 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 295 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 94 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 104 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 148 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 172 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 243 lines aren’t shown here.
This diff is large: its 294 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 255 lines aren’t shown here.
This diff is large: its 593 lines aren’t shown here.
This diff is large: its 115 lines aren’t shown here.
This diff is large: its 109 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 100 lines aren’t shown here.
This diff is large: its 589 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 195 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 179 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 221 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 145 lines aren’t shown here.
This diff is large: its 316 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 285 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 423 lines aren’t shown here.
This diff is large: its 309 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 142 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 79 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 121 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 233 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 181 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 100 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 928 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 110 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 272 lines aren’t shown here.
This diff is large: its 168 lines aren’t shown here.
This diff is large: its 356 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 136 lines aren’t shown here.
This diff is large: its 184 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 383 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 246 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 181 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 294 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 133 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 370 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 202 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 317 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 727 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 138 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
File renamed without changes.
This diff is large: its 400 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 238 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 99 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 193 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 260 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 591 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 149 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 214 lines aren’t shown here.
This diff is large: its 678 lines aren’t shown here.
This diff is large: its 319 lines aren’t shown here.
This diff is large: its 154 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 97 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 561 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 188 lines aren’t shown here.
This diff is large: its 271 lines aren’t shown here.
This diff is large: its 411 lines aren’t shown here.
This diff is large: its 532 lines aren’t shown here.
This diff is large: its 136 lines aren’t shown here.
This diff is large: its 367 lines aren’t shown here.
This diff is large: its 172 lines aren’t shown here.
This diff is large: its 136 lines aren’t shown here.
This diff is large: its 399 lines aren’t shown here.
This diff is large: its 160 lines aren’t shown here.
This diff is large: its 396 lines aren’t shown here.
This diff is large: its 115 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 166 lines aren’t shown here.
This diff is large: its 107 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 532 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 665 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 243 lines aren’t shown here.
This diff is large: its 172 lines aren’t shown here.
This diff is large: its 104 lines aren’t shown here.
This diff is large: its 131 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 224 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 160 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 223 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 518 lines aren’t shown here.
This diff is large: its 160 lines aren’t shown here.
This diff is large: its 292 lines aren’t shown here.
This diff is large: its 115 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 2820 lines aren’t shown here.
This diff is large: its 2994 lines aren’t shown here.
This diff is large: its 2695 lines aren’t shown here.
This diff is large: its 2322 lines aren’t shown here.
This diff is large: its 2626 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 207 lines aren’t shown here.
This diff is large: its 1114 lines aren’t shown here.
This diff is large: its 854 lines aren’t shown here.
This diff is large: its 818 lines aren’t shown here.
This diff is large: its 129 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 186 lines aren’t shown here.
This diff is large: its 105 lines aren’t shown here.
This diff is large: its 234 lines aren’t shown here.
This diff is large: its 299 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 153 lines aren’t shown here.
This diff is large: its 366 lines aren’t shown here.
This diff is large: its 152 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 630 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 236 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 127 lines aren’t shown here.
This diff is large: its 787 lines aren’t shown here.
This diff is large: its 216 lines aren’t shown here.
This diff is large: its 112 lines aren’t shown here.
This diff is large: its 675 lines aren’t shown here.
This diff is large: its 133 lines aren’t shown here.
This diff is large: its 150 lines aren’t shown here.
This diff is large: its 2024 lines aren’t shown here.
This diff is large: its 1425 lines aren’t shown here.
This diff is large: its 1137 lines aren’t shown here.
This diff is large: its 1808 lines aren’t shown here.
This diff is large: its 235 lines aren’t shown here.
This diff is large: its 260 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 224 lines aren’t shown here.
This diff is large: its 134 lines aren’t shown here.
This diff is large: its 162 lines aren’t shown here.
This diff is large: its 402 lines aren’t shown here.
This diff is large: its 119 lines aren’t shown here.
This diff is large: its 317 lines aren’t shown here.
This diff is large: its 256 lines aren’t shown here.
This diff is large: its 333 lines aren’t shown here.
This diff is large: its 168 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 270 lines aren’t shown here.
This diff is large: its 488 lines aren’t shown here.
This diff is large: its 559 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 250 lines aren’t shown here.
This diff is large: its 126 lines aren’t shown here.
This diff is large: its 247 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 136 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 170 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 324 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 181 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 76 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 120 lines aren’t shown here.
This diff is large: its 135 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 207 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 209 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 215 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 109 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 170 lines aren’t shown here.
This diff is large: its 239 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 197 lines aren’t shown here.
This diff is large: its 154 lines aren’t shown here.
This diff is large: its 189 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 366 lines aren’t shown here.
This diff is large: its 280 lines aren’t shown here.
This diff is large: its 370 lines aren’t shown here.
This diff is large: its 433 lines aren’t shown here.
This diff is large: its 518 lines aren’t shown here.
This diff is large: its 198 lines aren’t shown here.
This diff is large: its 596 lines aren’t shown here.
This diff is large: its 273 lines aren’t shown here.
This diff is large: its 2025 lines aren’t shown here.
This diff is large: its 362 lines aren’t shown here.
This diff is large: its 904 lines aren’t shown here.
This diff is large: its 1101 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 111 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 110 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 708 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 431 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 700 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 171 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 322 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 151 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 753 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 118 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 142 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 359 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 243 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 79 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 357 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 157 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 568 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 109 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 433 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 164 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 535 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 165 lines aren’t shown here.
This diff is large: its 179 lines aren’t shown here.
This diff is large: its 216 lines aren’t shown here.
This diff is large: its 178 lines aren’t shown here.
This diff is large: its 295 lines aren’t shown here.
This diff is large: its 547 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 629 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 130 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 247 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 316 lines aren’t shown here.
This diff is large: its 101 lines aren’t shown here.
This diff is large: its 112 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 79 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 133 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 108 lines aren’t shown here.
This diff is large: its 691 lines aren’t shown here.
This diff is large: its 155 lines aren’t shown here.
This diff is large: its 297 lines aren’t shown here.
This diff is large: its 425 lines aren’t shown here.
This diff is large: its 289 lines aren’t shown here.
This diff is large: its 115 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 187 lines aren’t shown here.
This diff is large: its 154 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 315 lines aren’t shown here.
This diff is large: its 551 lines aren’t shown here.
This diff is large: its 134 lines aren’t shown here.
This diff is large: its 159 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 191 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 215 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 231 lines aren’t shown here.
This diff is large: its 1169 lines aren’t shown here.
This diff is large: its 410 lines aren’t shown here.
This diff is large: its 130 lines aren’t shown here.
This diff is large: its 315 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 187 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 121 lines aren’t shown here.
This diff is large: its 195 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 118 lines aren’t shown here.
This diff is large: its 105 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 1163 lines aren’t shown here.
This diff is large: its 2584 lines aren’t shown here.
This diff is large: its 146 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 171 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 198 lines aren’t shown here.
This diff is large: its 579 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 160 lines aren’t shown here.
This diff is large: its 250 lines aren’t shown here.
This diff is large: its 341 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 212 lines aren’t shown here.
This diff is large: its 81 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 303 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 135 lines aren’t shown here.
This diff is large: its 99 lines aren’t shown here.
This diff is large: its 285 lines aren’t shown here.
This diff is large: its 158 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 265 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 94 lines aren’t shown here.
This diff is large: its 158 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 1037 lines aren’t shown here.
This diff is large: its 570 lines aren’t shown here.
This diff is large: its 259 lines aren’t shown here.
This diff is large: its 112 lines aren’t shown here.
This diff is large: its 351 lines aren’t shown here.
This diff is large: its 214 lines aren’t shown here.
This diff is large: its 390 lines aren’t shown here.
This diff is large: its 174 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 79 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 145 lines aren’t shown here.
This diff is large: its 98 lines aren’t shown here.
This diff is large: its 204 lines aren’t shown here.
This diff is large: its 222 lines aren’t shown here.
This diff is large: its 106 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 277 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 149 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 120 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 240 lines aren’t shown here.
This diff is large: its 210 lines aren’t shown here.
This diff is large: its 153 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 609 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 1409 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 273 lines aren’t shown here.
This diff is large: its 324 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 474 lines aren’t shown here.
This diff is large: its 751 lines aren’t shown here.
This diff is large: its 813 lines aren’t shown here.
This diff is large: its 813 lines aren’t shown here.
This diff is large: its 813 lines aren’t shown here.
This diff is large: its 720 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 917 lines aren’t shown here.
This diff is large: its 1344 lines aren’t shown here.
This diff is large: its 1344 lines aren’t shown here.
This diff is large: its 1306 lines aren’t shown here.
This diff is large: its 1306 lines aren’t shown here.
This diff is large: its 191 lines aren’t shown here.
This diff is large: its 237 lines aren’t shown here.
This diff is large: its 232 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 138 lines aren’t shown here.
This diff is large: its 98 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 76 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 111 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is larger than a page shows: the files after these aren’t listed. Clone the repository to see all of it.