* tag 'v3.4-rc3': (3755 commits) Linux 3.4-rc3 x86-32: fix up strncpy_from_user() sign error ARM: 7386/1: jump_label: fixup for rename to static_key ARM: 7384/1: ThumbEE: Disable userspace TEEHBR access for !CONFIG_ARM_THUMBEE ARM: 7382/1: mm: truncate memory banks to fit in 4GB space for classic MMU ARM: 7359/2: smp_twd: Only wait for reprogramming on active cpus PCI: Fix regression in pci_restore_state(), v3 SCSI: Fix error handling when no ULD is attached ARM: OMAP: clock: cleanup CPUfreq leftovers, fix build errors ARM: dts: remove blank interrupt-parent properties ARM: EXYNOS: Fix Kconfig dependencies for device tree enabled machine files do not export kernel's NULL #define to userspace ARM: EXYNOS: Remove broken config values for touchscren for NURI board ARM: EXYNOS: set fix xusbxti clock for NURI and Universal210 boards ARM: EXYNOS: fix regulator name for NURI board ARM: SAMSUNG: make SAMSUNG_PM_DEBUG select DEBUG_LL cpufreq: OMAP: fix build errors: depends on ARCH_OMAP2PLUS sparc64: Eliminate obsolete __handle_softirq() function sparc64: Fix bootup crash on sun4v. ARM: msm: Fix section mismatches in proc_comm.c ...
Unified · Split
| @@ -1,5 +1,5 @@ | |||
| 1 | What: /sys/bus/usb/drivers/usbtmc/devices/*/interface_capabilities | 1 | What: /sys/bus/usb/drivers/usbtmc/*/interface_capabilities |
| 2 | What: /sys/bus/usb/drivers/usbtmc/devices/*/device_capabilities | 2 | What: /sys/bus/usb/drivers/usbtmc/*/device_capabilities |
| 3 | Date: August 2008 | 3 | Date: August 2008 |
| 4 | Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 4 | Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| 5 | Description: | 5 | Description: |
| @@ -12,8 +12,8 @@ Description: · 6 unmodified lines | |||
| 12 | The files are read only. | 12 | The files are read only. |
| 13 | 13 | ||
| 14 | 14 | ||
| 15 | What: /sys/bus/usb/drivers/usbtmc/devices/*/usb488_interface_capabilities | 15 | What: /sys/bus/usb/drivers/usbtmc/*/usb488_interface_capabilities |
| 16 | What: /sys/bus/usb/drivers/usbtmc/devices/*/usb488_device_capabilities | 16 | What: /sys/bus/usb/drivers/usbtmc/*/usb488_device_capabilities |
| 17 | Date: August 2008 | 17 | Date: August 2008 |
| 18 | Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 18 | Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| 19 | Description: | 19 | Description: |
| @@ -27,7 +27,7 @@ Description: · 7 unmodified lines | |||
| 27 | The files are read only. | 27 | The files are read only. |
| 28 | 28 | ||
| 29 | 29 | ||
| 30 | What: /sys/bus/usb/drivers/usbtmc/devices/*/TermChar | 30 | What: /sys/bus/usb/drivers/usbtmc/*/TermChar |
| 31 | Date: August 2008 | 31 | Date: August 2008 |
| 32 | Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 32 | Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| 33 | Description: | 33 | Description: |
| @@ -40,7 +40,7 @@ Description: · 6 unmodified lines | |||
| 40 | sent to the device or not. | 40 | sent to the device or not. |
| 41 | 41 | ||
| 42 | 42 | ||
| 43 | What: /sys/bus/usb/drivers/usbtmc/devices/*/TermCharEnabled | 43 | What: /sys/bus/usb/drivers/usbtmc/*/TermCharEnabled |
| 44 | Date: August 2008 | 44 | Date: August 2008 |
| 45 | Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 45 | Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| 46 | Description: | 46 | Description: |
| @@ -51,11 +51,11 @@ Description: · 4 unmodified lines | |||
| 51 | published by the USB-IF. | 51 | published by the USB-IF. |
| 52 | 52 | ||
| 53 | 53 | ||
| 54 | What: /sys/bus/usb/drivers/usbtmc/devices/*/auto_abort | 54 | What: /sys/bus/usb/drivers/usbtmc/*/auto_abort |
| 55 | Date: August 2008 | 55 | Date: August 2008 |
| 56 | Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 56 | Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| 57 | Description: | 57 | Description: |
| 58 | This file determines if the the transaction of the USB TMC | 58 | This file determines if the transaction of the USB TMC |
| 59 | device is to be automatically aborted if there is any error. | 59 | device is to be automatically aborted if there is any error. |
| 60 | For more details about this, please see the document, | 60 | For more details about this, please see the document, |
| 61 | "Universal Serial Bus Test and Measurement Class Specification | 61 | "Universal Serial Bus Test and Measurement Class Specification |
| @@ -0,0 +1,16 @@ | |||
| 1 | What: /sys/kernel/debug/olpc-ec/cmd | ||
| 2 | Date: Dec 2011 | ||
| 3 | KernelVersion: 3.4 | ||
| 4 | Contact: devel@lists.laptop.org | ||
| 5 | Description: | ||
| 6 | |||
| 7 | A generic interface for executing OLPC Embedded Controller commands and | ||
| 8 | reading their responses. | ||
| 9 | |||
| 10 | To execute a command, write data with the format: CC:N A A A A | ||
| 11 | CC is the (hex) command, N is the count of expected reply bytes, and A A A A | ||
| 12 | are optional (hex) arguments. | ||
| 13 | |||
| 14 | To read the response (if any), read from the generic node after executing | ||
| 15 | a command. Hex reply bytes will be returned, *whether or not* they came from | ||
| 16 | the immediately previous command. | ||
| @@ -0,0 +1,25 @@ | |||
| 1 | What: /sys/block/dm-<num>/dm/name | ||
| 2 | Date: January 2009 | ||
| 3 | KernelVersion: 2.6.29 | ||
| 4 | Contact: dm-devel@redhat.com | ||
| 5 | Description: Device-mapper device name. | ||
| 6 | Read-only string containing mapped device name. | ||
| 7 | Users: util-linux, device-mapper udev rules | ||
| 8 | |||
| 9 | What: /sys/block/dm-<num>/dm/uuid | ||
| 10 | Date: January 2009 | ||
| 11 | KernelVersion: 2.6.29 | ||
| 12 | Contact: dm-devel@redhat.com | ||
| 13 | Description: Device-mapper device UUID. | ||
| 14 | Read-only string containing DM-UUID or empty string | ||
| 15 | if DM-UUID is not set. | ||
| 16 | Users: util-linux, device-mapper udev rules | ||
| 17 | |||
| 18 | What: /sys/block/dm-<num>/dm/suspended | ||
| 19 | Date: June 2009 | ||
| 20 | KernelVersion: 2.6.31 | ||
| 21 | Contact: dm-devel@redhat.com | ||
| 22 | Description: Device-mapper device suspend state. | ||
| 23 | Contains the value 1 while the device is suspended. | ||
| 24 | Otherwise it contains 0. Read-only attribute. | ||
| 25 | Users: util-linux, device-mapper udev rules | ||
| @@ -0,0 +1,18 @@ | |||
| 1 | What: /sys/block/rssd*/registers | ||
| 2 | Date: March 2012 | ||
| 3 | KernelVersion: 3.3 | ||
| 4 | Contact: Asai Thambi S P <asamymuthupa@micron.com> | ||
| 5 | Description: This is a read-only file. Dumps below driver information and | ||
| 6 | hardware registers. | ||
| 7 | - S ACTive | ||
| 8 | - Command Issue | ||
| 9 | - Allocated | ||
| 10 | - Completed | ||
| 11 | - PORT IRQ STAT | ||
| 12 | - HOST IRQ STAT | ||
| 13 | |||
| 14 | What: /sys/block/rssd*/status | ||
| 15 | Date: April 2012 | ||
| 16 | KernelVersion: 3.4 | ||
| 17 | Contact: Asai Thambi S P <asamymuthupa@micron.com> | ||
| 18 | Description: This is a read-only file. Indicates the status of the device. | ||
| @@ -0,0 +1,14 @@ | |||
| 1 | Where: /sys/bus/event_source/devices/<dev>/format | ||
| 2 | Date: January 2012 | ||
| 3 | Kernel Version: 3.3 | ||
| 4 | Contact: Jiri Olsa <jolsa@redhat.com> | ||
| 5 | Description: | ||
| 6 | Attribute group to describe the magic bits that go into | ||
| 7 | perf_event_attr::config[012] for a particular pmu. | ||
| 8 | Each attribute of this group defines the 'hardware' bitmask | ||
| 9 | we want to export, so that userspace can deal with sane | ||
| 10 | name/value pairs. | ||
| 11 | |||
| 12 | Example: 'config1:1,6-10,44' | ||
| 13 | Defines contents of attribute that occupies bits 1,6-10,44 of | ||
| 14 | perf_event_attr::config1. | ||
| @@ -0,0 +1,75 @@ | |||
| 1 | What: /sys/bus/rpmsg/devices/.../name | ||
| 2 | Date: June 2011 | ||
| 3 | KernelVersion: 3.3 | ||
| 4 | Contact: Ohad Ben-Cohen <ohad@wizery.com> | ||
| 5 | Description: | ||
| 6 | Every rpmsg device is a communication channel with a remote | ||
| 7 | processor. Channels are identified with a (textual) name, | ||
| 8 | which is maximum 32 bytes long (defined as RPMSG_NAME_SIZE in | ||
| 9 | rpmsg.h). | ||
| 10 | |||
| 11 | This sysfs entry contains the name of this channel. | ||
| 12 | |||
| 13 | What: /sys/bus/rpmsg/devices/.../src | ||
| 14 | Date: June 2011 | ||
| 15 | KernelVersion: 3.3 | ||
| 16 | Contact: Ohad Ben-Cohen <ohad@wizery.com> | ||
| 17 | Description: | ||
| 18 | Every rpmsg device is a communication channel with a remote | ||
| 19 | processor. Channels have a local ("source") rpmsg address, | ||
| 20 | and remote ("destination") rpmsg address. When an entity | ||
| 21 | starts listening on one end of a channel, it assigns it with | ||
| 22 | a unique rpmsg address (a 32 bits integer). This way when | ||
| 23 | inbound messages arrive to this address, the rpmsg core | ||
| 24 | dispatches them to the listening entity (a kernel driver). | ||
| 25 | |||
| 26 | This sysfs entry contains the src (local) rpmsg address | ||
| 27 | of this channel. If it contains 0xffffffff, then an address | ||
| 28 | wasn't assigned (can happen if no driver exists for this | ||
| 29 | channel). | ||
| 30 | |||
| 31 | What: /sys/bus/rpmsg/devices/.../dst | ||
| 32 | Date: June 2011 | ||
| 33 | KernelVersion: 3.3 | ||
| 34 | Contact: Ohad Ben-Cohen <ohad@wizery.com> | ||
| 35 | Description: | ||
| 36 | Every rpmsg device is a communication channel with a remote | ||
| 37 | processor. Channels have a local ("source") rpmsg address, | ||
| 38 | and remote ("destination") rpmsg address. When an entity | ||
| 39 | starts listening on one end of a channel, it assigns it with | ||
| 40 | a unique rpmsg address (a 32 bits integer). This way when | ||
| 41 | inbound messages arrive to this address, the rpmsg core | ||
| 42 | dispatches them to the listening entity. | ||
| 43 | |||
| 44 | This sysfs entry contains the dst (remote) rpmsg address | ||
| 45 | of this channel. If it contains 0xffffffff, then an address | ||
| 46 | wasn't assigned (can happen if the kernel driver that | ||
| 47 | is attached to this channel is exposing a service to the | ||
| 48 | remote processor. This make it a local rpmsg server, | ||
| 49 | and it is listening for inbound messages that may be sent | ||
| 50 | from any remote rpmsg client; it is not bound to a single | ||
| 51 | remote entity). | ||
| 52 | |||
| 53 | What: /sys/bus/rpmsg/devices/.../announce | ||
| 54 | Date: June 2011 | ||
| 55 | KernelVersion: 3.3 | ||
| 56 | Contact: Ohad Ben-Cohen <ohad@wizery.com> | ||
| 57 | Description: | ||
| 58 | Every rpmsg device is a communication channel with a remote | ||
| 59 | processor. Channels are identified by a textual name (see | ||
| 60 | /sys/bus/rpmsg/devices/.../name above) and have a local | ||
| 61 | ("source") rpmsg address, and remote ("destination") rpmsg | ||
| 62 | address. | ||
| 63 | |||
| 64 | A channel is first created when an entity, whether local | ||
| 65 | or remote, starts listening on it for messages (and is thus | ||
| 66 | called an rpmsg server). | ||
| 67 | |||
| 68 | When that happens, a "name service" announcement is sent | ||
| 69 | to the other processor, in order to let it know about the | ||
| 70 | creation of the channel (this way remote clients know they | ||
| 71 | can start sending messages). | ||
| 72 | |||
| 73 | This sysfs entry tells us whether the channel is a local | ||
| 74 | server channel that is announced (values are either | ||
| 75 | true or false). | ||
| @@ -0,0 +1,8 @@ | |||
| 1 | What: /sys/block/<device>/iosched/target_latency | ||
| 2 | Date: March 2012 | ||
| 3 | contact: Tao Ma <boyu.mt@taobao.com> | ||
| 4 | Description: | ||
| 5 | The /sys/block/<device>/iosched/target_latency only exists | ||
| 6 | when the user sets cfq to /sys/block/<device>/scheduler. | ||
| 7 | It contains an estimated latency time for the cfq. cfq will | ||
| 8 | use it to calculate the time slice used for every task. | ||
| @@ -17,3 +17,21 @@ Description: Some Samsung laptops have different "performance levels" · 16 unmodified lines | |||
| 17 | Specifically, not all support the "overclock" option, | 17 | Specifically, not all support the "overclock" option, |
| 18 | and it's still unknown if this value even changes | 18 | and it's still unknown if this value even changes |
| 19 | anything, other than making the user feel a bit better. | 19 | anything, other than making the user feel a bit better. |
| 20 | |||
| 21 | What: /sys/devices/platform/samsung/battery_life_extender | ||
| 22 | Date: December 1, 2011 | ||
| 23 | KernelVersion: 3.3 | ||
| 24 | Contact: Corentin Chary <corentin.chary@gmail.com> | ||
| 25 | Description: Max battery charge level can be modified, battery cycle | ||
| 26 | life can be extended by reducing the max battery charge | ||
| 27 | level. | ||
| 28 | 0 means normal battery mode (100% charge) | ||
| 29 | 1 means battery life extender mode (80% charge) | ||
| 30 | |||
| 31 | What: /sys/devices/platform/samsung/usb_charge | ||
| 32 | Date: December 1, 2011 | ||
| 33 | KernelVersion: 3.3 | ||
| 34 | Contact: Corentin Chary <corentin.chary@gmail.com> | ||
| 35 | Description: Use your USB ports to charge devices, even | ||
| 36 | when your laptop is powered off. | ||
| 37 | 1 means enabled, 0 means disabled. | ||
| @@ -1,3 +1,23 @@ | |||
| 1 | What: /sys/firmware/acpi/bgrt/ | ||
| 2 | Date: January 2012 | ||
| 3 | Contact: Matthew Garrett <mjg@redhat.com> | ||
| 4 | Description: | ||
| 5 | The BGRT is an ACPI 5.0 feature that allows the OS | ||
| 6 | to obtain a copy of the firmware boot splash and | ||
| 7 | some associated metadata. This is intended to be used | ||
| 8 | by boot splash applications in order to interact with | ||
| 9 | the firmware boot splash in order to avoid jarring | ||
| 10 | transitions. | ||
| 11 | |||
| 12 | image: The image bitmap. Currently a 32-bit BMP. | ||
| 13 | status: 1 if the image is valid, 0 if firmware invalidated it. | ||
| 14 | type: 0 indicates image is in BMP format. | ||
| 15 | version: The version of the BGRT. Currently 1. | ||
| 16 | xoffset: The number of pixels between the left of the screen | ||
| 17 | and the left edge of the image. | ||
| 18 | yoffset: The number of pixels between the top of the screen | ||
| 19 | and the top edge of the image. | ||
| 20 | |||
| 1 | What: /sys/firmware/acpi/interrupts/ | 21 | What: /sys/firmware/acpi/interrupts/ |
| 2 | Date: February 2008 | 22 | Date: February 2008 |
| 3 | Contact: Len Brown <lenb@kernel.org> | 23 | Contact: Len Brown <lenb@kernel.org> |
| @@ -793,6 +793,35 @@ own custom mode, or may have some other magic method for making indentation · 792 unmodified lines | |||
| 793 | work correctly. | 793 | work correctly. |
| 794 | 794 | ||
| 795 | 795 | ||
| 796 | Chapter 19: Inline assembly | ||
| 797 | |||
| 798 | In architecture-specific code, you may need to use inline assembly to interface | ||
| 799 | with CPU or platform functionality. Don't hesitate to do so when necessary. | ||
| 800 | However, don't use inline assembly gratuitously when C can do the job. You can | ||
| 801 | and should poke hardware from C when possible. | ||
| 802 | |||
| 803 | Consider writing simple helper functions that wrap common bits of inline | ||
| 804 | assembly, rather than repeatedly writing them with slight variations. Remember | ||
| 805 | that inline assembly can use C parameters. | ||
| 806 | |||
| 807 | Large, non-trivial assembly functions should go in .S files, with corresponding | ||
| 808 | C prototypes defined in C header files. The C prototypes for assembly | ||
| 809 | functions should use "asmlinkage". | ||
| 810 | |||
| 811 | You may need to mark your asm statement as volatile, to prevent GCC from | ||
| 812 | removing it if GCC doesn't notice any side effects. You don't always need to | ||
| 813 | do so, though, and doing so unnecessarily can limit optimization. | ||
| 814 | |||
| 815 | When writing a single inline assembly statement containing multiple | ||
| 816 | instructions, put each instruction on a separate line in a separate quoted | ||
| 817 | string, and end each string except the last with \n\t to properly indent the | ||
| 818 | next instruction in the assembly output: | ||
| 819 | |||
| 820 | asm ("magic %reg1, #42\n\t" | ||
| 821 | "more_magic %reg2, %reg3" | ||
| 822 | : /* outputs */ : /* inputs */ : /* clobbers */); | ||
| 823 | |||
| 824 | |||
| 796 | 825 | ||
| 797 | Appendix I: References | 826 | Appendix I: References |
| 798 | 827 | ||
| @@ -31,3 +31,21 @@ may be weakly ordered, that is that reads and writes may pass each other. · 30 unmodified lines | |||
| 31 | Since it is optional for platforms to implement DMA_ATTR_WEAK_ORDERING, | 31 | Since it is optional for platforms to implement DMA_ATTR_WEAK_ORDERING, |
| 32 | those that do not will simply ignore the attribute and exhibit default | 32 | those that do not will simply ignore the attribute and exhibit default |
| 33 | behavior. | 33 | behavior. |
| 34 | |||
| 35 | DMA_ATTR_WRITE_COMBINE | ||
| 36 | ---------------------- | ||
| 37 | |||
| 38 | DMA_ATTR_WRITE_COMBINE specifies that writes to the mapping may be | ||
| 39 | buffered to improve performance. | ||
| 40 | |||
| 41 | Since it is optional for platforms to implement DMA_ATTR_WRITE_COMBINE, | ||
| 42 | those that do not will simply ignore the attribute and exhibit default | ||
| 43 | behavior. | ||
| 44 | |||
| 45 | DMA_ATTR_NON_CONSISTENT | ||
| 46 | ----------------------- | ||
| 47 | |||
| 48 | DMA_ATTR_NON_CONSISTENT lets the platform to choose to return either | ||
| 49 | consistent or non-consistent memory as it sees fit. By using this API, | ||
| 50 | you are guaranteeing to the platform that you have all the correct and | ||
| 51 | necessary sync points for this memory in the driver. | ||
| @@ -446,4 +446,21 @@ X!Idrivers/video/console/fonts.c · 445 unmodified lines | |||
| 446 | !Edrivers/i2c/i2c-core.c | 446 | !Edrivers/i2c/i2c-core.c |
| 447 | </chapter> | 447 | </chapter> |
| 448 | 448 | ||
| 449 | <chapter id="hsi"> | ||
| 450 | <title>High Speed Synchronous Serial Interface (HSI)</title> | ||
| 451 | |||
| 452 | <para> | ||
| 453 | High Speed Synchronous Serial Interface (HSI) is a | ||
| 454 | serial interface mainly used for connecting application | ||
| 455 | engines (APE) with cellular modem engines (CMT) in cellular | ||
| 456 | handsets. | ||
| 457 | |||
| 458 | HSI provides multiplexing for up to 16 logical channels, | ||
| 459 | low-latency and full duplex communication. | ||
| 460 | </para> | ||
| 461 | |||
| 462 | !Iinclude/linux/hsi/hsi.h | ||
| 463 | !Edrivers/hsi/hsi.c | ||
| 464 | </chapter> | ||
| 465 | |||
| 449 | </book> | 466 | </book> |
| @@ -1,3 +1,3 @@ | |||
| 1 | obj-m := DocBook/ accounting/ auxdisplay/ connector/ \ | 1 | obj-m := DocBook/ accounting/ auxdisplay/ connector/ \ |
| 2 | filesystems/ filesystems/configfs/ ia64/ laptops/ networking/ \ | 2 | filesystems/ filesystems/configfs/ ia64/ laptops/ networking/ \ |
| 3 | pcmcia/ spi/ timers/ vm/ watchdog/src/ | 3 | pcmcia/ spi/ timers/ watchdog/src/ |
| @@ -53,6 +53,14 @@ directory apei/einj. The following files are provided. · 52 unmodified lines | |||
| 53 | This file is used to set the second error parameter value. Effect of | 53 | This file is used to set the second error parameter value. Effect of |
| 54 | parameter depends on error_type specified. | 54 | parameter depends on error_type specified. |
| 55 | 55 | ||
| 56 | - notrigger | ||
| 57 | The EINJ mechanism is a two step process. First inject the error, then | ||
| 58 | perform some actions to trigger it. Setting "notrigger" to 1 skips the | ||
| 59 | trigger phase, which *may* allow the user to cause the error in some other | ||
| 60 | context by a simple access to the cpu, memory location, or device that is | ||
| 61 | the target of the error injection. Whether this actually works depends | ||
| 62 | on what operations the BIOS actually includes in the trigger phase. | ||
| 63 | |||
| 56 | BIOS versions based in the ACPI 4.0 specification have limited options | 64 | BIOS versions based in the ACPI 4.0 specification have limited options |
| 57 | to control where the errors are injected. Your BIOS may support an | 65 | to control where the errors are injected. Your BIOS may support an |
| 58 | extension (enabled with the param_extension=1 module parameter, or | 66 | extension (enabled with the param_extension=1 module parameter, or |
| @@ -35,7 +35,7 @@ CREATING DEVICE NODES · 34 unmodified lines | |||
| 35 | sh Documentation/aoe/mkshelf.sh /dev/etherd 0 | 35 | sh Documentation/aoe/mkshelf.sh /dev/etherd 0 |
| 36 | 36 | ||
| 37 | There is also an autoload script that shows how to edit | 37 | There is also an autoload script that shows how to edit |
| 38 | /etc/modprobe.conf to ensure that the aoe module is loaded when | 38 | /etc/modprobe.d/aoe.conf to ensure that the aoe module is loaded when |
| 39 | necessary. | 39 | necessary. |
| 40 | 40 | ||
| 41 | USING DEVICE NODES | 41 | USING DEVICE NODES |
| @@ -1,8 +1,8 @@ | |||
| 1 | #!/bin/sh | 1 | #!/bin/sh |
| 2 | # set aoe to autoload by installing the | 2 | # set aoe to autoload by installing the |
| 3 | # aliases in /etc/modprobe.conf | 3 | # aliases in /etc/modprobe.d/ |
| 4 | 4 | ||
| 5 | f=/etc/modprobe.conf | 5 | f=/etc/modprobe.d/aoe.conf |
| 6 | 6 | ||
| 7 | if test ! -r $f || test ! -w $f; then | 7 | if test ! -r $f || test ! -w $f; then |
| 8 | echo "cannot configure $f for module autoloading" 1>&2 | 8 | echo "cannot configure $f for module autoloading" 1>&2 |
| @@ -49,7 +49,7 @@ you can put: · 48 unmodified lines | |||
| 49 | 49 | ||
| 50 | options floppy omnibook messages | 50 | options floppy omnibook messages |
| 51 | 51 | ||
| 52 | in /etc/modprobe.conf. | 52 | in a configuration file in /etc/modprobe.d/. |
| 53 | 53 | ||
| 54 | 54 | ||
| 55 | The floppy driver related options are: | 55 | The floppy driver related options are: |
| @@ -217,7 +217,7 @@ and name space for cpusets, with a minimum of additional kernel code. · 216 unmodified lines | |||
| 217 | 217 | ||
| 218 | The cpus and mems files in the root (top_cpuset) cpuset are | 218 | The cpus and mems files in the root (top_cpuset) cpuset are |
| 219 | read-only. The cpus file automatically tracks the value of | 219 | read-only. The cpus file automatically tracks the value of |
| 220 | cpu_online_map using a CPU hotplug notifier, and the mems file | 220 | cpu_online_mask using a CPU hotplug notifier, and the mems file |
| 221 | automatically tracks the value of node_states[N_HIGH_MEMORY]--i.e., | 221 | automatically tracks the value of node_states[N_HIGH_MEMORY]--i.e., |
| 222 | nodes with memory--using the cpuset_track_online_nodes() hook. | 222 | nodes with memory--using the cpuset_track_online_nodes() hook. |
| 223 | 223 | ||
| @@ -34,8 +34,7 @@ Current Status: linux-2.6.34-mmotm(development version of 2010/April) · 33 unmodified lines | |||
| 34 | 34 | ||
| 35 | Features: | 35 | Features: |
| 36 | - accounting anonymous pages, file caches, swap caches usage and limiting them. | 36 | - accounting anonymous pages, file caches, swap caches usage and limiting them. |
| 37 | - private LRU and reclaim routine. (system's global LRU and private LRU | 37 | - pages are linked to per-memcg LRU exclusively, and there is no global LRU. |
| 38 | work independently from each other) | ||
| 39 | - optionally, memory+swap usage can be accounted and limited. | 38 | - optionally, memory+swap usage can be accounted and limited. |
| 40 | - hierarchical accounting | 39 | - hierarchical accounting |
| 41 | - soft limit | 40 | - soft limit |
| @@ -154,7 +153,7 @@ updated. page_cgroup has its own LRU on cgroup. · 112 unmodified lines | |||
| 154 | 2.2.1 Accounting details | 153 | 2.2.1 Accounting details |
| 155 | 154 | ||
| 156 | All mapped anon pages (RSS) and cache pages (Page Cache) are accounted. | 155 | All mapped anon pages (RSS) and cache pages (Page Cache) are accounted. |
| 157 | Some pages which are never reclaimable and will not be on the global LRU | 156 | Some pages which are never reclaimable and will not be on the LRU |
| 158 | are not accounted. We just account pages under usual VM management. | 157 | are not accounted. We just account pages under usual VM management. |
| 159 | 158 | ||
| 160 | RSS pages are accounted at page_fault unless they've already been accounted | 159 | RSS pages are accounted at page_fault unless they've already been accounted |
| @@ -0,0 +1,233 @@ | |||
| 1 | The Common Clk Framework | ||
| 2 | Mike Turquette <mturquette@ti.com> | ||
| 3 | |||
| 4 | This document endeavours to explain the common clk framework details, | ||
| 5 | and how to port a platform over to this framework. It is not yet a | ||
| 6 | detailed explanation of the clock api in include/linux/clk.h, but | ||
| 7 | perhaps someday it will include that information. | ||
| 8 | |||
| 9 | Part 1 - introduction and interface split | ||
| 10 | |||
| 11 | The common clk framework is an interface to control the clock nodes | ||
| 12 | available on various devices today. This may come in the form of clock | ||
| 13 | gating, rate adjustment, muxing or other operations. This framework is | ||
| 14 | enabled with the CONFIG_COMMON_CLK option. | ||
| 15 | |||
| 16 | The interface itself is divided into two halves, each shielded from the | ||
| 17 | details of its counterpart. First is the common definition of struct | ||
| 18 | clk which unifies the framework-level accounting and infrastructure that | ||
| 19 | has traditionally been duplicated across a variety of platforms. Second | ||
| 20 | is a common implementation of the clk.h api, defined in | ||
| 21 | drivers/clk/clk.c. Finally there is struct clk_ops, whose operations | ||
| 22 | are invoked by the clk api implementation. | ||
| 23 | |||
| 24 | The second half of the interface is comprised of the hardware-specific | ||
| 25 | callbacks registered with struct clk_ops and the corresponding | ||
| 26 | hardware-specific structures needed to model a particular clock. For | ||
| 27 | the remainder of this document any reference to a callback in struct | ||
| 28 | clk_ops, such as .enable or .set_rate, implies the hardware-specific | ||
| 29 | implementation of that code. Likewise, references to struct clk_foo | ||
| 30 | serve as a convenient shorthand for the implementation of the | ||
| 31 | hardware-specific bits for the hypothetical "foo" hardware. | ||
| 32 | |||
| 33 | Tying the two halves of this interface together is struct clk_hw, which | ||
| 34 | is defined in struct clk_foo and pointed to within struct clk. This | ||
| 35 | allows easy for navigation between the two discrete halves of the common | ||
| 36 | clock interface. | ||
| 37 | |||
| 38 | Part 2 - common data structures and api | ||
| 39 | |||
| 40 | Below is the common struct clk definition from | ||
| 41 | include/linux/clk-private.h, modified for brevity: | ||
| 42 | |||
| 43 | struct clk { | ||
| 44 | const char *name; | ||
| 45 | const struct clk_ops *ops; | ||
| 46 | struct clk_hw *hw; | ||
| 47 | char **parent_names; | ||
| 48 | struct clk **parents; | ||
| 49 | struct clk *parent; | ||
| 50 | struct hlist_head children; | ||
| 51 | struct hlist_node child_node; | ||
| 52 | ... | ||
| 53 | }; | ||
| 54 | |||
| 55 | The members above make up the core of the clk tree topology. The clk | ||
| 56 | api itself defines several driver-facing functions which operate on | ||
| 57 | struct clk. That api is documented in include/linux/clk.h. | ||
| 58 | |||
| 59 | Platforms and devices utilizing the common struct clk use the struct | ||
| 60 | clk_ops pointer in struct clk to perform the hardware-specific parts of | ||
| 61 | the operations defined in clk.h: | ||
| 62 | |||
| 63 | struct clk_ops { | ||
| 64 | int (*prepare)(struct clk_hw *hw); | ||
| 65 | void (*unprepare)(struct clk_hw *hw); | ||
| 66 | int (*enable)(struct clk_hw *hw); | ||
| 67 | void (*disable)(struct clk_hw *hw); | ||
| 68 | int (*is_enabled)(struct clk_hw *hw); | ||
| 69 | unsigned long (*recalc_rate)(struct clk_hw *hw, | ||
| 70 | unsigned long parent_rate); | ||
| 71 | long (*round_rate)(struct clk_hw *hw, unsigned long, | ||
| 72 | unsigned long *); | ||
| 73 | int (*set_parent)(struct clk_hw *hw, u8 index); | ||
| 74 | u8 (*get_parent)(struct clk_hw *hw); | ||
| 75 | int (*set_rate)(struct clk_hw *hw, unsigned long); | ||
| 76 | void (*init)(struct clk_hw *hw); | ||
| 77 | }; | ||
| 78 | |||
| 79 | Part 3 - hardware clk implementations | ||
| 80 | |||
| 81 | The strength of the common struct clk comes from its .ops and .hw pointers | ||
| 82 | which abstract the details of struct clk from the hardware-specific bits, and | ||
| 83 | vice versa. To illustrate consider the simple gateable clk implementation in | ||
| 84 | drivers/clk/clk-gate.c: | ||
| 85 | |||
| 86 | struct clk_gate { | ||
| 87 | struct clk_hw hw; | ||
| 88 | void __iomem *reg; | ||
| 89 | u8 bit_idx; | ||
| 90 | ... | ||
| 91 | }; | ||
| 92 | |||
| 93 | struct clk_gate contains struct clk_hw hw as well as hardware-specific | ||
| 94 | knowledge about which register and bit controls this clk's gating. | ||
| 95 | Nothing about clock topology or accounting, such as enable_count or | ||
| 96 | notifier_count, is needed here. That is all handled by the common | ||
| 97 | framework code and struct clk. | ||
| 98 | |||
| 99 | Let's walk through enabling this clk from driver code: | ||
| 100 | |||
| 101 | struct clk *clk; | ||
| 102 | clk = clk_get(NULL, "my_gateable_clk"); | ||
| 103 | |||
| 104 | clk_prepare(clk); | ||
| 105 | clk_enable(clk); | ||
| 106 | |||
| 107 | The call graph for clk_enable is very simple: | ||
| 108 | |||
| 109 | clk_enable(clk); | ||
| 110 | clk->ops->enable(clk->hw); | ||
| 111 | [resolves to...] | ||
| 112 | clk_gate_enable(hw); | ||
| 113 | [resolves struct clk gate with to_clk_gate(hw)] | ||
| 114 | clk_gate_set_bit(gate); | ||
| 115 | |||
| 116 | And the definition of clk_gate_set_bit: | ||
| 117 | |||
| 118 | static void clk_gate_set_bit(struct clk_gate *gate) | ||
| 119 | { | ||
| 120 | u32 reg; | ||
| 121 | |||
| 122 | reg = __raw_readl(gate->reg); | ||
| 123 | reg |= BIT(gate->bit_idx); | ||
| 124 | writel(reg, gate->reg); | ||
| 125 | } | ||
| 126 | |||
| 127 | Note that to_clk_gate is defined as: | ||
| 128 | |||
| 129 | #define to_clk_gate(_hw) container_of(_hw, struct clk_gate, clk) | ||
| 130 | |||
| 131 | This pattern of abstraction is used for every clock hardware | ||
| 132 | representation. | ||
| 133 | |||
| 134 | Part 4 - supporting your own clk hardware | ||
| 135 | |||
| 136 | When implementing support for a new type of clock it only necessary to | ||
| 137 | include the following header: | ||
| 138 | |||
| 139 | #include <linux/clk-provider.h> | ||
| 140 | |||
| 141 | include/linux/clk.h is included within that header and clk-private.h | ||
| 142 | must never be included from the code which implements the operations for | ||
| 143 | a clock. More on that below in Part 5. | ||
| 144 | |||
| 145 | To construct a clk hardware structure for your platform you must define | ||
| 146 | the following: | ||
| 147 | |||
| 148 | struct clk_foo { | ||
| 149 | struct clk_hw hw; | ||
| 150 | ... hardware specific data goes here ... | ||
| 151 | }; | ||
| 152 | |||
| 153 | To take advantage of your data you'll need to support valid operations | ||
| 154 | for your clk: | ||
| 155 | |||
| 156 | struct clk_ops clk_foo_ops { | ||
| 157 | .enable = &clk_foo_enable; | ||
| 158 | .disable = &clk_foo_disable; | ||
| 159 | }; | ||
| 160 | |||
| 161 | Implement the above functions using container_of: | ||
| 162 | |||
| 163 | #define to_clk_foo(_hw) container_of(_hw, struct clk_foo, hw) | ||
| 164 | |||
| 165 | int clk_foo_enable(struct clk_hw *hw) | ||
| 166 | { | ||
| 167 | struct clk_foo *foo; | ||
| 168 | |||
| 169 | foo = to_clk_foo(hw); | ||
| 170 | |||
| 171 | ... perform magic on foo ... | ||
| 172 | |||
| 173 | return 0; | ||
| 174 | }; | ||
| 175 | |||
| 176 | Below is a matrix detailing which clk_ops are mandatory based upon the | ||
| 177 | hardware capbilities of that clock. A cell marked as "y" means | ||
| 178 | mandatory, a cell marked as "n" implies that either including that | ||
| 179 | callback is invalid or otherwise uneccesary. Empty cells are either | ||
| 180 | optional or must be evaluated on a case-by-case basis. | ||
| 181 | |||
| 182 | clock hardware characteristics | ||
| 183 | ----------------------------------------------------------- | ||
| 184 | | gate | change rate | single parent | multiplexer | root | | ||
| 185 | |------|-------------|---------------|-------------|------| | ||
| 186 | .prepare | | | | | | | ||
| 187 | .unprepare | | | | | | | ||
| 188 | | | | | | | | ||
| 189 | .enable | y | | | | | | ||
| 190 | .disable | y | | | | | | ||
| 191 | .is_enabled | y | | | | | | ||
| 192 | | | | | | | | ||
| 193 | .recalc_rate | | y | | | | | ||
| 194 | .round_rate | | y | | | | | ||
| 195 | .set_rate | | y | | | | | ||
| 196 | | | | | | | | ||
| 197 | .set_parent | | | n | y | n | | ||
| 198 | .get_parent | | | n | y | n | | ||
| 199 | | | | | | | | ||
| 200 | .init | | | | | | | ||
| 201 | ----------------------------------------------------------- | ||
| 202 | |||
| 203 | Finally, register your clock at run-time with a hardware-specific | ||
| 204 | registration function. This function simply populates struct clk_foo's | ||
| 205 | data and then passes the common struct clk parameters to the framework | ||
| 206 | with a call to: | ||
| 207 | |||
| 208 | clk_register(...) | ||
| 209 | |||
| 210 | See the basic clock types in drivers/clk/clk-*.c for examples. | ||
| 211 | |||
| 212 | Part 5 - static initialization of clock data | ||
| 213 | |||
| 214 | For platforms with many clocks (often numbering into the hundreds) it | ||
| 215 | may be desirable to statically initialize some clock data. This | ||
| 216 | presents a problem since the definition of struct clk should be hidden | ||
| 217 | from everyone except for the clock core in drivers/clk/clk.c. | ||
| 218 | |||
| 219 | To get around this problem struct clk's definition is exposed in | ||
| 220 | include/linux/clk-private.h along with some macros for more easily | ||
| 221 | initializing instances of the basic clock types. These clocks must | ||
| 222 | still be initialized with the common clock framework via a call to | ||
| 223 | __clk_init. | ||
| 224 | |||
| 225 | clk-private.h must NEVER be included by code which implements struct | ||
| 226 | clk_ops callbacks, nor must it be included by any logic which pokes | ||
| 227 | around inside of struct clk at run-time. To do so is a layering | ||
| 228 | violation. | ||
| 229 | |||
| 230 | To better enforce this policy, always follow this simple rule: any | ||
| 231 | statically initialized clock data MUST be defined in a separate file | ||
| 232 | from the logic that implements its ops. Basically separate the logic | ||
| 233 | from the data and all is well. | ||
| @@ -47,7 +47,7 @@ maxcpus=n Restrict boot time cpus to n. Say if you have 4 cpus, using · 46 unmodified lines | |||
| 47 | other cpus later online, read FAQ's for more info. | 47 | other cpus later online, read FAQ's for more info. |
| 48 | 48 | ||
| 49 | additional_cpus=n (*) Use this to limit hotpluggable cpus. This option sets | 49 | additional_cpus=n (*) Use this to limit hotpluggable cpus. This option sets |
| 50 | cpu_possible_map = cpu_present_map + additional_cpus | 50 | cpu_possible_mask = cpu_present_mask + additional_cpus |
| 51 | 51 | ||
| 52 | cede_offline={"off","on"} Use this option to disable/enable putting offlined | 52 | cede_offline={"off","on"} Use this option to disable/enable putting offlined |
| 53 | processors to an extended H_CEDE state on | 53 | processors to an extended H_CEDE state on |
| @@ -64,11 +64,11 @@ should only rely on this to count the # of cpus, but *MUST* not rely · 10 unmodified lines | |||
| 64 | on the apicid values in those tables for disabled apics. In the event | 64 | on the apicid values in those tables for disabled apics. In the event |
| 65 | BIOS doesn't mark such hot-pluggable cpus as disabled entries, one could | 65 | BIOS doesn't mark such hot-pluggable cpus as disabled entries, one could |
| 66 | use this parameter "additional_cpus=x" to represent those cpus in the | 66 | use this parameter "additional_cpus=x" to represent those cpus in the |
| 67 | cpu_possible_map. | 67 | cpu_possible_mask. |
| 68 | 68 | ||
| 69 | possible_cpus=n [s390,x86_64] use this to set hotpluggable cpus. | 69 | possible_cpus=n [s390,x86_64] use this to set hotpluggable cpus. |
| 70 | This option sets possible_cpus bits in | 70 | This option sets possible_cpus bits in |
| 71 | cpu_possible_map. Thus keeping the numbers of bits set | 71 | cpu_possible_mask. Thus keeping the numbers of bits set |
| 72 | constant even if the machine gets rebooted. | 72 | constant even if the machine gets rebooted. |
| 73 | 73 | ||
| 74 | CPU maps and such | 74 | CPU maps and such |
| @@ -76,7 +76,7 @@ CPU maps and such · 1 unmodified line | |||
| 76 | [More on cpumaps and primitive to manipulate, please check | 76 | [More on cpumaps and primitive to manipulate, please check |
| 77 | include/linux/cpumask.h that has more descriptive text.] | 77 | include/linux/cpumask.h that has more descriptive text.] |
| 78 | 78 | ||
| 79 | cpu_possible_map: Bitmap of possible CPUs that can ever be available in the | 79 | cpu_possible_mask: Bitmap of possible CPUs that can ever be available in the |
| 80 | system. This is used to allocate some boot time memory for per_cpu variables | 80 | system. This is used to allocate some boot time memory for per_cpu variables |
| 81 | that aren't designed to grow/shrink as CPUs are made available or removed. | 81 | that aren't designed to grow/shrink as CPUs are made available or removed. |
| 82 | Once set during boot time discovery phase, the map is static, i.e no bits | 82 | Once set during boot time discovery phase, the map is static, i.e no bits |
| @@ -84,13 +84,13 @@ are added or removed anytime. Trimming it accurately for your system needs · 1 unmodified line | |||
| 84 | upfront can save some boot time memory. See below for how we use heuristics | 84 | upfront can save some boot time memory. See below for how we use heuristics |
| 85 | in x86_64 case to keep this under check. | 85 | in x86_64 case to keep this under check. |
| 86 | 86 | ||
| 87 | cpu_online_map: Bitmap of all CPUs currently online. Its set in __cpu_up() | 87 | cpu_online_mask: Bitmap of all CPUs currently online. Its set in __cpu_up() |
| 88 | after a cpu is available for kernel scheduling and ready to receive | 88 | after a cpu is available for kernel scheduling and ready to receive |
| 89 | interrupts from devices. Its cleared when a cpu is brought down using | 89 | interrupts from devices. Its cleared when a cpu is brought down using |
| 90 | __cpu_disable(), before which all OS services including interrupts are | 90 | __cpu_disable(), before which all OS services including interrupts are |
| 91 | migrated to another target CPU. | 91 | migrated to another target CPU. |
| 92 | 92 | ||
| 93 | cpu_present_map: Bitmap of CPUs currently present in the system. Not all | 93 | cpu_present_mask: Bitmap of CPUs currently present in the system. Not all |
| 94 | of them may be online. When physical hotplug is processed by the relevant | 94 | of them may be online. When physical hotplug is processed by the relevant |
| 95 | subsystem (e.g ACPI) can change and new bit either be added or removed | 95 | subsystem (e.g ACPI) can change and new bit either be added or removed |
| 96 | from the map depending on the event is hot-add/hot-remove. There are currently | 96 | from the map depending on the event is hot-add/hot-remove. There are currently |
| @@ -99,22 +99,22 @@ at which time hotplug is disabled. · 2 unmodified lines | |||
| 99 | 99 | ||
| 100 | You really dont need to manipulate any of the system cpu maps. They should | 100 | You really dont need to manipulate any of the system cpu maps. They should |
| 101 | be read-only for most use. When setting up per-cpu resources almost always use | 101 | be read-only for most use. When setting up per-cpu resources almost always use |
| 102 | cpu_possible_map/for_each_possible_cpu() to iterate. | 102 | cpu_possible_mask/for_each_possible_cpu() to iterate. |
| 103 | 103 | ||
| 104 | Never use anything other than cpumask_t to represent bitmap of CPUs. | 104 | Never use anything other than cpumask_t to represent bitmap of CPUs. |
| 105 | 105 | ||
| 106 | #include <linux/cpumask.h> | 106 | #include <linux/cpumask.h> |
| 107 | 107 | ||
| 108 | for_each_possible_cpu - Iterate over cpu_possible_map | 108 | for_each_possible_cpu - Iterate over cpu_possible_mask |
| 109 | for_each_online_cpu - Iterate over cpu_online_map | 109 | for_each_online_cpu - Iterate over cpu_online_mask |
| 110 | for_each_present_cpu - Iterate over cpu_present_map | 110 | for_each_present_cpu - Iterate over cpu_present_mask |
| 111 | for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask. | 111 | for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask. |
| 112 | 112 | ||
| 113 | #include <linux/cpu.h> | 113 | #include <linux/cpu.h> |
| 114 | get_online_cpus() and put_online_cpus(): | 114 | get_online_cpus() and put_online_cpus(): |
| 115 | 115 | ||
| 116 | The above calls are used to inhibit cpu hotplug operations. While the | 116 | The above calls are used to inhibit cpu hotplug operations. While the |
| 117 | cpu_hotplug.refcount is non zero, the cpu_online_map will not change. | 117 | cpu_hotplug.refcount is non zero, the cpu_online_mask will not change. |
| 118 | If you merely need to avoid cpus going away, you could also use | 118 | If you merely need to avoid cpus going away, you could also use |
| 119 | preempt_disable() and preempt_enable() for those sections. | 119 | preempt_disable() and preempt_enable() for those sections. |
| 120 | Just remember the critical section cannot call any | 120 | Just remember the critical section cannot call any |
| @@ -36,6 +36,7 @@ drwxr-xr-x 2 root root 0 Feb 8 10:42 state3 · 35 unmodified lines | |||
| 36 | /sys/devices/system/cpu/cpu0/cpuidle/state0: | 36 | /sys/devices/system/cpu/cpu0/cpuidle/state0: |
| 37 | total 0 | 37 | total 0 |
| 38 | -r--r--r-- 1 root root 4096 Feb 8 10:42 desc | 38 | -r--r--r-- 1 root root 4096 Feb 8 10:42 desc |
| 39 | -rw-r--r-- 1 root root 4096 Feb 8 10:42 disable | ||
| 39 | -r--r--r-- 1 root root 4096 Feb 8 10:42 latency | 40 | -r--r--r-- 1 root root 4096 Feb 8 10:42 latency |
| 40 | -r--r--r-- 1 root root 4096 Feb 8 10:42 name | 41 | -r--r--r-- 1 root root 4096 Feb 8 10:42 name |
| 41 | -r--r--r-- 1 root root 4096 Feb 8 10:42 power | 42 | -r--r--r-- 1 root root 4096 Feb 8 10:42 power |
| @@ -45,6 +46,7 @@ total 0 · 3 unmodified lines | |||
| 45 | /sys/devices/system/cpu/cpu0/cpuidle/state1: | 46 | /sys/devices/system/cpu/cpu0/cpuidle/state1: |
| 46 | total 0 | 47 | total 0 |
| 47 | -r--r--r-- 1 root root 4096 Feb 8 10:42 desc | 48 | -r--r--r-- 1 root root 4096 Feb 8 10:42 desc |
| 49 | -rw-r--r-- 1 root root 4096 Feb 8 10:42 disable | ||
| 48 | -r--r--r-- 1 root root 4096 Feb 8 10:42 latency | 50 | -r--r--r-- 1 root root 4096 Feb 8 10:42 latency |
| 49 | -r--r--r-- 1 root root 4096 Feb 8 10:42 name | 51 | -r--r--r-- 1 root root 4096 Feb 8 10:42 name |
| 50 | -r--r--r-- 1 root root 4096 Feb 8 10:42 power | 52 | -r--r--r-- 1 root root 4096 Feb 8 10:42 power |
| @@ -54,6 +56,7 @@ total 0 · 3 unmodified lines | |||
| 54 | /sys/devices/system/cpu/cpu0/cpuidle/state2: | 56 | /sys/devices/system/cpu/cpu0/cpuidle/state2: |
| 55 | total 0 | 57 | total 0 |
| 56 | -r--r--r-- 1 root root 4096 Feb 8 10:42 desc | 58 | -r--r--r-- 1 root root 4096 Feb 8 10:42 desc |
| 59 | -rw-r--r-- 1 root root 4096 Feb 8 10:42 disable | ||
| 57 | -r--r--r-- 1 root root 4096 Feb 8 10:42 latency | 60 | -r--r--r-- 1 root root 4096 Feb 8 10:42 latency |
| 58 | -r--r--r-- 1 root root 4096 Feb 8 10:42 name | 61 | -r--r--r-- 1 root root 4096 Feb 8 10:42 name |
| 59 | -r--r--r-- 1 root root 4096 Feb 8 10:42 power | 62 | -r--r--r-- 1 root root 4096 Feb 8 10:42 power |
| @@ -63,6 +66,7 @@ total 0 · 3 unmodified lines | |||
| 63 | /sys/devices/system/cpu/cpu0/cpuidle/state3: | 66 | /sys/devices/system/cpu/cpu0/cpuidle/state3: |
| 64 | total 0 | 67 | total 0 |
| 65 | -r--r--r-- 1 root root 4096 Feb 8 10:42 desc | 68 | -r--r--r-- 1 root root 4096 Feb 8 10:42 desc |
| 69 | -rw-r--r-- 1 root root 4096 Feb 8 10:42 disable | ||
| 66 | -r--r--r-- 1 root root 4096 Feb 8 10:42 latency | 70 | -r--r--r-- 1 root root 4096 Feb 8 10:42 latency |
| 67 | -r--r--r-- 1 root root 4096 Feb 8 10:42 name | 71 | -r--r--r-- 1 root root 4096 Feb 8 10:42 name |
| 68 | -r--r--r-- 1 root root 4096 Feb 8 10:42 power | 72 | -r--r--r-- 1 root root 4096 Feb 8 10:42 power |
| @@ -72,6 +76,7 @@ total 0 · 3 unmodified lines | |||
| 72 | 76 | ||
| 73 | 77 | ||
| 74 | * desc : Small description about the idle state (string) | 78 | * desc : Small description about the idle state (string) |
| 79 | * disable : Option to disable this idle state (bool) | ||
| 75 | * latency : Latency to exit out of this idle state (in microseconds) | 80 | * latency : Latency to exit out of this idle state (in microseconds) |
| 76 | * name : Name of the idle state (string) | 81 | * name : Name of the idle state (string) |
| 77 | * power : Power consumed while in this idle state (in milliwatts) | 82 | * power : Power consumed while in this idle state (in milliwatts) |
| @@ -75,10 +75,12 @@ less sharing than average you'll need a larger-than-average metadata device. · 74 unmodified lines | |||
| 75 | 75 | ||
| 76 | As a guide, we suggest you calculate the number of bytes to use in the | 76 | As a guide, we suggest you calculate the number of bytes to use in the |
| 77 | metadata device as 48 * $data_dev_size / $data_block_size but round it up | 77 | metadata device as 48 * $data_dev_size / $data_block_size but round it up |
| 78 | to 2MB if the answer is smaller. The largest size supported is 16GB. | 78 | to 2MB if the answer is smaller. If you're creating large numbers of |
| 79 | snapshots which are recording large amounts of change, you may find you | ||
| 80 | need to increase this. | ||
| 79 | 81 | ||
| 80 | If you're creating large numbers of snapshots which are recording large | 82 | The largest size supported is 16GB: If the device is larger, |
| 81 | amounts of change, you may need find you need to increase this. | 83 | a warning will be issued and the excess space will not be used. |
| 82 | 84 | ||
| 83 | Reloading a pool table | 85 | Reloading a pool table |
| 84 | ---------------------- | 86 | ---------------------- |
| @@ -167,6 +169,38 @@ ii) Using an internal snapshot. · 82 unmodified lines | |||
| 167 | 169 | ||
| 168 | dmsetup create snap --table "0 2097152 thin /dev/mapper/pool 1" | 170 | dmsetup create snap --table "0 2097152 thin /dev/mapper/pool 1" |
| 169 | 171 | ||
| 172 | External snapshots | ||
| 173 | ------------------ | ||
| 174 | |||
| 175 | You can use an external _read only_ device as an origin for a | ||
| 176 | thinly-provisioned volume. Any read to an unprovisioned area of the | ||
| 177 | thin device will be passed through to the origin. Writes trigger | ||
| 178 | the allocation of new blocks as usual. | ||
| 179 | |||
| 180 | One use case for this is VM hosts that want to run guests on | ||
| 181 | thinly-provisioned volumes but have the base image on another device | ||
| 182 | (possibly shared between many VMs). | ||
| 183 | |||
| 184 | You must not write to the origin device if you use this technique! | ||
| 185 | Of course, you may write to the thin device and take internal snapshots | ||
| 186 | of the thin volume. | ||
| 187 | |||
| 188 | i) Creating a snapshot of an external device | ||
| 189 | |||
| 190 | This is the same as creating a thin device. | ||
| 191 | You don't mention the origin at this stage. | ||
| 192 | |||
| 193 | dmsetup message /dev/mapper/pool 0 "create_thin 0" | ||
| 194 | |||
| 195 | ii) Using a snapshot of an external device. | ||
| 196 | |||
| 197 | Append an extra parameter to the thin target specifying the origin: | ||
| 198 | |||
| 199 | dmsetup create snap --table "0 2097152 thin /dev/mapper/pool 0 /dev/image" | ||
| 200 | |||
| 201 | N.B. All descendants (internal snapshots) of this snapshot require the | ||
| 202 | same extra origin parameter. | ||
| 203 | |||
| 170 | Deactivation | 204 | Deactivation |
| 171 | ------------ | 205 | ------------ |
| 172 | 206 | ||
| @@ -189,7 +223,13 @@ i) Constructor · 16 unmodified lines | |||
| 189 | <low water mark (blocks)> [<number of feature args> [<arg>]*] | 223 | <low water mark (blocks)> [<number of feature args> [<arg>]*] |
| 190 | 224 | ||
| 191 | Optional feature arguments: | 225 | Optional feature arguments: |
| 192 | - 'skip_block_zeroing': skips the zeroing of newly-provisioned blocks. | 226 | |
| 227 | skip_block_zeroing: Skip the zeroing of newly-provisioned blocks. | ||
| 228 | |||
| 229 | ignore_discard: Disable discard support. | ||
| 230 | |||
| 231 | no_discard_passdown: Don't pass discards down to the underlying | ||
| 232 | data device, but just remove the mapping. | ||
| 193 | 233 | ||
| 194 | Data block size must be between 64KB (128 sectors) and 1GB | 234 | Data block size must be between 64KB (128 sectors) and 1GB |
| 195 | (2097152 sectors) inclusive. | 235 | (2097152 sectors) inclusive. |
| @@ -237,16 +277,6 @@ iii) Messages · 41 unmodified lines | |||
| 237 | 277 | ||
| 238 | Deletes a thin device. Irreversible. | 278 | Deletes a thin device. Irreversible. |
| 239 | 279 | ||
| 240 | trim <dev id> <new size in sectors> | ||
| 241 | |||
| 242 | Delete mappings from the end of a thin device. Irreversible. | ||
| 243 | You might want to use this if you're reducing the size of | ||
| 244 | your thinly-provisioned device. In many cases, due to the | ||
| 245 | sharing of blocks between devices, it is not possible to | ||
| 246 | determine in advance how much space 'trim' will release. (In | ||
| 247 | future a userspace tool might be able to perform this | ||
| 248 | calculation.) | ||
| 249 | |||
| 250 | set_transaction_id <current id> <new id> | 280 | set_transaction_id <current id> <new id> |
| 251 | 281 | ||
| 252 | Userland volume managers, such as LVM, need a way to | 282 | Userland volume managers, such as LVM, need a way to |
| @@ -262,7 +292,7 @@ iii) Messages · 9 unmodified lines | |||
| 262 | 292 | ||
| 263 | i) Constructor | 293 | i) Constructor |
| 264 | 294 | ||
| 265 | thin <pool dev> <dev id> | 295 | thin <pool dev> <dev id> [<external origin dev>] |
| 266 | 296 | ||
| 267 | pool dev: | 297 | pool dev: |
| 268 | the thin-pool device, e.g. /dev/mapper/my_pool or 253:0 | 298 | the thin-pool device, e.g. /dev/mapper/my_pool or 253:0 |
| @@ -271,6 +301,11 @@ i) Constructor · 2 unmodified lines | |||
| 271 | the internal device identifier of the device to be | 301 | the internal device identifier of the device to be |
| 272 | activated. | 302 | activated. |
| 273 | 303 | ||
| 304 | external origin dev: | ||
| 305 | an optional block device outside the pool to be treated as a | ||
| 306 | read-only snapshot origin: reads to unprovisioned areas of the | ||
| 307 | thin target will be mapped to this device. | ||
| 308 | |||
| 274 | The pool doesn't store any size against the thin devices. If you | 309 | The pool doesn't store any size against the thin devices. If you |
| 275 | load a thin target that is smaller than you've been using previously, | 310 | load a thin target that is smaller than you've been using previously, |
| 276 | then you'll have no access to blocks mapped beyond the end. If you | 311 | then you'll have no access to blocks mapped beyond the end. If you |
| @@ -0,0 +1,194 @@ | |||
| 1 | dm-verity | ||
| 2 | ========== | ||
| 3 | |||
| 4 | Device-Mapper's "verity" target provides transparent integrity checking of | ||
| 5 | block devices using a cryptographic digest provided by the kernel crypto API. | ||
| 6 | This target is read-only. | ||
| 7 | |||
| 8 | Construction Parameters | ||
| 9 | ======================= | ||
| 10 | <version> <dev> <hash_dev> <hash_start> | ||
| 11 | <data_block_size> <hash_block_size> | ||
| 12 | <num_data_blocks> <hash_start_block> | ||
| 13 | <algorithm> <digest> <salt> | ||
| 14 | |||
| 15 | <version> | ||
| 16 | This is the version number of the on-disk format. | ||
| 17 | |||
| 18 | 0 is the original format used in the Chromium OS. | ||
| 19 | The salt is appended when hashing, digests are stored continuously and | ||
| 20 | the rest of the block is padded with zeros. | ||
| 21 | |||
| 22 | 1 is the current format that should be used for new devices. | ||
| 23 | The salt is prepended when hashing and each digest is | ||
| 24 | padded with zeros to the power of two. | ||
| 25 | |||
| 26 | <dev> | ||
| 27 | This is the device containing the data the integrity of which needs to be | ||
| 28 | checked. It may be specified as a path, like /dev/sdaX, or a device number, | ||
| 29 | <major>:<minor>. | ||
| 30 | |||
| 31 | <hash_dev> | ||
| 32 | This is the device that that supplies the hash tree data. It may be | ||
| 33 | specified similarly to the device path and may be the same device. If the | ||
| 34 | same device is used, the hash_start should be outside of the dm-verity | ||
| 35 | configured device size. | ||
| 36 | |||
| 37 | <data_block_size> | ||
| 38 | The block size on a data device. Each block corresponds to one digest on | ||
| 39 | the hash device. | ||
| 40 | |||
| 41 | <hash_block_size> | ||
| 42 | The size of a hash block. | ||
| 43 | |||
| 44 | <num_data_blocks> | ||
| 45 | The number of data blocks on the data device. Additional blocks are | ||
| 46 | inaccessible. You can place hashes to the same partition as data, in this | ||
| 47 | case hashes are placed after <num_data_blocks>. | ||
| 48 | |||
| 49 | <hash_start_block> | ||
| 50 | This is the offset, in <hash_block_size>-blocks, from the start of hash_dev | ||
| 51 | to the root block of the hash tree. | ||
| 52 | |||
| 53 | <algorithm> | ||
| 54 | The cryptographic hash algorithm used for this device. This should | ||
| 55 | be the name of the algorithm, like "sha1". | ||
| 56 | |||
| 57 | <digest> | ||
| 58 | The hexadecimal encoding of the cryptographic hash of the root hash block | ||
| 59 | and the salt. This hash should be trusted as there is no other authenticity | ||
| 60 | beyond this point. | ||
| 61 | |||
| 62 | <salt> | ||
| 63 | The hexadecimal encoding of the salt value. | ||
| 64 | |||
| 65 | Theory of operation | ||
| 66 | =================== | ||
| 67 | |||
| 68 | dm-verity is meant to be setup as part of a verified boot path. This | ||
| 69 | may be anything ranging from a boot using tboot or trustedgrub to just | ||
| 70 | booting from a known-good device (like a USB drive or CD). | ||
| 71 | |||
| 72 | When a dm-verity device is configured, it is expected that the caller | ||
| 73 | has been authenticated in some way (cryptographic signatures, etc). | ||
| 74 | After instantiation, all hashes will be verified on-demand during | ||
| 75 | disk access. If they cannot be verified up to the root node of the | ||
| 76 | tree, the root hash, then the I/O will fail. This should identify | ||
| 77 | tampering with any data on the device and the hash data. | ||
| 78 | |||
| 79 | Cryptographic hashes are used to assert the integrity of the device on a | ||
| 80 | per-block basis. This allows for a lightweight hash computation on first read | ||
| 81 | into the page cache. Block hashes are stored linearly-aligned to the nearest | ||
| 82 | block the size of a page. | ||
| 83 | |||
| 84 | Hash Tree | ||
| 85 | --------- | ||
| 86 | |||
| 87 | Each node in the tree is a cryptographic hash. If it is a leaf node, the hash | ||
| 88 | is of some block data on disk. If it is an intermediary node, then the hash is | ||
| 89 | of a number of child nodes. | ||
| 90 | |||
| 91 | Each entry in the tree is a collection of neighboring nodes that fit in one | ||
| 92 | block. The number is determined based on block_size and the size of the | ||
| 93 | selected cryptographic digest algorithm. The hashes are linearly-ordered in | ||
| 94 | this entry and any unaligned trailing space is ignored but included when | ||
| 95 | calculating the parent node. | ||
| 96 | |||
| 97 | The tree looks something like: | ||
| 98 | |||
| 99 | alg = sha256, num_blocks = 32768, block_size = 4096 | ||
| 100 | |||
| 101 | [ root ] | ||
| 102 | / . . . \ | ||
| 103 | [entry_0] [entry_1] | ||
| 104 | / . . . \ . . . \ | ||
| 105 | [entry_0_0] . . . [entry_0_127] . . . . [entry_1_127] | ||
| 106 | / ... \ / . . . \ / \ | ||
| 107 | blk_0 ... blk_127 blk_16256 blk_16383 blk_32640 . . . blk_32767 | ||
| 108 | |||
| 109 | |||
| 110 | On-disk format | ||
| 111 | ============== | ||
| 112 | |||
| 113 | Below is the recommended on-disk format. The verity kernel code does not | ||
| 114 | read the on-disk header. It only reads the hash blocks which directly | ||
| 115 | follow the header. It is expected that a user-space tool will verify the | ||
| 116 | integrity of the verity_header and then call dmsetup with the correct | ||
| 117 | parameters. Alternatively, the header can be omitted and the dmsetup | ||
| 118 | parameters can be passed via the kernel command-line in a rooted chain | ||
| 119 | of trust where the command-line is verified. | ||
| 120 | |||
| 121 | The on-disk format is especially useful in cases where the hash blocks | ||
| 122 | are on a separate partition. The magic number allows easy identification | ||
| 123 | of the partition contents. Alternatively, the hash blocks can be stored | ||
| 124 | in the same partition as the data to be verified. In such a configuration | ||
| 125 | the filesystem on the partition would be sized a little smaller than | ||
| 126 | the full-partition, leaving room for the hash blocks. | ||
| 127 | |||
| 128 | struct superblock { | ||
| 129 | uint8_t signature[8] | ||
| 130 | "verity\0\0"; | ||
| 131 | |||
| 132 | uint8_t version; | ||
| 133 | 1 - current format | ||
| 134 | |||
| 135 | uint8_t data_block_bits; | ||
| 136 | log2(data block size) | ||
| 137 | |||
| 138 | uint8_t hash_block_bits; | ||
| 139 | log2(hash block size) | ||
| 140 | |||
| 141 | uint8_t pad1[1]; | ||
| 142 | zero padding | ||
| 143 | |||
| 144 | uint16_t salt_size; | ||
| 145 | big-endian salt size | ||
| 146 | |||
| 147 | uint8_t pad2[2]; | ||
| 148 | zero padding | ||
| 149 | |||
| 150 | uint32_t data_blocks_hi; | ||
| 151 | big-endian high 32 bits of the 64-bit number of data blocks | ||
| 152 | |||
| 153 | uint32_t data_blocks_lo; | ||
| 154 | big-endian low 32 bits of the 64-bit number of data blocks | ||
| 155 | |||
| 156 | uint8_t algorithm[16]; | ||
| 157 | cryptographic algorithm | ||
| 158 | |||
| 159 | uint8_t salt[384]; | ||
| 160 | salt (the salt size is specified above) | ||
| 161 | |||
| 162 | uint8_t pad3[88]; | ||
| 163 | zero padding to 512-byte boundary | ||
| 164 | } | ||
| 165 | |||
| 166 | Directly following the header (and with sector number padded to the next hash | ||
| 167 | block boundary) are the hash blocks which are stored a depth at a time | ||
| 168 | (starting from the root), sorted in order of increasing index. | ||
| 169 | |||
| 170 | Status | ||
| 171 | ====== | ||
| 172 | V (for Valid) is returned if every check performed so far was valid. | ||
| 173 | If any check failed, C (for Corruption) is returned. | ||
| 174 | |||
| 175 | Example | ||
| 176 | ======= | ||
| 177 | |||
| 178 | Setup a device: | ||
| 179 | dmsetup create vroot --table \ | ||
| 180 | "0 2097152 "\ | ||
| 181 | "verity 1 /dev/sda1 /dev/sda2 4096 4096 2097152 1 "\ | ||
| 182 | "4392712ba01368efdf14b05c76f9e4df0d53664630b5d48632ed17a137f39076 "\ | ||
| 183 | "1234000000000000000000000000000000000000000000000000000000000000" | ||
| 184 | |||
| 185 | A command line tool veritysetup is available to compute or verify | ||
| 186 | the hash tree or activate the kernel driver. This is available from | ||
| 187 | the LVM2 upstream repository and may be supplied as a package called | ||
| 188 | device-mapper-verity-tools: | ||
| 189 | git://sources.redhat.com/git/lvm2 | ||
| 190 | http://sourceware.org/git/?p=lvm2.git | ||
| 191 | http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/verity?cvsroot=lvm2 | ||
| 192 | |||
| 193 | veritysetup -a vroot /dev/sda1 /dev/sda2 \ | ||
| 194 | 4392712ba01368efdf14b05c76f9e4df0d53664630b5d48632ed17a137f39076 | ||
| @@ -0,0 +1,38 @@ | |||
| 1 | * Advanced Interrupt Controller (AIC) | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: Should be "atmel,<chip>-aic" | ||
| 5 | - interrupt-controller: Identifies the node as an interrupt controller. | ||
| 6 | - interrupt-parent: For single AIC system, it is an empty property. | ||
| 7 | - #interrupt-cells: The number of cells to define the interrupts. It sould be 2. | ||
| 8 | The first cell is the IRQ number (aka "Peripheral IDentifier" on datasheet). | ||
| 9 | The second cell is used to specify flags: | ||
| 10 | bits[3:0] trigger type and level flags: | ||
| 11 | 1 = low-to-high edge triggered. | ||
| 12 | 2 = high-to-low edge triggered. | ||
| 13 | 4 = active high level-sensitive. | ||
| 14 | 8 = active low level-sensitive. | ||
| 15 | Valid combinations are 1, 2, 3, 4, 8. | ||
| 16 | Default flag for internal sources should be set to 4 (active high). | ||
| 17 | - reg: Should contain AIC registers location and length | ||
| 18 | |||
| 19 | Examples: | ||
| 20 | /* | ||
| 21 | * AIC | ||
| 22 | */ | ||
| 23 | aic: interrupt-controller@fffff000 { | ||
| 24 | compatible = "atmel,at91rm9200-aic"; | ||
| 25 | interrupt-controller; | ||
| 26 | interrupt-parent; | ||
| 27 | #interrupt-cells = <2>; | ||
| 28 | reg = <0xfffff000 0x200>; | ||
| 29 | }; | ||
| 30 | |||
| 31 | /* | ||
| 32 | * An interrupt generating device that is wired to an AIC. | ||
| 33 | */ | ||
| 34 | dma: dma-controller@ffffec00 { | ||
| 35 | compatible = "atmel,at91sam9g45-dma"; | ||
| 36 | reg = <0xffffec00 0x200>; | ||
| 37 | interrupts = <21 4>; | ||
| 38 | }; | ||
| @@ -0,0 +1,92 @@ | |||
| 1 | Atmel AT91 device tree bindings. | ||
| 2 | ================================ | ||
| 3 | |||
| 4 | PIT Timer required properties: | ||
| 5 | - compatible: Should be "atmel,at91sam9260-pit" | ||
| 6 | - reg: Should contain registers location and length | ||
| 7 | - interrupts: Should contain interrupt for the PIT which is the IRQ line | ||
| 8 | shared across all System Controller members. | ||
| 9 | |||
| 10 | TC/TCLIB Timer required properties: | ||
| 11 | - compatible: Should be "atmel,<chip>-pit". | ||
| 12 | <chip> can be "at91rm9200" or "at91sam9x5" | ||
| 13 | - reg: Should contain registers location and length | ||
| 14 | - interrupts: Should contain all interrupts for the TC block | ||
| 15 | Note that you can specify several interrupt cells if the TC | ||
| 16 | block has one interrupt per channel. | ||
| 17 | |||
| 18 | Examples: | ||
| 19 | |||
| 20 | One interrupt per TC block: | ||
| 21 | tcb0: timer@fff7c000 { | ||
| 22 | compatible = "atmel,at91rm9200-tcb"; | ||
| 23 | reg = <0xfff7c000 0x100>; | ||
| 24 | interrupts = <18 4>; | ||
| 25 | }; | ||
| 26 | |||
| 27 | One interrupt per TC channel in a TC block: | ||
| 28 | tcb1: timer@fffdc000 { | ||
| 29 | compatible = "atmel,at91rm9200-tcb"; | ||
| 30 | reg = <0xfffdc000 0x100>; | ||
| 31 | interrupts = <26 4 27 4 28 4>; | ||
| 32 | }; | ||
| 33 | |||
| 34 | RSTC Reset Controller required properties: | ||
| 35 | - compatible: Should be "atmel,<chip>-rstc". | ||
| 36 | <chip> can be "at91sam9260" or "at91sam9g45" | ||
| 37 | - reg: Should contain registers location and length | ||
| 38 | |||
| 39 | Example: | ||
| 40 | |||
| 41 | rstc@fffffd00 { | ||
| 42 | compatible = "atmel,at91sam9260-rstc"; | ||
| 43 | reg = <0xfffffd00 0x10>; | ||
| 44 | }; | ||
| 45 | |||
| 46 | RAMC SDRAM/DDR Controller required properties: | ||
| 47 | - compatible: Should be "atmel,at91sam9260-sdramc", | ||
| 48 | "atmel,at91sam9g45-ddramc", | ||
| 49 | - reg: Should contain registers location and length | ||
| 50 | For at91sam9263 and at91sam9g45 you must specify 2 entries. | ||
| 51 | |||
| 52 | Examples: | ||
| 53 | |||
| 54 | ramc0: ramc@ffffe800 { | ||
| 55 | compatible = "atmel,at91sam9g45-ddramc"; | ||
| 56 | reg = <0xffffe800 0x200>; | ||
| 57 | }; | ||
| 58 | |||
| 59 | ramc0: ramc@ffffe400 { | ||
| 60 | compatible = "atmel,at91sam9g45-ddramc"; | ||
| 61 | reg = <0xffffe400 0x200 | ||
| 62 | 0xffffe600 0x200>; | ||
| 63 | }; | ||
| 64 | |||
| 65 | SHDWC Shutdown Controller | ||
| 66 | |||
| 67 | required properties: | ||
| 68 | - compatible: Should be "atmel,<chip>-shdwc". | ||
| 69 | <chip> can be "at91sam9260", "at91sam9rl" or "at91sam9x5". | ||
| 70 | - reg: Should contain registers location and length | ||
| 71 | |||
| 72 | optional properties: | ||
| 73 | - atmel,wakeup-mode: String, operation mode of the wakeup mode. | ||
| 74 | Supported values are: "none", "high", "low", "any". | ||
| 75 | - atmel,wakeup-counter: Counter on Wake-up 0 (between 0x0 and 0xf). | ||
| 76 | |||
| 77 | optional at91sam9260 properties: | ||
| 78 | - atmel,wakeup-rtt-timer: boolean to enable Real-time Timer Wake-up. | ||
| 79 | |||
| 80 | optional at91sam9rl properties: | ||
| 81 | - atmel,wakeup-rtc-timer: boolean to enable Real-time Clock Wake-up. | ||
| 82 | - atmel,wakeup-rtt-timer: boolean to enable Real-time Timer Wake-up. | ||
| 83 | |||
| 84 | optional at91sam9x5 properties: | ||
| 85 | - atmel,wakeup-rtc-timer: boolean to enable Real-time Clock Wake-up. | ||
| 86 | |||
| 87 | Example: | ||
| 88 | |||
| 89 | rstc@fffffd00 { | ||
| 90 | compatible = "atmel,at91sam9260-rstc"; | ||
| 91 | reg = <0xfffffd00 0x10>; | ||
| 92 | }; | ||
| @@ -0,0 +1,11 @@ | |||
| 1 | * Power Management Controller (PMC) | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: Should be "atmel,at91rm9200-pmc" | ||
| 5 | - reg: Should contain PMC registers location and length | ||
| 6 | |||
| 7 | Examples: | ||
| 8 | pmc: pmc@fffffc00 { | ||
| 9 | compatible = "atmel,at91rm9200-pmc"; | ||
| 10 | reg = <0xfffffc00 0x100>; | ||
| 11 | }; | ||
| @@ -28,3 +28,25 @@ Required root node properties: · 27 unmodified lines | |||
| 28 | i.MX6 Quad SABRE Lite Board | 28 | i.MX6 Quad SABRE Lite Board |
| 29 | Required root node properties: | 29 | Required root node properties: |
| 30 | - compatible = "fsl,imx6q-sabrelite", "fsl,imx6q"; | 30 | - compatible = "fsl,imx6q-sabrelite", "fsl,imx6q"; |
| 31 | |||
| 32 | Generic i.MX boards | ||
| 33 | ------------------- | ||
| 34 | |||
| 35 | No iomux setup is done for these boards, so this must have been configured | ||
| 36 | by the bootloader for boards to work with the generic bindings. | ||
| 37 | |||
| 38 | i.MX27 generic board | ||
| 39 | Required root node properties: | ||
| 40 | - compatible = "fsl,imx27"; | ||
| 41 | |||
| 42 | i.MX51 generic board | ||
| 43 | Required root node properties: | ||
| 44 | - compatible = "fsl,imx51"; | ||
| 45 | |||
| 46 | i.MX53 generic board | ||
| 47 | Required root node properties: | ||
| 48 | - compatible = "fsl,imx53"; | ||
| 49 | |||
| 50 | i.MX6q generic board | ||
| 51 | Required root node properties: | ||
| 52 | - compatible = "fsl,imx6q"; | ||
| @@ -0,0 +1,6 @@ | |||
| 1 | Marvell Platforms Device Tree Bindings | ||
| 2 | ---------------------------------------------------- | ||
| 3 | |||
| 4 | PXA168 Aspenite Board | ||
| 5 | Required root node properties: | ||
| 6 | - compatible = "mrvl,pxa168-aspenite", "mrvl,pxa168"; | ||
| @@ -0,0 +1,27 @@ | |||
| 1 | * OMAP Interrupt Controller | ||
| 2 | |||
| 3 | OMAP2/3 are using a TI interrupt controller that can support several | ||
| 4 | configurable number of interrupts. | ||
| 5 | |||
| 6 | Main node required properties: | ||
| 7 | |||
| 8 | - compatible : should be: | ||
| 9 | "ti,omap2-intc" | ||
| 10 | - interrupt-controller : Identifies the node as an interrupt controller | ||
| 11 | - #interrupt-cells : Specifies the number of cells needed to encode an | ||
| 12 | interrupt source. The type shall be a <u32> and the value shall be 1. | ||
| 13 | |||
| 14 | The cell contains the interrupt number in the range [0-128]. | ||
| 15 | - ti,intc-size: Number of interrupts handled by the interrupt controller. | ||
| 16 | - reg: physical base address and size of the intc registers map. | ||
| 17 | |||
| 18 | Example: | ||
| 19 | |||
| 20 | intc: interrupt-controller@1 { | ||
| 21 | compatible = "ti,omap2-intc"; | ||
| 22 | interrupt-controller; | ||
| 23 | #interrupt-cells = <1>; | ||
| 24 | ti,intc-size = <96>; | ||
| 25 | reg = <0x48200000 0x1000>; | ||
| 26 | }; | ||
| 27 | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | ST SPEAr Platforms Device Tree Bindings | ||
| 2 | --------------------------------------- | ||
| 3 | |||
| 4 | Boards with the ST SPEAr600 SoC shall have the following properties: | ||
| 5 | |||
| 6 | Required root node property: | ||
| 7 | |||
| 8 | compatible = "st,spear600"; | ||
| @@ -0,0 +1,100 @@ | |||
| 1 | Embedded Memory Controller | ||
| 2 | |||
| 3 | Properties: | ||
| 4 | - name : Should be emc | ||
| 5 | - #address-cells : Should be 1 | ||
| 6 | - #size-cells : Should be 0 | ||
| 7 | - compatible : Should contain "nvidia,tegra20-emc". | ||
| 8 | - reg : Offset and length of the register set for the device | ||
| 9 | - nvidia,use-ram-code : If present, the sub-nodes will be addressed | ||
| 10 | and chosen using the ramcode board selector. If omitted, only one | ||
| 11 | set of tables can be present and said tables will be used | ||
| 12 | irrespective of ram-code configuration. | ||
| 13 | |||
| 14 | Child device nodes describe the memory settings for different configurations and clock rates. | ||
| 15 | |||
| 16 | Example: | ||
| 17 | |||
| 18 | emc@7000f400 { | ||
| 19 | #address-cells = < 1 >; | ||
| 20 | #size-cells = < 0 >; | ||
| 21 | compatible = "nvidia,tegra20-emc"; | ||
| 22 | reg = <0x7000f4000 0x200>; | ||
| 23 | } | ||
| 24 | |||
| 25 | |||
| 26 | Embedded Memory Controller ram-code table | ||
| 27 | |||
| 28 | If the emc node has the nvidia,use-ram-code property present, then the | ||
| 29 | next level of nodes below the emc table are used to specify which settings | ||
| 30 | apply for which ram-code settings. | ||
| 31 | |||
| 32 | If the emc node lacks the nvidia,use-ram-code property, this level is omitted | ||
| 33 | and the tables are stored directly under the emc node (see below). | ||
| 34 | |||
| 35 | Properties: | ||
| 36 | |||
| 37 | - name : Should be emc-tables | ||
| 38 | - nvidia,ram-code : the binary representation of the ram-code board strappings | ||
| 39 | for which this node (and children) are valid. | ||
| 40 | |||
| 41 | |||
| 42 | |||
| 43 | Embedded Memory Controller configuration table | ||
| 44 | |||
| 45 | This is a table containing the EMC register settings for the various | ||
| 46 | operating speeds of the memory controller. They are always located as | ||
| 47 | subnodes of the emc controller node. | ||
| 48 | |||
| 49 | There are two ways of specifying which tables to use: | ||
| 50 | |||
| 51 | * The simplest is if there is just one set of tables in the device tree, | ||
| 52 | and they will always be used (based on which frequency is used). | ||
| 53 | This is the preferred method, especially when firmware can fill in | ||
| 54 | this information based on the specific system information and just | ||
| 55 | pass it on to the kernel. | ||
| 56 | |||
| 57 | * The slightly more complex one is when more than one memory configuration | ||
| 58 | might exist on the system. The Tegra20 platform handles this during | ||
| 59 | early boot by selecting one out of possible 4 memory settings based | ||
| 60 | on a 2-pin "ram code" bootstrap setting on the board. The values of | ||
| 61 | these strappings can be read through a register in the SoC, and thus | ||
| 62 | used to select which tables to use. | ||
| 63 | |||
| 64 | Properties: | ||
| 65 | - name : Should be emc-table | ||
| 66 | - compatible : Should contain "nvidia,tegra20-emc-table". | ||
| 67 | - reg : either an opaque enumerator to tell different tables apart, or | ||
| 68 | the valid frequency for which the table should be used (in kHz). | ||
| 69 | - clock-frequency : the clock frequency for the EMC at which this | ||
| 70 | table should be used (in kHz). | ||
| 71 | - nvidia,emc-registers : a 46 word array of EMC registers to be programmed | ||
| 72 | for operation at the 'clock-frequency' setting. | ||
| 73 | The order and contents of the registers are: | ||
| 74 | RC, RFC, RAS, RP, R2W, W2R, R2P, W2P, RD_RCD, WR_RCD, RRD, REXT, | ||
| 75 | WDV, QUSE, QRST, QSAFE, RDV, REFRESH, BURST_REFRESH_NUM, PDEX2WR, | ||
| 76 | PDEX2RD, PCHG2PDEN, ACT2PDEN, AR2PDEN, RW2PDEN, TXSR, TCKE, TFAW, | ||
| 77 | TRPAB, TCLKSTABLE, TCLKSTOP, TREFBW, QUSE_EXTRA, FBIO_CFG6, ODT_WRITE, | ||
| 78 | ODT_READ, FBIO_CFG5, CFG_DIG_DLL, DLL_XFORM_DQS, DLL_XFORM_QUSE, | ||
| 79 | ZCAL_REF_CNT, ZCAL_WAIT_CNT, AUTO_CAL_INTERVAL, CFG_CLKTRIM_0, | ||
| 80 | CFG_CLKTRIM_1, CFG_CLKTRIM_2 | ||
| 81 | |||
| 82 | emc-table@166000 { | ||
| 83 | reg = <166000>; | ||
| 84 | compatible = "nvidia,tegra20-emc-table"; | ||
| 85 | clock-frequency = < 166000 >; | ||
| 86 | nvidia,emc-registers = < 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
| 87 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
| 88 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
| 89 | 0 0 0 0 >; | ||
| 90 | }; | ||
| 91 | |||
| 92 | emc-table@333000 { | ||
| 93 | reg = <333000>; | ||
| 94 | compatible = "nvidia,tegra20-emc-table"; | ||
| 95 | clock-frequency = < 333000 >; | ||
| 96 | nvidia,emc-registers = < 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
| 97 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
| 98 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | ||
| 99 | 0 0 0 0 >; | ||
| 100 | }; | ||
| @@ -0,0 +1,19 @@ | |||
| 1 | NVIDIA Tegra Power Management Controller (PMC) | ||
| 2 | |||
| 3 | Properties: | ||
| 4 | - name : Should be pmc | ||
| 5 | - compatible : Should contain "nvidia,tegra<chip>-pmc". | ||
| 6 | - reg : Offset and length of the register set for the device | ||
| 7 | - nvidia,invert-interrupt : If present, inverts the PMU interrupt signal. | ||
| 8 | The PMU is an external Power Management Unit, whose interrupt output | ||
| 9 | signal is fed into the PMC. This signal is optionally inverted, and then | ||
| 10 | fed into the ARM GIC. The PMC is not involved in the detection or | ||
| 11 | handling of this interrupt signal, merely its inversion. | ||
| 12 | |||
| 13 | Example: | ||
| 14 | |||
| 15 | pmc@7000f400 { | ||
| 16 | compatible = "nvidia,tegra20-pmc"; | ||
| 17 | reg = <0x7000e400 0x400>; | ||
| 18 | nvidia,invert-interrupt; | ||
| 19 | }; | ||
| @@ -0,0 +1,48 @@ | |||
| 1 | * ARM Timer Watchdog | ||
| 2 | |||
| 3 | ARM 11MP, Cortex-A5 and Cortex-A9 are often associated with a per-core | ||
| 4 | Timer-Watchdog (aka TWD), which provides both a per-cpu local timer | ||
| 5 | and watchdog. | ||
| 6 | |||
| 7 | The TWD is usually attached to a GIC to deliver its two per-processor | ||
| 8 | interrupts. | ||
| 9 | |||
| 10 | ** Timer node required properties: | ||
| 11 | |||
| 12 | - compatible : Should be one of: | ||
| 13 | "arm,cortex-a9-twd-timer" | ||
| 14 | "arm,cortex-a5-twd-timer" | ||
| 15 | "arm,arm11mp-twd-timer" | ||
| 16 | |||
| 17 | - interrupts : One interrupt to each core | ||
| 18 | |||
| 19 | - reg : Specify the base address and the size of the TWD timer | ||
| 20 | register window. | ||
| 21 | |||
| 22 | Example: | ||
| 23 | |||
| 24 | twd-timer@2c000600 { | ||
| 25 | compatible = "arm,arm11mp-twd-timer""; | ||
| 26 | reg = <0x2c000600 0x20>; | ||
| 27 | interrupts = <1 13 0xf01>; | ||
| 28 | }; | ||
| 29 | |||
| 30 | ** Watchdog node properties: | ||
| 31 | |||
| 32 | - compatible : Should be one of: | ||
| 33 | "arm,cortex-a9-twd-wdt" | ||
| 34 | "arm,cortex-a5-twd-wdt" | ||
| 35 | "arm,arm11mp-twd-wdt" | ||
| 36 | |||
| 37 | - interrupts : One interrupt to each core | ||
| 38 | |||
| 39 | - reg : Specify the base address and the size of the TWD watchdog | ||
| 40 | register window. | ||
| 41 | |||
| 42 | Example: | ||
| 43 | |||
| 44 | twd-watchdog@2c000620 { | ||
| 45 | compatible = "arm,arm11mp-twd-wdt"; | ||
| 46 | reg = <0x2c000620 0x20>; | ||
| 47 | interrupts = <1 14 0xf01>; | ||
| 48 | }; | ||
| @@ -0,0 +1,146 @@ | |||
| 1 | ARM Versatile Express boards family | ||
| 2 | ----------------------------------- | ||
| 3 | |||
| 4 | ARM's Versatile Express platform consists of a motherboard and one | ||
| 5 | or more daughterboards (tiles). The motherboard provides a set of | ||
| 6 | peripherals. Processor and RAM "live" on the tiles. | ||
| 7 | |||
| 8 | The motherboard and each core tile should be described by a separate | ||
| 9 | Device Tree source file, with the tile's description including | ||
| 10 | the motherboard file using a /include/ directive. As the motherboard | ||
| 11 | can be initialized in one of two different configurations ("memory | ||
| 12 | maps"), care must be taken to include the correct one. | ||
| 13 | |||
| 14 | Required properties in the root node: | ||
| 15 | - compatible value: | ||
| 16 | compatible = "arm,vexpress,<model>", "arm,vexpress"; | ||
| 17 | where <model> is the full tile model name (as used in the tile's | ||
| 18 | Technical Reference Manual), eg.: | ||
| 19 | - for Coretile Express A5x2 (V2P-CA5s): | ||
| 20 | compatible = "arm,vexpress,v2p-ca5s", "arm,vexpress"; | ||
| 21 | - for Coretile Express A9x4 (V2P-CA9): | ||
| 22 | compatible = "arm,vexpress,v2p-ca9", "arm,vexpress"; | ||
| 23 | If a tile comes in several variants or can be used in more then one | ||
| 24 | configuration, the compatible value should be: | ||
| 25 | compatible = "arm,vexpress,<model>,<variant>", \ | ||
| 26 | "arm,vexpress,<model>", "arm,vexpress"; | ||
| 27 | eg: | ||
| 28 | - Coretile Express A15x2 (V2P-CA15) with Tech Chip 1: | ||
| 29 | compatible = "arm,vexpress,v2p-ca15,tc1", \ | ||
| 30 | "arm,vexpress,v2p-ca15", "arm,vexpress"; | ||
| 31 | - LogicTile Express 13MG (V2F-2XV6) running Cortex-A7 (3 cores) SMM: | ||
| 32 | compatible = "arm,vexpress,v2f-2xv6,ca7x3", \ | ||
| 33 | "arm,vexpress,v2f-2xv6", "arm,vexpress"; | ||
| 34 | |||
| 35 | Optional properties in the root node: | ||
| 36 | - tile model name (use name from the tile's Technical Reference | ||
| 37 | Manual, eg. "V2P-CA5s") | ||
| 38 | model = "<model>"; | ||
| 39 | - tile's HBI number (unique ARM's board model ID, visible on the | ||
| 40 | PCB's silkscreen) in hexadecimal transcription: | ||
| 41 | arm,hbi = <0xhbi> | ||
| 42 | eg: | ||
| 43 | - for Coretile Express A5x2 (V2P-CA5s) HBI-0191: | ||
| 44 | arm,hbi = <0x191>; | ||
| 45 | - Coretile Express A9x4 (V2P-CA9) HBI-0225: | ||
| 46 | arm,hbi = <0x225>; | ||
| 47 | |||
| 48 | Top-level standard "cpus" node is required. It must contain a node | ||
| 49 | with device_type = "cpu" property for every available core, eg.: | ||
| 50 | |||
| 51 | cpus { | ||
| 52 | #address-cells = <1>; | ||
| 53 | #size-cells = <0>; | ||
| 54 | |||
| 55 | cpu@0 { | ||
| 56 | device_type = "cpu"; | ||
| 57 | compatible = "arm,cortex-a5"; | ||
| 58 | reg = <0>; | ||
| 59 | }; | ||
| 60 | }; | ||
| 61 | |||
| 62 | The motherboard description file provides a single "motherboard" node | ||
| 63 | using 2 address cells corresponding to the Static Memory Bus used | ||
| 64 | between the motherboard and the tile. The first cell defines the Chip | ||
| 65 | Select (CS) line number, the second cell address offset within the CS. | ||
| 66 | All interrupt lines between the motherboard and the tile are active | ||
| 67 | high and are described using single cell. | ||
| 68 | |||
| 69 | Optional properties of the "motherboard" node: | ||
| 70 | - motherboard's memory map variant: | ||
| 71 | arm,v2m-memory-map = "<name>"; | ||
| 72 | where name is one of: | ||
| 73 | - "rs1" - for RS1 map (i.a. peripherals on CS3); this map is also | ||
| 74 | referred to as "ARM Cortex-A Series memory map": | ||
| 75 | arm,v2m-memory-map = "rs1"; | ||
| 76 | When this property is missing, the motherboard is using the original | ||
| 77 | memory map (also known as the "Legacy memory map", primarily used | ||
| 78 | with the original CoreTile Express A9x4) with peripherals on CS7. | ||
| 79 | |||
| 80 | Motherboard .dtsi files provide a set of labelled peripherals that | ||
| 81 | can be used to obtain required phandle in the tile's "aliases" node: | ||
| 82 | - UARTs, note that the numbers correspond to the physical connectors | ||
| 83 | on the motherboard's back panel: | ||
| 84 | v2m_serial0, v2m_serial1, v2m_serial2 and v2m_serial3 | ||
| 85 | - I2C controllers: | ||
| 86 | v2m_i2c_dvi and v2m_i2c_pcie | ||
| 87 | - SP804 timers: | ||
| 88 | v2m_timer01 and v2m_timer23 | ||
| 89 | |||
| 90 | Current Linux implementation requires a "arm,v2m_timer" alias | ||
| 91 | pointing at one of the motherboard's SP804 timers, if it is to be | ||
| 92 | used as the system timer. This alias should be defined in the | ||
| 93 | motherboard files. | ||
| 94 | |||
| 95 | The tile description must define "ranges", "interrupt-map-mask" and | ||
| 96 | "interrupt-map" properties to translate the motherboard's address | ||
| 97 | and interrupt space into one used by the tile's processor. | ||
| 98 | |||
| 99 | Abbreviated example: | ||
| 100 | |||
| 101 | /dts-v1/; | ||
| 102 | |||
| 103 | / { | ||
| 104 | model = "V2P-CA5s"; | ||
| 105 | arm,hbi = <0x225>; | ||
| 106 | compatible = "arm,vexpress-v2p-ca5s", "arm,vexpress"; | ||
| 107 | interrupt-parent = <&gic>; | ||
| 108 | #address-cells = <1>; | ||
| 109 | #size-cells = <1>; | ||
| 110 | |||
| 111 | chosen { }; | ||
| 112 | |||
| 113 | aliases { | ||
| 114 | serial0 = &v2m_serial0; | ||
| 115 | }; | ||
| 116 | |||
| 117 | cpus { | ||
| 118 | #address-cells = <1>; | ||
| 119 | #size-cells = <0>; | ||
| 120 | |||
| 121 | cpu@0 { | ||
| 122 | device_type = "cpu"; | ||
| 123 | compatible = "arm,cortex-a5"; | ||
| 124 | reg = <0>; | ||
| 125 | }; | ||
| 126 | }; | ||
| 127 | |||
| 128 | gic: interrupt-controller@2c001000 { | ||
| 129 | compatible = "arm,cortex-a9-gic"; | ||
| 130 | #interrupt-cells = <3>; | ||
| 131 | #address-cells = <0>; | ||
| 132 | interrupt-controller; | ||
| 133 | reg = <0x2c001000 0x1000>, | ||
| 134 | <0x2c000100 0x100>; | ||
| 135 | }; | ||
| 136 | |||
| 137 | motherboard { | ||
| 138 | /* CS0 is visible at 0x08000000 */ | ||
| 139 | ranges = <0 0 0x08000000 0x04000000>; | ||
| 140 | interrupt-map-mask = <0 0 63>; | ||
| 141 | /* Active high IRQ 0 is connected to GIC's SPI0 */ | ||
| 142 | interrupt-map = <0 0 0 &gic 0 0 4>; | ||
| 143 | }; | ||
| 144 | }; | ||
| 145 | |||
| 146 | /include/ "vexpress-v2m-rs1.dtsi" | ||
| @@ -0,0 +1,30 @@ | |||
| 1 | * NVIDIA Tegra APB DMA controller | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: Should be "nvidia,<chip>-apbdma" | ||
| 5 | - reg: Should contain DMA registers location and length. This shuld include | ||
| 6 | all of the per-channel registers. | ||
| 7 | - interrupts: Should contain all of the per-channel DMA interrupts. | ||
| 8 | |||
| 9 | Examples: | ||
| 10 | |||
| 11 | apbdma: dma@6000a000 { | ||
| 12 | compatible = "nvidia,tegra20-apbdma"; | ||
| 13 | reg = <0x6000a000 0x1200>; | ||
| 14 | interrupts = < 0 136 0x04 | ||
| 15 | 0 137 0x04 | ||
| 16 | 0 138 0x04 | ||
| 17 | 0 139 0x04 | ||
| 18 | 0 140 0x04 | ||
| 19 | 0 141 0x04 | ||
| 20 | 0 142 0x04 | ||
| 21 | 0 143 0x04 | ||
| 22 | 0 144 0x04 | ||
| 23 | 0 145 0x04 | ||
| 24 | 0 146 0x04 | ||
| 25 | 0 147 0x04 | ||
| 26 | 0 148 0x04 | ||
| 27 | 0 149 0x04 | ||
| 28 | 0 150 0x04 | ||
| 29 | 0 151 0x04 >; | ||
| 30 | }; | ||
| @@ -0,0 +1,36 @@ | |||
| 1 | OMAP GPIO controller bindings | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: | ||
| 5 | - "ti,omap2-gpio" for OMAP2 controllers | ||
| 6 | - "ti,omap3-gpio" for OMAP3 controllers | ||
| 7 | - "ti,omap4-gpio" for OMAP4 controllers | ||
| 8 | - #gpio-cells : Should be two. | ||
| 9 | - first cell is the pin number | ||
| 10 | - second cell is used to specify optional parameters (unused) | ||
| 11 | - gpio-controller : Marks the device node as a GPIO controller. | ||
| 12 | - #interrupt-cells : Should be 2. | ||
| 13 | - interrupt-controller: Mark the device node as an interrupt controller | ||
| 14 | The first cell is the GPIO number. | ||
| 15 | The second cell is used to specify flags: | ||
| 16 | bits[3:0] trigger type and level flags: | ||
| 17 | 1 = low-to-high edge triggered. | ||
| 18 | 2 = high-to-low edge triggered. | ||
| 19 | 4 = active high level-sensitive. | ||
| 20 | 8 = active low level-sensitive. | ||
| 21 | |||
| 22 | OMAP specific properties: | ||
| 23 | - ti,hwmods: Name of the hwmod associated to the GPIO: | ||
| 24 | "gpio<X>", <X> being the 1-based instance number from the HW spec | ||
| 25 | |||
| 26 | |||
| 27 | Example: | ||
| 28 | |||
| 29 | gpio4: gpio4 { | ||
| 30 | compatible = "ti,omap4-gpio"; | ||
| 31 | ti,hwmods = "gpio4"; | ||
| 32 | #gpio-cells = <2>; | ||
| 33 | gpio-controller; | ||
| 34 | #interrupt-cells = <2>; | ||
| 35 | interrupt-controller; | ||
| 36 | }; | ||
| @@ -0,0 +1,23 @@ | |||
| 1 | twl4030 GPIO controller bindings | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: | ||
| 5 | - "ti,twl4030-gpio" for twl4030 GPIO controller | ||
| 6 | - #gpio-cells : Should be two. | ||
| 7 | - first cell is the pin number | ||
| 8 | - second cell is used to specify optional parameters (unused) | ||
| 9 | - gpio-controller : Marks the device node as a GPIO controller. | ||
| 10 | - #interrupt-cells : Should be 2. | ||
| 11 | - interrupt-controller: Mark the device node as an interrupt controller | ||
| 12 | The first cell is the GPIO number. | ||
| 13 | The second cell is not used. | ||
| 14 | |||
| 15 | Example: | ||
| 16 | |||
| 17 | twl_gpio: gpio { | ||
| 18 | compatible = "ti,twl4030-gpio"; | ||
| 19 | #gpio-cells = <2>; | ||
| 20 | gpio-controller; | ||
| 21 | #interrupt-cells = <2>; | ||
| 22 | interrupt-controller; | ||
| 23 | }; | ||
| @@ -0,0 +1,20 @@ | |||
| 1 | * Atmel GPIO controller (PIO) | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: "atmel,<chip>-gpio", where <chip> is at91rm9200 or at91sam9x5. | ||
| 5 | - reg: Should contain GPIO controller registers location and length | ||
| 6 | - interrupts: Should be the port interrupt shared by all the pins. | ||
| 7 | - #gpio-cells: Should be two. The first cell is the pin number and | ||
| 8 | the second cell is used to specify optional parameters (currently | ||
| 9 | unused). | ||
| 10 | - gpio-controller: Marks the device node as a GPIO controller. | ||
| 11 | |||
| 12 | Example: | ||
| 13 | pioA: gpio@fffff200 { | ||
| 14 | compatible = "atmel,at91rm9200-gpio"; | ||
| 15 | reg = <0xfffff200 0x100>; | ||
| 16 | interrupts = <2 4>; | ||
| 17 | #gpio-cells = <2>; | ||
| 18 | gpio-controller; | ||
| 19 | }; | ||
| 20 | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | Device-Tree bindings for i2c gpio driver | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible = "i2c-gpio"; | ||
| 5 | - gpios: sda and scl gpio | ||
| 6 | |||
| 7 | |||
| 8 | Optional properties: | ||
| 9 | - i2c-gpio,sda-open-drain: sda as open drain | ||
| 10 | - i2c-gpio,scl-open-drain: scl as open drain | ||
| 11 | - i2c-gpio,scl-output-only: scl as output only | ||
| 12 | - i2c-gpio,delay-us: delay between GPIO operations (may depend on each platform) | ||
| 13 | - i2c-gpio,timeout-ms: timeout to get data | ||
| 14 | |||
| 15 | Example nodes: | ||
| 16 | |||
| 17 | i2c@0 { | ||
| 18 | compatible = "i2c-gpio"; | ||
| 19 | gpios = <&pioA 23 0 /* sda */ | ||
| 20 | &pioA 24 0 /* scl */ | ||
| 21 | >; | ||
| 22 | i2c-gpio,sda-open-drain; | ||
| 23 | i2c-gpio,scl-open-drain; | ||
| 24 | i2c-gpio,delay-us = <2>; /* ~100 kHz */ | ||
| 25 | #address-cells = <1>; | ||
| 26 | #size-cells = <0>; | ||
| 27 | |||
| 28 | rv3029c2@56 { | ||
| 29 | compatible = "rv3029c2"; | ||
| 30 | reg = <0x56>; | ||
| 31 | }; | ||
| 32 | }; | ||
| @@ -1,8 +1,40 @@ | |||
| 1 | NVIDIA Tegra 2 GPIO controller | 1 | NVIDIA Tegra GPIO controller |
| 2 | 2 | ||
| 3 | Required properties: | 3 | Required properties: |
| 4 | - compatible : "nvidia,tegra20-gpio" | 4 | - compatible : "nvidia,tegra<chip>-gpio" |
| 5 | - reg : Physical base address and length of the controller's registers. | ||
| 6 | - interrupts : The interrupt outputs from the controller. For Tegra20, | ||
| 7 | there should be 7 interrupts specified, and for Tegra30, there should | ||
| 8 | be 8 interrupts specified. | ||
| 5 | - #gpio-cells : Should be two. The first cell is the pin number and the | 9 | - #gpio-cells : Should be two. The first cell is the pin number and the |
| 6 | second cell is used to specify optional parameters: | 10 | second cell is used to specify optional parameters: |
| 7 | - bit 0 specifies polarity (0 for normal, 1 for inverted) | 11 | - bit 0 specifies polarity (0 for normal, 1 for inverted) |
| 8 | - gpio-controller : Marks the device node as a GPIO controller. | 12 | - gpio-controller : Marks the device node as a GPIO controller. |
| 13 | - #interrupt-cells : Should be 2. | ||
| 14 | The first cell is the GPIO number. | ||
| 15 | The second cell is used to specify flags: | ||
| 16 | bits[3:0] trigger type and level flags: | ||
| 17 | 1 = low-to-high edge triggered. | ||
| 18 | 2 = high-to-low edge triggered. | ||
| 19 | 4 = active high level-sensitive. | ||
| 20 | 8 = active low level-sensitive. | ||
| 21 | Valid combinations are 1, 2, 3, 4, 8. | ||
| 22 | - interrupt-controller : Marks the device node as an interrupt controller. | ||
| 23 | |||
| 24 | Example: | ||
| 25 | |||
| 26 | gpio: gpio@6000d000 { | ||
| 27 | compatible = "nvidia,tegra20-gpio"; | ||
| 28 | reg = < 0x6000d000 0x1000 >; | ||
| 29 | interrupts = < 0 32 0x04 | ||
| 30 | 0 33 0x04 | ||
| 31 | 0 34 0x04 | ||
| 32 | 0 35 0x04 | ||
| 33 | 0 55 0x04 | ||
| 34 | 0 87 0x04 | ||
| 35 | 0 89 0x04 >; | ||
| 36 | #gpio-cells = <2>; | ||
| 37 | gpio-controller; | ||
| 38 | #interrupt-cells = <2>; | ||
| 39 | interrupt-controller; | ||
| 40 | }; | ||
| @@ -0,0 +1,23 @@ | |||
| 1 | * Marvell PXA GPIO controller | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible : Should be "mrvl,pxa-gpio" or "mrvl,mmp-gpio" | ||
| 5 | - reg : Address and length of the register set for the device | ||
| 6 | - interrupts : Should be the port interrupt shared by all gpio pins, if | ||
| 7 | - interrupt-name : Should be the name of irq resource. | ||
| 8 | one number. | ||
| 9 | - gpio-controller : Marks the device node as a gpio controller. | ||
| 10 | - #gpio-cells : Should be one. It is the pin number. | ||
| 11 | |||
| 12 | Example: | ||
| 13 | |||
| 14 | gpio: gpio@d4019000 { | ||
| 15 | compatible = "mrvl,mmp-gpio", "mrvl,pxa-gpio"; | ||
| 16 | reg = <0xd4019000 0x1000>; | ||
| 17 | interrupts = <49>, <17>, <18>; | ||
| 18 | interrupt-name = "gpio_mux", "gpio0", "gpio1"; | ||
| 19 | gpio-controller; | ||
| 20 | #gpio-cells = <1>; | ||
| 21 | interrupt-controller; | ||
| 22 | #interrupt-cells = <1>; | ||
| 23 | }; | ||
| @@ -0,0 +1,48 @@ | |||
| 1 | GPIO controller on CE4100 / Sodaville SoCs | ||
| 2 | ========================================== | ||
| 3 | |||
| 4 | The bindings for CE4100's GPIO controller match the generic description | ||
| 5 | which is covered by the gpio.txt file in this folder. | ||
| 6 | |||
| 7 | The only additional property is the intel,muxctl property which holds the | ||
| 8 | value which is written into the MUXCNTL register. | ||
| 9 | |||
| 10 | There is no compatible property for now because the driver is probed via | ||
| 11 | PCI id (vendor 0x8086 device 0x2e67). | ||
| 12 | |||
| 13 | The interrupt specifier consists of two cells encoded as follows: | ||
| 14 | - <1st cell>: The interrupt-number that identifies the interrupt source. | ||
| 15 | - <2nd cell>: The level-sense information, encoded as follows: | ||
| 16 | 4 - active high level-sensitive | ||
| 17 | 8 - active low level-sensitive | ||
| 18 | |||
| 19 | Example of the GPIO device and one user: | ||
| 20 | |||
| 21 | pcigpio: gpio@b,1 { | ||
| 22 | /* two cells for GPIO and interrupt */ | ||
| 23 | #gpio-cells = <2>; | ||
| 24 | #interrupt-cells = <2>; | ||
| 25 | compatible = "pci8086,2e67.2", | ||
| 26 | "pci8086,2e67", | ||
| 27 | "pciclassff0000", | ||
| 28 | "pciclassff00"; | ||
| 29 | |||
| 30 | reg = <0x15900 0x0 0x0 0x0 0x0>; | ||
| 31 | /* Interrupt line of the gpio device */ | ||
| 32 | interrupts = <15 1>; | ||
| 33 | /* It is an interrupt and GPIO controller itself */ | ||
| 34 | interrupt-controller; | ||
| 35 | gpio-controller; | ||
| 36 | intel,muxctl = <0>; | ||
| 37 | }; | ||
| 38 | |||
| 39 | testuser@20 { | ||
| 40 | compatible = "example,testuser"; | ||
| 41 | /* User the 11th GPIO line as an active high triggered | ||
| 42 | * level interrupt | ||
| 43 | */ | ||
| 44 | interrupts = <11 8>; | ||
| 45 | interrupt-parent = <&pcigpio>; | ||
| 46 | /* Use this GPIO also with the gpio functions */ | ||
| 47 | gpios = <&pcigpio 11 0>; | ||
| 48 | }; | ||
| @@ -0,0 +1,37 @@ | |||
| 1 | * I2C | ||
| 2 | |||
| 3 | Required properties : | ||
| 4 | |||
| 5 | - reg : Offset and length of the register set for the device | ||
| 6 | - compatible : should be "mrvl,mmp-twsi" where CHIP is the name of a | ||
| 7 | compatible processor, e.g. pxa168, pxa910, mmp2, mmp3. | ||
| 8 | For the pxa2xx/pxa3xx, an additional node "mrvl,pxa-i2c" is required | ||
| 9 | as shown in the example below. | ||
| 10 | |||
| 11 | Recommended properties : | ||
| 12 | |||
| 13 | - interrupts : <a b> where a is the interrupt number and b is a | ||
| 14 | field that represents an encoding of the sense and level | ||
| 15 | information for the interrupt. This should be encoded based on | ||
| 16 | the information in section 2) depending on the type of interrupt | ||
| 17 | controller you have. | ||
| 18 | - interrupt-parent : the phandle for the interrupt controller that | ||
| 19 | services interrupts for this device. | ||
| 20 | - mrvl,i2c-polling : Disable interrupt of i2c controller. Polling | ||
| 21 | status register of i2c controller instead. | ||
| 22 | - mrvl,i2c-fast-mode : Enable fast mode of i2c controller. | ||
| 23 | |||
| 24 | Examples: | ||
| 25 | twsi1: i2c@d4011000 { | ||
| 26 | compatible = "mrvl,mmp-twsi", "mrvl,pxa-i2c"; | ||
| 27 | reg = <0xd4011000 0x1000>; | ||
| 28 | interrupts = <7>; | ||
| 29 | mrvl,i2c-fast-mode; | ||
| 30 | }; | ||
| 31 | |||
| 32 | twsi2: i2c@d4025000 { | ||
| 33 | compatible = "mrvl,mmp-twsi", "mrvl,pxa-i2c"; | ||
| 34 | reg = <0xd4025000 0x1000>; | ||
| 35 | interrupts = <58>; | ||
| 36 | }; | ||
| 37 | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | I2C for SiRFprimaII platforms | ||
| 2 | |||
| 3 | Required properties : | ||
| 4 | - compatible : Must be "sirf,prima2-i2c" | ||
| 5 | - reg: physical base address of the controller and length of memory mapped | ||
| 6 | region. | ||
| 7 | - interrupts: interrupt number to the cpu. | ||
| 8 | |||
| 9 | Optional properties: | ||
| 10 | - clock-frequency : Constains desired I2C/HS-I2C bus clock frequency in Hz. | ||
| 11 | The absence of the propoerty indicates the default frequency 100 kHz. | ||
| 12 | |||
| 13 | Examples : | ||
| 14 | |||
| 15 | i2c0: i2c@b00e0000 { | ||
| 16 | compatible = "sirf,prima2-i2c"; | ||
| 17 | reg = <0xb00e0000 0x10000>; | ||
| 18 | interrupts = <24>; | ||
| 19 | }; | ||
| @@ -0,0 +1,33 @@ | |||
| 1 | * TI Highspeed MMC host controller for OMAP | ||
| 2 | |||
| 3 | The Highspeed MMC Host Controller on TI OMAP family | ||
| 4 | provides an interface for MMC, SD, and SDIO types of memory cards. | ||
| 5 | |||
| 6 | Required properties: | ||
| 7 | - compatible: | ||
| 8 | Should be "ti,omap2-hsmmc", for OMAP2 controllers | ||
| 9 | Should be "ti,omap3-hsmmc", for OMAP3 controllers | ||
| 10 | Should be "ti,omap4-hsmmc", for OMAP4 controllers | ||
| 11 | - ti,hwmods: Must be "mmc<n>", n is controller instance starting 1 | ||
| 12 | - reg : should contain hsmmc registers location and length | ||
| 13 | |||
| 14 | Optional properties: | ||
| 15 | ti,dual-volt: boolean, supports dual voltage cards | ||
| 16 | <supply-name>-supply: phandle to the regulator device tree node | ||
| 17 | "supply-name" examples are "vmmc", "vmmc_aux" etc | ||
| 18 | ti,bus-width: Number of data lines, default assumed is 1 if the property is missing. | ||
| 19 | cd-gpios: GPIOs for card detection | ||
| 20 | wp-gpios: GPIOs for write protection | ||
| 21 | ti,non-removable: non-removable slot (like eMMC) | ||
| 22 | ti,needs-special-reset: Requires a special softreset sequence | ||
| 23 | |||
| 24 | Example: | ||
| 25 | mmc1: mmc@0x4809c000 { | ||
| 26 | compatible = "ti,omap4-hsmmc"; | ||
| 27 | reg = <0x4809c000 0x400>; | ||
| 28 | ti,hwmods = "mmc1"; | ||
| 29 | ti,dual-volt; | ||
| 30 | ti,bus-width = <4>; | ||
| 31 | vmmc-supply = <&vmmc>; /* phandle to regulator node */ | ||
| 32 | ti,non-removable; | ||
| 33 | }; | ||
| @@ -4,5 +4,5 @@ Required properties: · 3 unmodified lines | |||
| 4 | - compatible : must be "arm,versatile-flash"; | 4 | - compatible : must be "arm,versatile-flash"; |
| 5 | - bank-width : width in bytes of flash interface. | 5 | - bank-width : width in bytes of flash interface. |
| 6 | 6 | ||
| 7 | Optional properties: | 7 | The device tree may optionally contain sub-nodes describing partitions of the |
| 8 | - Subnode partition map from mtd flash binding | 8 | address space. See partition.txt for more detail. |
| @@ -3,6 +3,9 @@ · 2 unmodified lines | |||
| 3 | Required properties: | 3 | Required properties: |
| 4 | - compatible : "atmel,<model>", "atmel,<series>", "atmel,dataflash". | 4 | - compatible : "atmel,<model>", "atmel,<series>", "atmel,dataflash". |
| 5 | 5 | ||
| 6 | The device tree may optionally contain sub-nodes describing partitions of the | ||
| 7 | address space. See partition.txt for more detail. | ||
| 8 | |||
| 6 | Example: | 9 | Example: |
| 7 | 10 | ||
| 8 | flash@1 { | 11 | flash@1 { |
| @@ -0,0 +1,41 @@ | |||
| 1 | Atmel NAND flash | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible : "atmel,at91rm9200-nand". | ||
| 5 | - reg : should specify localbus address and size used for the chip, | ||
| 6 | and if availlable the ECC. | ||
| 7 | - atmel,nand-addr-offset : offset for the address latch. | ||
| 8 | - atmel,nand-cmd-offset : offset for the command latch. | ||
| 9 | - #address-cells, #size-cells : Must be present if the device has sub-nodes | ||
| 10 | representing partitions. | ||
| 11 | |||
| 12 | - gpios : specifies the gpio pins to control the NAND device. detect is an | ||
| 13 | optional gpio and may be set to 0 if not present. | ||
| 14 | |||
| 15 | Optional properties: | ||
| 16 | - nand-ecc-mode : String, operation mode of the NAND ecc mode, soft by default. | ||
| 17 | Supported values are: "none", "soft", "hw", "hw_syndrome", "hw_oob_first", | ||
| 18 | "soft_bch". | ||
| 19 | - nand-bus-width : 8 or 16 bus width if not present 8 | ||
| 20 | - nand-on-flash-bbt: boolean to enable on flash bbt option if not present false | ||
| 21 | |||
| 22 | Examples: | ||
| 23 | nand0: nand@40000000,0 { | ||
| 24 | compatible = "atmel,at91rm9200-nand"; | ||
| 25 | #address-cells = <1>; | ||
| 26 | #size-cells = <1>; | ||
| 27 | reg = <0x40000000 0x10000000 | ||
| 28 | 0xffffe800 0x200 | ||
| 29 | >; | ||
| 30 | atmel,nand-addr-offset = <21>; /* ale */ | ||
| 31 | atmel,nand-cmd-offset = <22>; /* cle */ | ||
| 32 | nand-on-flash-bbt; | ||
| 33 | nand-ecc-mode = "soft"; | ||
| 34 | gpios = <&pioC 13 0 /* rdy */ | ||
| 35 | &pioC 14 0 /* nce */ | ||
| 36 | 0 /* cd */ | ||
| 37 | >; | ||
| 38 | partition@0 { | ||
| 39 | ... | ||
| 40 | }; | ||
| 41 | }; | ||
| @@ -19,6 +19,10 @@ Optional properties: · 18 unmodified lines | |||
| 19 | read registers (tR). Required if property "gpios" is not used | 19 | read registers (tR). Required if property "gpios" is not used |
| 20 | (R/B# pins not connected). | 20 | (R/B# pins not connected). |
| 21 | 21 | ||
| 22 | Each flash chip described may optionally contain additional sub-nodes | ||
| 23 | describing partitions of the address space. See partition.txt for more | ||
| 24 | detail. | ||
| 25 | |||
| 22 | Examples: | 26 | Examples: |
| 23 | 27 | ||
| 24 | upm@1,0 { | 28 | upm@1,0 { |
| @@ -0,0 +1,33 @@ | |||
| 1 | * FSMC NAND | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible : "st,spear600-fsmc-nand" | ||
| 5 | - reg : Address range of the mtd chip | ||
| 6 | - reg-names: Should contain the reg names "fsmc_regs" and "nand_data" | ||
| 7 | - st,ale-off : Chip specific offset to ALE | ||
| 8 | - st,cle-off : Chip specific offset to CLE | ||
| 9 | |||
| 10 | Optional properties: | ||
| 11 | - bank-width : Width (in bytes) of the device. If not present, the width | ||
| 12 | defaults to 1 byte | ||
| 13 | - nand-skip-bbtscan: Indicates the the BBT scanning should be skipped | ||
| 14 | |||
| 15 | Example: | ||
| 16 | |||
| 17 | fsmc: flash@d1800000 { | ||
| 18 | compatible = "st,spear600-fsmc-nand"; | ||
| 19 | #address-cells = <1>; | ||
| 20 | #size-cells = <1>; | ||
| 21 | reg = <0xd1800000 0x1000 /* FSMC Register */ | ||
| 22 | 0xd2000000 0x4000>; /* NAND Base */ | ||
| 23 | reg-names = "fsmc_regs", "nand_data"; | ||
| 24 | st,ale-off = <0x20000>; | ||
| 25 | st,cle-off = <0x10000>; | ||
| 26 | |||
| 27 | bank-width = <1>; | ||
| 28 | nand-skip-bbtscan; | ||
| 29 | |||
| 30 | partition@0 { | ||
| 31 | ... | ||
| 32 | }; | ||
| 33 | }; | ||
| @@ -25,6 +25,9 @@ Optional properties: · 24 unmodified lines | |||
| 25 | GPIO state and before and after command byte writes, this register will be | 25 | GPIO state and before and after command byte writes, this register will be |
| 26 | read to ensure that the GPIO accesses have completed. | 26 | read to ensure that the GPIO accesses have completed. |
| 27 | 27 | ||
| 28 | The device tree may optionally contain sub-nodes describing partitions of the | ||
| 29 | address space. See partition.txt for more detail. | ||
| 30 | |||
| 28 | Examples: | 31 | Examples: |
| 29 | 32 | ||
| 30 | gpio-nand@1,0 { | 33 | gpio-nand@1,0 { |
| @@ -23,27 +23,8 @@ are defined: · 22 unmodified lines | |||
| 23 | - vendor-id : Contains the flash chip's vendor id (1 byte). | 23 | - vendor-id : Contains the flash chip's vendor id (1 byte). |
| 24 | - device-id : Contains the flash chip's device id (1 byte). | 24 | - device-id : Contains the flash chip's device id (1 byte). |
| 25 | 25 | ||
| 26 | In addition to the information on the mtd bank itself, the | 26 | The device tree may optionally contain sub-nodes describing partitions of the |
| 27 | device tree may optionally contain additional information | 27 | address space. See partition.txt for more detail. |
| 28 | describing partitions of the address space. This can be | ||
| 29 | used on platforms which have strong conventions about which | ||
| 30 | portions of a flash are used for what purposes, but which don't | ||
| 31 | use an on-flash partition table such as RedBoot. | ||
| 32 | |||
| 33 | Each partition is represented as a sub-node of the mtd device. | ||
| 34 | Each node's name represents the name of the corresponding | ||
| 35 | partition of the mtd device. | ||
| 36 | |||
| 37 | Flash partitions | ||
| 38 | - reg : The partition's offset and size within the mtd bank. | ||
| 39 | - label : (optional) The label / name for this partition. | ||
| 40 | If omitted, the label is taken from the node name (excluding | ||
| 41 | the unit address). | ||
| 42 | - read-only : (optional) This parameter, if present, is a hint to | ||
| 43 | Linux that this partition should only be mounted | ||
| 44 | read-only. This is usually used for flash partitions | ||
| 45 | containing early-boot firmware images or data which should not | ||
| 46 | be clobbered. | ||
| 47 | 28 | ||
| 48 | Example: | 29 | Example: |
| 49 | 30 | ||
| @@ -0,0 +1,7 @@ | |||
| 1 | * MTD generic binding | ||
| 2 | |||
| 3 | - nand-ecc-mode : String, operation mode of the NAND ecc mode. | ||
| 4 | Supported values are: "none", "soft", "hw", "hw_syndrome", "hw_oob_first", | ||
| 5 | "soft_bch". | ||
| 6 | - nand-bus-width : 8 or 16 bus width if not present 8 | ||
| 7 | - nand-on-flash-bbt: boolean to enable on flash bbt option if not present false | ||
| @@ -0,0 +1,38 @@ | |||
| 1 | Representing flash partitions in devicetree | ||
| 2 | |||
| 3 | Partitions can be represented by sub-nodes of an mtd device. This can be used | ||
| 4 | on platforms which have strong conventions about which portions of a flash are | ||
| 5 | used for what purposes, but which don't use an on-flash partition table such | ||
| 6 | as RedBoot. | ||
| 7 | |||
| 8 | #address-cells & #size-cells must both be present in the mtd device and be | ||
| 9 | equal to 1. | ||
| 10 | |||
| 11 | Required properties: | ||
| 12 | - reg : The partition's offset and size within the mtd bank. | ||
| 13 | |||
| 14 | Optional properties: | ||
| 15 | - label : The label / name for this partition. If omitted, the label is taken | ||
| 16 | from the node name (excluding the unit address). | ||
| 17 | - read-only : This parameter, if present, is a hint to Linux that this | ||
| 18 | partition should only be mounted read-only. This is usually used for flash | ||
| 19 | partitions containing early-boot firmware images or data which should not be | ||
| 20 | clobbered. | ||
| 21 | |||
| 22 | Examples: | ||
| 23 | |||
| 24 | |||
| 25 | flash@0 { | ||
| 26 | #address-cells = <1>; | ||
| 27 | #size-cells = <1>; | ||
| 28 | |||
| 29 | partition@0 { | ||
| 30 | label = "u-boot"; | ||
| 31 | reg = <0x0000000 0x100000>; | ||
| 32 | read-only; | ||
| 33 | }; | ||
| 34 | |||
| 35 | uimage@100000 { | ||
| 36 | reg = <0x0100000 0x200000>; | ||
| 37 | }; | ||
| 38 | ]; | ||
| @@ -0,0 +1,31 @@ | |||
| 1 | * SPEAr SMI | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible : "st,spear600-smi" | ||
| 5 | - reg : Address range of the mtd chip | ||
| 6 | - #address-cells, #size-cells : Must be present if the device has sub-nodes | ||
| 7 | representing partitions. | ||
| 8 | - interrupt-parent: Should be the phandle for the interrupt controller | ||
| 9 | that services interrupts for this device | ||
| 10 | - interrupts: Should contain the STMMAC interrupts | ||
| 11 | - clock-rate : Functional clock rate of SMI in Hz | ||
| 12 | |||
| 13 | Optional properties: | ||
| 14 | - st,smi-fast-mode : Flash supports read in fast mode | ||
| 15 | |||
| 16 | Example: | ||
| 17 | |||
| 18 | smi: flash@fc000000 { | ||
| 19 | compatible = "st,spear600-smi"; | ||
| 20 | #address-cells = <1>; | ||
| 21 | #size-cells = <1>; | ||
| 22 | reg = <0xfc000000 0x1000>; | ||
| 23 | interrupt-parent = <&vic1>; | ||
| 24 | interrupts = <12>; | ||
| 25 | clock-rate = <50000000>; /* 50MHz */ | ||
| 26 | |||
| 27 | flash@f8000000 { | ||
| 28 | st,smi-fast-mode; | ||
| 29 | ... | ||
| 30 | }; | ||
| 31 | }; | ||
| @@ -0,0 +1,18 @@ | |||
| 1 | max17042_battery | ||
| 2 | ~~~~~~~~~~~~~~~~ | ||
| 3 | |||
| 4 | Required properties : | ||
| 5 | - compatible : "maxim,max17042" | ||
| 6 | |||
| 7 | Optional properties : | ||
| 8 | - maxim,rsns-microohm : Resistance of rsns resistor in micro Ohms | ||
| 9 | (datasheet-recommended value is 10000). | ||
| 10 | Defining this property enables current-sense functionality. | ||
| 11 | |||
| 12 | Example: | ||
| 13 | |||
| 14 | battery-charger@36 { | ||
| 15 | compatible = "maxim,max17042"; | ||
| 16 | reg = <0x36>; | ||
| 17 | maxim,rsns-microohm = <10000>; | ||
| 18 | }; | ||
| @@ -0,0 +1,29 @@ | |||
| 1 | Anatop Voltage regulators | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: Must be "fsl,anatop-regulator" | ||
| 5 | - anatop-reg-offset: Anatop MFD register offset | ||
| 6 | - anatop-vol-bit-shift: Bit shift for the register | ||
| 7 | - anatop-vol-bit-width: Number of bits used in the register | ||
| 8 | - anatop-min-bit-val: Minimum value of this register | ||
| 9 | - anatop-min-voltage: Minimum voltage of this regulator | ||
| 10 | - anatop-max-voltage: Maximum voltage of this regulator | ||
| 11 | |||
| 12 | Any property defined as part of the core regulator | ||
| 13 | binding, defined in regulator.txt, can also be used. | ||
| 14 | |||
| 15 | Example: | ||
| 16 | |||
| 17 | regulator-vddpu { | ||
| 18 | compatible = "fsl,anatop-regulator"; | ||
| 19 | regulator-name = "vddpu"; | ||
| 20 | regulator-min-microvolt = <725000>; | ||
| 21 | regulator-max-microvolt = <1300000>; | ||
| 22 | regulator-always-on; | ||
| 23 | anatop-reg-offset = <0x140>; | ||
| 24 | anatop-vol-bit-shift = <9>; | ||
| 25 | anatop-vol-bit-width = <5>; | ||
| 26 | anatop-min-bit-val = <1>; | ||
| 27 | anatop-min-voltage = <725000>; | ||
| 28 | anatop-max-voltage = <1300000>; | ||
| 29 | }; | ||
| @@ -0,0 +1,17 @@ | |||
| 1 | * Marvell Real Time Clock controller | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible: should be "mrvl,sa1100-rtc" | ||
| 5 | - reg: physical base address of the controller and length of memory mapped | ||
| 6 | region. | ||
| 7 | - interrupts: Should be two. The first interrupt number is the rtc alarm | ||
| 8 | interrupt and the second interrupt number is the rtc hz interrupt. | ||
| 9 | - interrupt-names: Assign name of irq resource. | ||
| 10 | |||
| 11 | Example: | ||
| 12 | rtc: rtc@d4010000 { | ||
| 13 | compatible = "mrvl,mmp-rtc"; | ||
| 14 | reg = <0xd4010000 0x1000>; | ||
| 15 | interrupts = <5>, <6>; | ||
| 16 | interrupt-name = "rtc 1Hz", "rtc alarm"; | ||
| 17 | }; | ||
| @@ -0,0 +1,4 @@ | |||
| 1 | PXA UART controller | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible : should be "mrvl,mmp-uart" or "mrvl,pxa-uart". | ||
| @@ -0,0 +1,49 @@ | |||
| 1 | Atmel SOC USB controllers | ||
| 2 | |||
| 3 | OHCI | ||
| 4 | |||
| 5 | Required properties: | ||
| 6 | - compatible: Should be "atmel,at91rm9200-ohci" for USB controllers | ||
| 7 | used in host mode. | ||
| 8 | - num-ports: Number of ports. | ||
| 9 | - atmel,vbus-gpio: If present, specifies a gpio that needs to be | ||
| 10 | activated for the bus to be powered. | ||
| 11 | - atmel,oc-gpio: If present, specifies a gpio that needs to be | ||
| 12 | activated for the overcurrent detection. | ||
| 13 | |||
| 14 | usb0: ohci@00500000 { | ||
| 15 | compatible = "atmel,at91rm9200-ohci", "usb-ohci"; | ||
| 16 | reg = <0x00500000 0x100000>; | ||
| 17 | interrupts = <20 4>; | ||
| 18 | num-ports = <2>; | ||
| 19 | }; | ||
| 20 | |||
| 21 | EHCI | ||
| 22 | |||
| 23 | Required properties: | ||
| 24 | - compatible: Should be "atmel,at91sam9g45-ehci" for USB controllers | ||
| 25 | used in host mode. | ||
| 26 | |||
| 27 | usb1: ehci@00800000 { | ||
| 28 | compatible = "atmel,at91sam9g45-ehci", "usb-ehci"; | ||
| 29 | reg = <0x00800000 0x100000>; | ||
| 30 | interrupts = <22 4>; | ||
| 31 | }; | ||
| 32 | |||
| 33 | AT91 USB device controller | ||
| 34 | |||
| 35 | Required properties: | ||
| 36 | - compatible: Should be "atmel,at91rm9200-udc" | ||
| 37 | - reg: Address and length of the register set for the device | ||
| 38 | - interrupts: Should contain macb interrupt | ||
| 39 | |||
| 40 | Optional properties: | ||
| 41 | - atmel,vbus-gpio: If present, specifies a gpio that needs to be | ||
| 42 | activated for the bus to be powered. | ||
| 43 | |||
| 44 | usb1: gadget@fffa4000 { | ||
| 45 | compatible = "atmel,at91rm9200-udc"; | ||
| 46 | reg = <0xfffa4000 0x4000>; | ||
| 47 | interrupts = <10 4>; | ||
| 48 | atmel,vbus-gpio = <&pioC 5 0>; | ||
| 49 | }; | ||
| @@ -11,3 +11,16 @@ Required properties : · 10 unmodified lines | |||
| 11 | - phy_type : Should be one of "ulpi" or "utmi". | 11 | - phy_type : Should be one of "ulpi" or "utmi". |
| 12 | - nvidia,vbus-gpio : If present, specifies a gpio that needs to be | 12 | - nvidia,vbus-gpio : If present, specifies a gpio that needs to be |
| 13 | activated for the bus to be powered. | 13 | activated for the bus to be powered. |
| 14 | |||
| 15 | Optional properties: | ||
| 16 | - dr_mode : dual role mode. Indicates the working mode for | ||
| 17 | nvidia,tegra20-ehci compatible controllers. Can be "host", "peripheral", | ||
| 18 | or "otg". Default to "host" if not defined for backward compatibility. | ||
| 19 | host means this is a host controller | ||
| 20 | peripheral means it is device controller | ||
| 21 | otg means it can operate as either ("on the go") | ||
| 22 | - nvidia,has-legacy-mode : boolean indicates whether this controller can | ||
| 23 | operate in legacy mode (as APX 2500 / 2600). In legacy mode some | ||
| 24 | registers are accessed through the APB_MISC base address instead of | ||
| 25 | the USB controller. Since this is a legacy issue it probably does not | ||
| 26 | warrant a compatible string of its own. | ||
| @@ -0,0 +1,412 @@ | |||
| 1 | Linux and the Device Tree | ||
| 2 | ------------------------- | ||
| 3 | The Linux usage model for device tree data | ||
| 4 | |||
| 5 | Author: Grant Likely <grant.likely@secretlab.ca> | ||
| 6 | |||
| 7 | This article describes how Linux uses the device tree. An overview of | ||
| 8 | the device tree data format can be found on the device tree usage page | ||
| 9 | at devicetree.org[1]. | ||
| 10 | |||
| 11 | [1] http://devicetree.org/Device_Tree_Usage | ||
| 12 | |||
| 13 | The "Open Firmware Device Tree", or simply Device Tree (DT), is a data | ||
| 14 | structure and language for describing hardware. More specifically, it | ||
| 15 | is a description of hardware that is readable by an operating system | ||
| 16 | so that the operating system doesn't need to hard code details of the | ||
| 17 | machine. | ||
| 18 | |||
| 19 | Structurally, the DT is a tree, or acyclic graph with named nodes, and | ||
| 20 | nodes may have an arbitrary number of named properties encapsulating | ||
| 21 | arbitrary data. A mechanism also exists to create arbitrary | ||
| 22 | links from one node to another outside of the natural tree structure. | ||
| 23 | |||
| 24 | Conceptually, a common set of usage conventions, called 'bindings', | ||
| 25 | is defined for how data should appear in the tree to describe typical | ||
| 26 | hardware characteristics including data busses, interrupt lines, GPIO | ||
| 27 | connections, and peripheral devices. | ||
| 28 | |||
| 29 | As much as possible, hardware is described using existing bindings to | ||
| 30 | maximize use of existing support code, but since property and node | ||
| 31 | names are simply text strings, it is easy to extend existing bindings | ||
| 32 | or create new ones by defining new nodes and properties. Be wary, | ||
| 33 | however, of creating a new binding without first doing some homework | ||
| 34 | about what already exists. There are currently two different, | ||
| 35 | incompatible, bindings for i2c busses that came about because the new | ||
| 36 | binding was created without first investigating how i2c devices were | ||
| 37 | already being enumerated in existing systems. | ||
| 38 | |||
| 39 | 1. History | ||
| 40 | ---------- | ||
| 41 | The DT was originally created by Open Firmware as part of the | ||
| 42 | communication method for passing data from Open Firmware to a client | ||
| 43 | program (like to an operating system). An operating system used the | ||
| 44 | Device Tree to discover the topology of the hardware at runtime, and | ||
| 45 | thereby support a majority of available hardware without hard coded | ||
| 46 | information (assuming drivers were available for all devices). | ||
| 47 | |||
| 48 | Since Open Firmware is commonly used on PowerPC and SPARC platforms, | ||
| 49 | the Linux support for those architectures has for a long time used the | ||
| 50 | Device Tree. | ||
| 51 | |||
| 52 | In 2005, when PowerPC Linux began a major cleanup and to merge 32-bit | ||
| 53 | and 64-bit support, the decision was made to require DT support on all | ||
| 54 | powerpc platforms, regardless of whether or not they used Open | ||
| 55 | Firmware. To do this, a DT representation called the Flattened Device | ||
| 56 | Tree (FDT) was created which could be passed to the kernel as a binary | ||
| 57 | blob without requiring a real Open Firmware implementation. U-Boot, | ||
| 58 | kexec, and other bootloaders were modified to support both passing a | ||
| 59 | Device Tree Binary (dtb) and to modify a dtb at boot time. DT was | ||
| 60 | also added to the PowerPC boot wrapper (arch/powerpc/boot/*) so that | ||
| 61 | a dtb could be wrapped up with the kernel image to support booting | ||
| 62 | existing non-DT aware firmware. | ||
| 63 | |||
| 64 | Some time later, FDT infrastructure was generalized to be usable by | ||
| 65 | all architectures. At the time of this writing, 6 mainlined | ||
| 66 | architectures (arm, microblaze, mips, powerpc, sparc, and x86) and 1 | ||
| 67 | out of mainline (nios) have some level of DT support. | ||
| 68 | |||
| 69 | 2. Data Model | ||
| 70 | ------------- | ||
| 71 | If you haven't already read the Device Tree Usage[1] page, | ||
| 72 | then go read it now. It's okay, I'll wait.... | ||
| 73 | |||
| 74 | 2.1 High Level View | ||
| 75 | ------------------- | ||
| 76 | The most important thing to understand is that the DT is simply a data | ||
| 77 | structure that describes the hardware. There is nothing magical about | ||
| 78 | it, and it doesn't magically make all hardware configuration problems | ||
| 79 | go away. What it does do is provide a language for decoupling the | ||
| 80 | hardware configuration from the board and device driver support in the | ||
| 81 | Linux kernel (or any other operating system for that matter). Using | ||
| 82 | it allows board and device support to become data driven; to make | ||
| 83 | setup decisions based on data passed into the kernel instead of on | ||
| 84 | per-machine hard coded selections. | ||
| 85 | |||
| 86 | Ideally, data driven platform setup should result in less code | ||
| 87 | duplication and make it easier to support a wide range of hardware | ||
| 88 | with a single kernel image. | ||
| 89 | |||
| 90 | Linux uses DT data for three major purposes: | ||
| 91 | 1) platform identification, | ||
| 92 | 2) runtime configuration, and | ||
| 93 | 3) device population. | ||
| 94 | |||
| 95 | 2.2 Platform Identification | ||
| 96 | --------------------------- | ||
| 97 | First and foremost, the kernel will use data in the DT to identify the | ||
| 98 | specific machine. In a perfect world, the specific platform shouldn't | ||
| 99 | matter to the kernel because all platform details would be described | ||
| 100 | perfectly by the device tree in a consistent and reliable manner. | ||
| 101 | Hardware is not perfect though, and so the kernel must identify the | ||
| 102 | machine during early boot so that it has the opportunity to run | ||
| 103 | machine-specific fixups. | ||
| 104 | |||
| 105 | In the majority of cases, the machine identity is irrelevant, and the | ||
| 106 | kernel will instead select setup code based on the machine's core | ||
| 107 | CPU or SoC. On ARM for example, setup_arch() in | ||
| 108 | arch/arm/kernel/setup.c will call setup_machine_fdt() in | ||
| 109 | arch/arm/kernel/devicetree.c which searches through the machine_desc | ||
| 110 | table and selects the machine_desc which best matches the device tree | ||
| 111 | data. It determines the best match by looking at the 'compatible' | ||
| 112 | property in the root device tree node, and comparing it with the | ||
| 113 | dt_compat list in struct machine_desc. | ||
| 114 | |||
| 115 | The 'compatible' property contains a sorted list of strings starting | ||
| 116 | with the exact name of the machine, followed by an optional list of | ||
| 117 | boards it is compatible with sorted from most compatible to least. For | ||
| 118 | example, the root compatible properties for the TI BeagleBoard and its | ||
| 119 | successor, the BeagleBoard xM board might look like: | ||
| 120 | |||
| 121 | compatible = "ti,omap3-beagleboard", "ti,omap3450", "ti,omap3"; | ||
| 122 | compatible = "ti,omap3-beagleboard-xm", "ti,omap3450", "ti,omap3"; | ||
| 123 | |||
| 124 | Where "ti,omap3-beagleboard-xm" specifies the exact model, it also | ||
| 125 | claims that it compatible with the OMAP 3450 SoC, and the omap3 family | ||
| 126 | of SoCs in general. You'll notice that the list is sorted from most | ||
| 127 | specific (exact board) to least specific (SoC family). | ||
| 128 | |||
| 129 | Astute readers might point out that the Beagle xM could also claim | ||
| 130 | compatibility with the original Beagle board. However, one should be | ||
| 131 | cautioned about doing so at the board level since there is typically a | ||
| 132 | high level of change from one board to another, even within the same | ||
| 133 | product line, and it is hard to nail down exactly what is meant when one | ||
| 134 | board claims to be compatible with another. For the top level, it is | ||
| 135 | better to err on the side of caution and not claim one board is | ||
| 136 | compatible with another. The notable exception would be when one | ||
| 137 | board is a carrier for another, such as a CPU module attached to a | ||
| 138 | carrier board. | ||
| 139 | |||
| 140 | One more note on compatible values. Any string used in a compatible | ||
| 141 | property must be documented as to what it indicates. Add | ||
| 142 | documentation for compatible strings in Documentation/devicetree/bindings. | ||
| 143 | |||
| 144 | Again on ARM, for each machine_desc, the kernel looks to see if | ||
| 145 | any of the dt_compat list entries appear in the compatible property. | ||
| 146 | If one does, then that machine_desc is a candidate for driving the | ||
| 147 | machine. After searching the entire table of machine_descs, | ||
| 148 | setup_machine_fdt() returns the 'most compatible' machine_desc based | ||
| 149 | on which entry in the compatible property each machine_desc matches | ||
| 150 | against. If no matching machine_desc is found, then it returns NULL. | ||
| 151 | |||
| 152 | The reasoning behind this scheme is the observation that in the majority | ||
| 153 | of cases, a single machine_desc can support a large number of boards | ||
| 154 | if they all use the same SoC, or same family of SoCs. However, | ||
| 155 | invariably there will be some exceptions where a specific board will | ||
| 156 | require special setup code that is not useful in the generic case. | ||
| 157 | Special cases could be handled by explicitly checking for the | ||
| 158 | troublesome board(s) in generic setup code, but doing so very quickly | ||
| 159 | becomes ugly and/or unmaintainable if it is more than just a couple of | ||
| 160 | cases. | ||
| 161 | |||
| 162 | Instead, the compatible list allows a generic machine_desc to provide | ||
| 163 | support for a wide common set of boards by specifying "less | ||
| 164 | compatible" value in the dt_compat list. In the example above, | ||
| 165 | generic board support can claim compatibility with "ti,omap3" or | ||
| 166 | "ti,omap3450". If a bug was discovered on the original beagleboard | ||
| 167 | that required special workaround code during early boot, then a new | ||
| 168 | machine_desc could be added which implements the workarounds and only | ||
| 169 | matches on "ti,omap3-beagleboard". | ||
| 170 | |||
| 171 | PowerPC uses a slightly different scheme where it calls the .probe() | ||
| 172 | hook from each machine_desc, and the first one returning TRUE is used. | ||
| 173 | However, this approach does not take into account the priority of the | ||
| 174 | compatible list, and probably should be avoided for new architecture | ||
| 175 | support. | ||
| 176 | |||
| 177 | 2.3 Runtime configuration | ||
| 178 | ------------------------- | ||
| 179 | In most cases, a DT will be the sole method of communicating data from | ||
| 180 | firmware to the kernel, so also gets used to pass in runtime and | ||
| 181 | configuration data like the kernel parameters string and the location | ||
| 182 | of an initrd image. | ||
| 183 | |||
| 184 | Most of this data is contained in the /chosen node, and when booting | ||
| 185 | Linux it will look something like this: | ||
| 186 | |||
| 187 | chosen { | ||
| 188 | bootargs = "console=ttyS0,115200 loglevel=8"; | ||
| 189 | initrd-start = <0xc8000000>; | ||
| 190 | initrd-end = <0xc8200000>; | ||
| 191 | }; | ||
| 192 | |||
| 193 | The bootargs property contains the kernel arguments, and the initrd-* | ||
| 194 | properties define the address and size of an initrd blob. The | ||
| 195 | chosen node may also optionally contain an arbitrary number of | ||
| 196 | additional properties for platform-specific configuration data. | ||
| 197 | |||
| 198 | During early boot, the architecture setup code calls of_scan_flat_dt() | ||
| 199 | several times with different helper callbacks to parse device tree | ||
| 200 | data before paging is setup. The of_scan_flat_dt() code scans through | ||
| 201 | the device tree and uses the helpers to extract information required | ||
| 202 | during early boot. Typically the early_init_dt_scan_chosen() helper | ||
| 203 | is used to parse the chosen node including kernel parameters, | ||
| 204 | early_init_dt_scan_root() to initialize the DT address space model, | ||
| 205 | and early_init_dt_scan_memory() to determine the size and | ||
| 206 | location of usable RAM. | ||
| 207 | |||
| 208 | On ARM, the function setup_machine_fdt() is responsible for early | ||
| 209 | scanning of the device tree after selecting the correct machine_desc | ||
| 210 | that supports the board. | ||
| 211 | |||
| 212 | 2.4 Device population | ||
| 213 | --------------------- | ||
| 214 | After the board has been identified, and after the early configuration data | ||
| 215 | has been parsed, then kernel initialization can proceed in the normal | ||
| 216 | way. At some point in this process, unflatten_device_tree() is called | ||
| 217 | to convert the data into a more efficient runtime representation. | ||
| 218 | This is also when machine-specific setup hooks will get called, like | ||
| 219 | the machine_desc .init_early(), .init_irq() and .init_machine() hooks | ||
| 220 | on ARM. The remainder of this section uses examples from the ARM | ||
| 221 | implementation, but all architectures will do pretty much the same | ||
| 222 | thing when using a DT. | ||
| 223 | |||
| 224 | As can be guessed by the names, .init_early() is used for any machine- | ||
| 225 | specific setup that needs to be executed early in the boot process, | ||
| 226 | and .init_irq() is used to set up interrupt handling. Using a DT | ||
| 227 | doesn't materially change the behaviour of either of these functions. | ||
| 228 | If a DT is provided, then both .init_early() and .init_irq() are able | ||
| 229 | to call any of the DT query functions (of_* in include/linux/of*.h) to | ||
| 230 | get additional data about the platform. | ||
| 231 | |||
| 232 | The most interesting hook in the DT context is .init_machine() which | ||
| 233 | is primarily responsible for populating the Linux device model with | ||
| 234 | data about the platform. Historically this has been implemented on | ||
| 235 | embedded platforms by defining a set of static clock structures, | ||
| 236 | platform_devices, and other data in the board support .c file, and | ||
| 237 | registering it en-masse in .init_machine(). When DT is used, then | ||
| 238 | instead of hard coding static devices for each platform, the list of | ||
| 239 | devices can be obtained by parsing the DT, and allocating device | ||
| 240 | structures dynamically. | ||
| 241 | |||
| 242 | The simplest case is when .init_machine() is only responsible for | ||
| 243 | registering a block of platform_devices. A platform_device is a concept | ||
| 244 | used by Linux for memory or I/O mapped devices which cannot be detected | ||
| 245 | by hardware, and for 'composite' or 'virtual' devices (more on those | ||
| 246 | later). While there is no 'platform device' terminology for the DT, | ||
| 247 | platform devices roughly correspond to device nodes at the root of the | ||
| 248 | tree and children of simple memory mapped bus nodes. | ||
| 249 | |||
| 250 | About now is a good time to lay out an example. Here is part of the | ||
| 251 | device tree for the NVIDIA Tegra board. | ||
| 252 | |||
| 253 | /{ | ||
| 254 | compatible = "nvidia,harmony", "nvidia,tegra20"; | ||
| 255 | #address-cells = <1>; | ||
| 256 | #size-cells = <1>; | ||
| 257 | interrupt-parent = <&intc>; | ||
| 258 | |||
| 259 | chosen { }; | ||
| 260 | aliases { }; | ||
| 261 | |||
| 262 | memory { | ||
| 263 | device_type = "memory"; | ||
| 264 | reg = <0x00000000 0x40000000>; | ||
| 265 | }; | ||
| 266 | |||
| 267 | soc { | ||
| 268 | compatible = "nvidia,tegra20-soc", "simple-bus"; | ||
| 269 | #address-cells = <1>; | ||
| 270 | #size-cells = <1>; | ||
| 271 | ranges; | ||
| 272 | |||
| 273 | intc: interrupt-controller@50041000 { | ||
| 274 | compatible = "nvidia,tegra20-gic"; | ||
| 275 | interrupt-controller; | ||
| 276 | #interrupt-cells = <1>; | ||
| 277 | reg = <0x50041000 0x1000>, < 0x50040100 0x0100 >; | ||
| 278 | }; | ||
| 279 | |||
| 280 | serial@70006300 { | ||
| 281 | compatible = "nvidia,tegra20-uart"; | ||
| 282 | reg = <0x70006300 0x100>; | ||
| 283 | interrupts = <122>; | ||
| 284 | }; | ||
| 285 | |||
| 286 | i2s1: i2s@70002800 { | ||
| 287 | compatible = "nvidia,tegra20-i2s"; | ||
| 288 | reg = <0x70002800 0x100>; | ||
| 289 | interrupts = <77>; | ||
| 290 | codec = <&wm8903>; | ||
| 291 | }; | ||
| 292 | |||
| 293 | i2c@7000c000 { | ||
| 294 | compatible = "nvidia,tegra20-i2c"; | ||
| 295 | #address-cells = <1>; | ||
| 296 | #size-cells = <0>; | ||
| 297 | reg = <0x7000c000 0x100>; | ||
| 298 | interrupts = <70>; | ||
| 299 | |||
| 300 | wm8903: codec@1a { | ||
| 301 | compatible = "wlf,wm8903"; | ||
| 302 | reg = <0x1a>; | ||
| 303 | interrupts = <347>; | ||
| 304 | }; | ||
| 305 | }; | ||
| 306 | }; | ||
| 307 | |||
| 308 | sound { | ||
| 309 | compatible = "nvidia,harmony-sound"; | ||
| 310 | i2s-controller = <&i2s1>; | ||
| 311 | i2s-codec = <&wm8903>; | ||
| 312 | }; | ||
| 313 | }; | ||
| 314 | |||
| 315 | At .machine_init() time, Tegra board support code will need to look at | ||
| 316 | this DT and decide which nodes to create platform_devices for. | ||
| 317 | However, looking at the tree, it is not immediately obvious what kind | ||
| 318 | of device each node represents, or even if a node represents a device | ||
| 319 | at all. The /chosen, /aliases, and /memory nodes are informational | ||
| 320 | nodes that don't describe devices (although arguably memory could be | ||
| 321 | considered a device). The children of the /soc node are memory mapped | ||
| 322 | devices, but the codec@1a is an i2c device, and the sound node | ||
| 323 | represents not a device, but rather how other devices are connected | ||
| 324 | together to create the audio subsystem. I know what each device is | ||
| 325 | because I'm familiar with the board design, but how does the kernel | ||
| 326 | know what to do with each node? | ||
| 327 | |||
| 328 | The trick is that the kernel starts at the root of the tree and looks | ||
| 329 | for nodes that have a 'compatible' property. First, it is generally | ||
| 330 | assumed that any node with a 'compatible' property represents a device | ||
| 331 | of some kind, and second, it can be assumed that any node at the root | ||
| 332 | of the tree is either directly attached to the processor bus, or is a | ||
| 333 | miscellaneous system device that cannot be described any other way. | ||
| 334 | For each of these nodes, Linux allocates and registers a | ||
| 335 | platform_device, which in turn may get bound to a platform_driver. | ||
| 336 | |||
| 337 | Why is using a platform_device for these nodes a safe assumption? | ||
| 338 | Well, for the way that Linux models devices, just about all bus_types | ||
| 339 | assume that its devices are children of a bus controller. For | ||
| 340 | example, each i2c_client is a child of an i2c_master. Each spi_device | ||
| 341 | is a child of an SPI bus. Similarly for USB, PCI, MDIO, etc. The | ||
| 342 | same hierarchy is also found in the DT, where I2C device nodes only | ||
| 343 | ever appear as children of an I2C bus node. Ditto for SPI, MDIO, USB, | ||
| 344 | etc. The only devices which do not require a specific type of parent | ||
| 345 | device are platform_devices (and amba_devices, but more on that | ||
| 346 | later), which will happily live at the base of the Linux /sys/devices | ||
| 347 | tree. Therefore, if a DT node is at the root of the tree, then it | ||
| 348 | really probably is best registered as a platform_device. | ||
| 349 | |||
| 350 | Linux board support code calls of_platform_populate(NULL, NULL, NULL) | ||
| 351 | to kick off discovery of devices at the root of the tree. The | ||
| 352 | parameters are all NULL because when starting from the root of the | ||
| 353 | tree, there is no need to provide a starting node (the first NULL), a | ||
| 354 | parent struct device (the last NULL), and we're not using a match | ||
| 355 | table (yet). For a board that only needs to register devices, | ||
| 356 | .init_machine() can be completely empty except for the | ||
| 357 | of_platform_populate() call. | ||
| 358 | |||
| 359 | In the Tegra example, this accounts for the /soc and /sound nodes, but | ||
| 360 | what about the children of the SoC node? Shouldn't they be registered | ||
| 361 | as platform devices too? For Linux DT support, the generic behaviour | ||
| 362 | is for child devices to be registered by the parent's device driver at | ||
| 363 | driver .probe() time. So, an i2c bus device driver will register a | ||
| 364 | i2c_client for each child node, an SPI bus driver will register | ||
| 365 | its spi_device children, and similarly for other bus_types. | ||
| 366 | According to that model, a driver could be written that binds to the | ||
| 367 | SoC node and simply registers platform_devices for each of its | ||
| 368 | children. The board support code would allocate and register an SoC | ||
| 369 | device, a (theoretical) SoC device driver could bind to the SoC device, | ||
| 370 | and register platform_devices for /soc/interrupt-controller, /soc/serial, | ||
| 371 | /soc/i2s, and /soc/i2c in its .probe() hook. Easy, right? | ||
| 372 | |||
| 373 | Actually, it turns out that registering children of some | ||
| 374 | platform_devices as more platform_devices is a common pattern, and the | ||
| 375 | device tree support code reflects that and makes the above example | ||
| 376 | simpler. The second argument to of_platform_populate() is an | ||
| 377 | of_device_id table, and any node that matches an entry in that table | ||
| 378 | will also get its child nodes registered. In the tegra case, the code | ||
| 379 | can look something like this: | ||
| 380 | |||
| 381 | static void __init harmony_init_machine(void) | ||
| 382 | { | ||
| 383 | /* ... */ | ||
| 384 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | ||
| 385 | } | ||
| 386 | |||
| 387 | "simple-bus" is defined in the ePAPR 1.0 specification as a property | ||
| 388 | meaning a simple memory mapped bus, so the of_platform_populate() code | ||
| 389 | could be written to just assume simple-bus compatible nodes will | ||
| 390 | always be traversed. However, we pass it in as an argument so that | ||
| 391 | board support code can always override the default behaviour. | ||
| 392 | |||
| 393 | [Need to add discussion of adding i2c/spi/etc child devices] | ||
| 394 | |||
| 395 | Appendix A: AMBA devices | ||
| 396 | ------------------------ | ||
| 397 | |||
| 398 | ARM Primecells are a certain kind of device attached to the ARM AMBA | ||
| 399 | bus which include some support for hardware detection and power | ||
| 400 | management. In Linux, struct amba_device and the amba_bus_type is | ||
| 401 | used to represent Primecell devices. However, the fiddly bit is that | ||
| 402 | not all devices on an AMBA bus are Primecells, and for Linux it is | ||
| 403 | typical for both amba_device and platform_device instances to be | ||
| 404 | siblings of the same bus segment. | ||
| 405 | |||
| 406 | When using the DT, this creates problems for of_platform_populate() | ||
| 407 | because it must decide whether to register each node as either a | ||
| 408 | platform_device or an amba_device. This unfortunately complicates the | ||
| 409 | device creation model a little bit, but the solution turns out not to | ||
| 410 | be too invasive. If a node is compatible with "arm,amba-primecell", then | ||
| 411 | of_platform_populate() will register it as an amba_device instead of a | ||
| 412 | platform_device. | ||
| @@ -32,8 +32,12 @@ The buffer-user · 31 unmodified lines | |||
| 32 | *IMPORTANT*: [see https://lkml.org/lkml/2011/12/20/211 for more details] | 32 | *IMPORTANT*: [see https://lkml.org/lkml/2011/12/20/211 for more details] |
| 33 | For this first version, A buffer shared using the dma_buf sharing API: | 33 | For this first version, A buffer shared using the dma_buf sharing API: |
| 34 | - *may* be exported to user space using "mmap" *ONLY* by exporter, outside of | 34 | - *may* be exported to user space using "mmap" *ONLY* by exporter, outside of |
| 35 | this framework. | 35 | this framework. |
| 36 | - may be used *ONLY* by importers that do not need CPU access to the buffer. | 36 | - with this new iteration of the dma-buf api cpu access from the kernel has been |
| 37 | enable, see below for the details. | ||
| 38 | |||
| 39 | dma-buf operations for device dma only | ||
| 40 | -------------------------------------- | ||
| 37 | 41 | ||
| 38 | The dma_buf buffer sharing API usage contains the following steps: | 42 | The dma_buf buffer sharing API usage contains the following steps: |
| 39 | 43 | ||
| @@ -219,10 +223,120 @@ NOTES: · 179 unmodified lines | |||
| 219 | If the exporter chooses not to allow an attach() operation once a | 223 | If the exporter chooses not to allow an attach() operation once a |
| 220 | map_dma_buf() API has been called, it simply returns an error. | 224 | map_dma_buf() API has been called, it simply returns an error. |
| 221 | 225 | ||
| 222 | Miscellaneous notes: | 226 | Kernel cpu access to a dma-buf buffer object |
| 227 | -------------------------------------------- | ||
| 228 | |||
| 229 | The motivation to allow cpu access from the kernel to a dma-buf object from the | ||
| 230 | importers side are: | ||
| 231 | - fallback operations, e.g. if the devices is connected to a usb bus and the | ||
| 232 | kernel needs to shuffle the data around first before sending it away. | ||
| 233 | - full transparency for existing users on the importer side, i.e. userspace | ||
| 234 | should not notice the difference between a normal object from that subsystem | ||
| 235 | and an imported one backed by a dma-buf. This is really important for drm | ||
| 236 | opengl drivers that expect to still use all the existing upload/download | ||
| 237 | paths. | ||
| 238 | |||
| 239 | Access to a dma_buf from the kernel context involves three steps: | ||
| 240 | |||
| 241 | 1. Prepare access, which invalidate any necessary caches and make the object | ||
| 242 | available for cpu access. | ||
| 243 | 2. Access the object page-by-page with the dma_buf map apis | ||
| 244 | 3. Finish access, which will flush any necessary cpu caches and free reserved | ||
| 245 | resources. | ||
| 246 | |||
| 247 | 1. Prepare access | ||
| 248 | |||
| 249 | Before an importer can access a dma_buf object with the cpu from the kernel | ||
| 250 | context, it needs to notify the exporter of the access that is about to | ||
| 251 | happen. | ||
| 252 | |||
| 253 | Interface: | ||
| 254 | int dma_buf_begin_cpu_access(struct dma_buf *dmabuf, | ||
| 255 | size_t start, size_t len, | ||
| 256 | enum dma_data_direction direction) | ||
| 257 | |||
| 258 | This allows the exporter to ensure that the memory is actually available for | ||
| 259 | cpu access - the exporter might need to allocate or swap-in and pin the | ||
| 260 | backing storage. The exporter also needs to ensure that cpu access is | ||
| 261 | coherent for the given range and access direction. The range and access | ||
| 262 | direction can be used by the exporter to optimize the cache flushing, i.e. | ||
| 263 | access outside of the range or with a different direction (read instead of | ||
| 264 | write) might return stale or even bogus data (e.g. when the exporter needs to | ||
| 265 | copy the data to temporary storage). | ||
| 266 | |||
| 267 | This step might fail, e.g. in oom conditions. | ||
| 268 | |||
| 269 | 2. Accessing the buffer | ||
| 270 | |||
| 271 | To support dma_buf objects residing in highmem cpu access is page-based using | ||
| 272 | an api similar to kmap. Accessing a dma_buf is done in aligned chunks of | ||
| 273 | PAGE_SIZE size. Before accessing a chunk it needs to be mapped, which returns | ||
| 274 | a pointer in kernel virtual address space. Afterwards the chunk needs to be | ||
| 275 | unmapped again. There is no limit on how often a given chunk can be mapped | ||
| 276 | and unmapped, i.e. the importer does not need to call begin_cpu_access again | ||
| 277 | before mapping the same chunk again. | ||
| 278 | |||
| 279 | Interfaces: | ||
| 280 | void *dma_buf_kmap(struct dma_buf *, unsigned long); | ||
| 281 | void dma_buf_kunmap(struct dma_buf *, unsigned long, void *); | ||
| 282 | |||
| 283 | There are also atomic variants of these interfaces. Like for kmap they | ||
| 284 | facilitate non-blocking fast-paths. Neither the importer nor the exporter (in | ||
| 285 | the callback) is allowed to block when using these. | ||
| 286 | |||
| 287 | Interfaces: | ||
| 288 | void *dma_buf_kmap_atomic(struct dma_buf *, unsigned long); | ||
| 289 | void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *); | ||
| 290 | |||
| 291 | For importers all the restrictions of using kmap apply, like the limited | ||
| 292 | supply of kmap_atomic slots. Hence an importer shall only hold onto at most 2 | ||
| 293 | atomic dma_buf kmaps at the same time (in any given process context). | ||
| 294 | |||
| 295 | dma_buf kmap calls outside of the range specified in begin_cpu_access are | ||
| 296 | undefined. If the range is not PAGE_SIZE aligned, kmap needs to succeed on | ||
| 297 | the partial chunks at the beginning and end but may return stale or bogus | ||
| 298 | data outside of the range (in these partial chunks). | ||
| 299 | |||
| 300 | Note that these calls need to always succeed. The exporter needs to complete | ||
| 301 | any preparations that might fail in begin_cpu_access. | ||
| 302 | |||
| 303 | 3. Finish access | ||
| 304 | |||
| 305 | When the importer is done accessing the range specified in begin_cpu_access, | ||
| 306 | it needs to announce this to the exporter (to facilitate cache flushing and | ||
| 307 | unpinning of any pinned resources). The result of of any dma_buf kmap calls | ||
| 308 | after end_cpu_access is undefined. | ||
| 309 | |||
| 310 | Interface: | ||
| 311 | void dma_buf_end_cpu_access(struct dma_buf *dma_buf, | ||
| 312 | size_t start, size_t len, | ||
| 313 | enum dma_data_direction dir); | ||
| 314 | |||
| 315 | |||
| 316 | Miscellaneous notes | ||
| 317 | ------------------- | ||
| 318 | |||
| 223 | - Any exporters or users of the dma-buf buffer sharing framework must have | 319 | - Any exporters or users of the dma-buf buffer sharing framework must have |
| 224 | a 'select DMA_SHARED_BUFFER' in their respective Kconfigs. | 320 | a 'select DMA_SHARED_BUFFER' in their respective Kconfigs. |
| 225 | 321 | ||
| 322 | - In order to avoid fd leaks on exec, the FD_CLOEXEC flag must be set | ||
| 323 | on the file descriptor. This is not just a resource leak, but a | ||
| 324 | potential security hole. It could give the newly exec'd application | ||
| 325 | access to buffers, via the leaked fd, to which it should otherwise | ||
| 326 | not be permitted access. | ||
| 327 | |||
| 328 | The problem with doing this via a separate fcntl() call, versus doing it | ||
| 329 | atomically when the fd is created, is that this is inherently racy in a | ||
| 330 | multi-threaded app[3]. The issue is made worse when it is library code | ||
| 331 | opening/creating the file descriptor, as the application may not even be | ||
| 332 | aware of the fd's. | ||
| 333 | |||
| 334 | To avoid this problem, userspace must have a way to request O_CLOEXEC | ||
| 335 | flag be set when the dma-buf fd is created. So any API provided by | ||
| 336 | the exporting driver to create a dmabuf fd must provide a way to let | ||
| 337 | userspace control setting of O_CLOEXEC flag passed in to dma_buf_fd(). | ||
| 338 | |||
| 226 | References: | 339 | References: |
| 227 | [1] struct dma_buf_ops in include/linux/dma-buf.h | 340 | [1] struct dma_buf_ops in include/linux/dma-buf.h |
| 228 | [2] All interfaces mentioned above defined in include/linux/dma-buf.h | 341 | [2] All interfaces mentioned above defined in include/linux/dma-buf.h |
| 342 | [3] https://lwn.net/Articles/236486/ | ||
| @@ -158,7 +158,6 @@ logo_*.c · 157 unmodified lines | |||
| 158 | logo_*_clut224.c | 158 | logo_*_clut224.c |
| 159 | logo_*_mono.c | 159 | logo_*_mono.c |
| 160 | lxdialog | 160 | lxdialog |
| 161 | mach | ||
| 162 | mach-types | 161 | mach-types |
| 163 | mach-types.h | 162 | mach-types.h |
| 164 | machtypes.h | 163 | machtypes.h |
| @@ -334,8 +334,8 @@ Sdram memory scrubbing rate: · 333 unmodified lines | |||
| 334 | 334 | ||
| 335 | Reading the file will return the actual scrubbing rate employed. | 335 | Reading the file will return the actual scrubbing rate employed. |
| 336 | 336 | ||
| 337 | If configuration fails or memory scrubbing is not implemented, the value | 337 | If configuration fails or memory scrubbing is not implemented, accessing |
| 338 | of the attribute file will be -1. | 338 | that attribute will fail. |
| 339 | 339 | ||
| 340 | 340 | ||
| 341 | 341 | ||
| @@ -211,7 +211,7 @@ Using the same setup as described above, load the module like this: · 210 unmodified lines | |||
| 211 | modprobe i810fb vram=2 xres=1024 bpp=8 hsync1=30 hsync2=55 vsync1=50 \ | 211 | modprobe i810fb vram=2 xres=1024 bpp=8 hsync1=30 hsync2=55 vsync1=50 \ |
| 212 | vsync2=85 accel=1 mtrr=1 | 212 | vsync2=85 accel=1 mtrr=1 |
| 213 | 213 | ||
| 214 | Or just add the following to /etc/modprobe.conf | 214 | Or just add the following to a configuration file in /etc/modprobe.d/ |
| 215 | 215 | ||
| 216 | options i810fb vram=2 xres=1024 bpp=16 hsync1=30 hsync2=55 vsync1=50 \ | 216 | options i810fb vram=2 xres=1024 bpp=16 hsync1=30 hsync2=55 vsync1=50 \ |
| 217 | vsync2=85 accel=1 mtrr=1 | 217 | vsync2=85 accel=1 mtrr=1 |
| @@ -120,7 +120,7 @@ Using the same setup as described above, load the module like this: · 119 unmodified lines | |||
| 120 | 120 | ||
| 121 | modprobe intelfb mode=800x600-32@75 vram=8 accel=1 hwcursor=1 | 121 | modprobe intelfb mode=800x600-32@75 vram=8 accel=1 hwcursor=1 |
| 122 | 122 | ||
| 123 | Or just add the following to /etc/modprobe.conf | 123 | Or just add the following to a configuration file in /etc/modprobe.d/ |
| 124 | 124 | ||
| 125 | options intelfb mode=800x600-32@75 vram=8 accel=1 hwcursor=1 | 125 | options intelfb mode=800x600-32@75 vram=8 accel=1 hwcursor=1 |
| 126 | 126 | ||
| @@ -6,14 +6,6 @@ be removed from this file. · 5 unmodified lines | |||
| 6 | 6 | ||
| 7 | --------------------------- | 7 | --------------------------- |
| 8 | 8 | ||
| 9 | What: x86 floppy disable_hlt | ||
| 10 | When: 2012 | ||
| 11 | Why: ancient workaround of dubious utility clutters the | ||
| 12 | code used by everybody else. | ||
| 13 | Who: Len Brown <len.brown@intel.com> | ||
| 14 | |||
| 15 | --------------------------- | ||
| 16 | |||
| 17 | What: CONFIG_APM_CPU_IDLE, and its ability to call APM BIOS in idle | 9 | What: CONFIG_APM_CPU_IDLE, and its ability to call APM BIOS in idle |
| 18 | When: 2012 | 10 | When: 2012 |
| 19 | Why: This optional sub-feature of APM is of dubious reliability, | 11 | Why: This optional sub-feature of APM is of dubious reliability, |
| @@ -513,20 +505,6 @@ Who: Bjorn Helgaas <bhelgaas@google.com> · 493 unmodified lines | |||
| 513 | 505 | ||
| 514 | ---------------------------- | 506 | ---------------------------- |
| 515 | 507 | ||
| 516 | What: The CAP9 SoC family will be removed | ||
| 517 | When: 3.4 | ||
| 518 | Files: arch/arm/mach-at91/at91cap9.c | ||
| 519 | arch/arm/mach-at91/at91cap9_devices.c | ||
| 520 | arch/arm/mach-at91/include/mach/at91cap9.h | ||
| 521 | arch/arm/mach-at91/include/mach/at91cap9_matrix.h | ||
| 522 | arch/arm/mach-at91/include/mach/at91cap9_ddrsdr.h | ||
| 523 | arch/arm/mach-at91/board-cap9adk.c | ||
| 524 | Why: The code is not actively maintained and platforms are now hard to find. | ||
| 525 | Who: Nicolas Ferre <nicolas.ferre@atmel.com> | ||
| 526 | Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | ||
| 527 | |||
| 528 | ---------------------------- | ||
| 529 | |||
| 530 | What: Low Performance USB Block driver ("CONFIG_BLK_DEV_UB") | 508 | What: Low Performance USB Block driver ("CONFIG_BLK_DEV_UB") |
| 531 | When: 3.6 | 509 | When: 3.6 |
| 532 | Why: This driver provides support for USB storage devices like "USB | 510 | Why: This driver provides support for USB storage devices like "USB |
| @@ -543,3 +521,21 @@ When: 3.5 · 10 unmodified lines | |||
| 543 | Why: The old kmap_atomic() with two arguments is deprecated, we only | 521 | Why: The old kmap_atomic() with two arguments is deprecated, we only |
| 544 | keep it for backward compatibility for few cycles and then drop it. | 522 | keep it for backward compatibility for few cycles and then drop it. |
| 545 | Who: Cong Wang <amwang@redhat.com> | 523 | Who: Cong Wang <amwang@redhat.com> |
| 524 | |||
| 525 | ---------------------------- | ||
| 526 | |||
| 527 | What: get_robust_list syscall | ||
| 528 | When: 2013 | ||
| 529 | Why: There appear to be no production users of the get_robust_list syscall, | ||
| 530 | and it runs the risk of leaking address locations, allowing the bypass | ||
| 531 | of ASLR. It was only ever intended for debugging, so it should be | ||
| 532 | removed. | ||
| 533 | Who: Kees Cook <keescook@chromium.org> | ||
| 534 | |||
| 535 | ---------------------------- | ||
| 536 | |||
| 537 | What: setitimer accepts user NULL pointer (value) | ||
| 538 | When: 3.6 | ||
| 539 | Why: setitimer is not returning -EFAULT if user pointer is NULL. This | ||
| 540 | violates the spec. | ||
| 541 | Who: Sasikantha Babu <sasikanth.v19@gmail.com> | ||
| @@ -144,9 +144,6 @@ journal_async_commit Commit block can be written to disk without waiting · 143 unmodified lines | |||
| 144 | mount the device. This will enable 'journal_checksum' | 144 | mount the device. This will enable 'journal_checksum' |
| 145 | internally. | 145 | internally. |
| 146 | 146 | ||
| 147 | journal=update Update the ext4 file system's journal to the current | ||
| 148 | format. | ||
| 149 | |||
| 150 | journal_dev=devnum When the external journal device's major/minor numbers | 147 | journal_dev=devnum When the external journal device's major/minor numbers |
| 151 | have changed, this option allows the user to specify | 148 | have changed, this option allows the user to specify |
| 152 | the new journal location. The journal device is | 149 | the new journal location. The journal device is |
| @@ -356,11 +353,6 @@ nouid32 Disables 32-bit UIDs and GIDs. This is for · 203 unmodified lines | |||
| 356 | interoperability with older kernels which only | 353 | interoperability with older kernels which only |
| 357 | store and expect 16-bit values. | 354 | store and expect 16-bit values. |
| 358 | 355 | ||
| 359 | resize Allows to resize filesystem to the end of the last | ||
| 360 | existing block group, further resize has to be done | ||
| 361 | with resize2fs either online, or offline. It can be | ||
| 362 | used only with conjunction with remount. | ||
| 363 | |||
| 364 | block_validity This options allows to enables/disables the in-kernel | 356 | block_validity This options allows to enables/disables the in-kernel |
| 365 | noblock_validity facility for tracking filesystem metadata blocks | 357 | noblock_validity facility for tracking filesystem metadata blocks |
| 366 | within internal data structures. This allows multi- | 358 | within internal data structures. This allows multi- |
| @@ -113,8 +113,8 @@ the fdtable structure - · 112 unmodified lines | |||
| 113 | if (fd >= 0) { | 113 | if (fd >= 0) { |
| 114 | /* locate_fd() may have expanded fdtable, load the ptr */ | 114 | /* locate_fd() may have expanded fdtable, load the ptr */ |
| 115 | fdt = files_fdtable(files); | 115 | fdt = files_fdtable(files); |
| 116 | FD_SET(fd, fdt->open_fds); | 116 | __set_open_fd(fd, fdt); |
| 117 | FD_CLR(fd, fdt->close_on_exec); | 117 | __clear_close_on_exec(fd, fdt); |
| 118 | spin_unlock(&files->file_lock); | 118 | spin_unlock(&files->file_lock); |
| 119 | ..... | 119 | ..... |
| 120 | 120 | ||
| @@ -114,7 +114,7 @@ members are defined: · 113 unmodified lines | |||
| 114 | struct file_system_type { | 114 | struct file_system_type { |
| 115 | const char *name; | 115 | const char *name; |
| 116 | int fs_flags; | 116 | int fs_flags; |
| 117 | struct dentry (*mount) (struct file_system_type *, int, | 117 | struct dentry *(*mount) (struct file_system_type *, int, |
| 118 | const char *, void *); | 118 | const char *, void *); |
| 119 | void (*kill_sb) (struct super_block *); | 119 | void (*kill_sb) (struct super_block *); |
| 120 | struct module *owner; | 120 | struct module *owner; |
| @@ -271,9 +271,26 @@ Some platforms may also use knowledge about what GPIOs are active for · 270 unmodified lines | |||
| 271 | power management, such as by powering down unused chip sectors and, more | 271 | power management, such as by powering down unused chip sectors and, more |
| 272 | easily, gating off unused clocks. | 272 | easily, gating off unused clocks. |
| 273 | 273 | ||
| 274 | Note that requesting a GPIO does NOT cause it to be configured in any | 274 | For GPIOs that use pins known to the pinctrl subsystem, that subsystem should |
| 275 | way; it just marks that GPIO as in use. Separate code must handle any | 275 | be informed of their use; a gpiolib driver's .request() operation may call |
| 276 | pin setup (e.g. controlling which pin the GPIO uses, pullup/pulldown). | 276 | pinctrl_request_gpio(), and a gpiolib driver's .free() operation may call |
| 277 | pinctrl_free_gpio(). The pinctrl subsystem allows a pinctrl_request_gpio() | ||
| 278 | to succeed concurrently with a pin or pingroup being "owned" by a device for | ||
| 279 | pin multiplexing. | ||
| 280 | |||
| 281 | Any programming of pin multiplexing hardware that is needed to route the | ||
| 282 | GPIO signal to the appropriate pin should occur within a GPIO driver's | ||
| 283 | .direction_input() or .direction_output() operations, and occur after any | ||
| 284 | setup of an output GPIO's value. This allows a glitch-free migration from a | ||
| 285 | pin's special function to GPIO. This is sometimes required when using a GPIO | ||
| 286 | to implement a workaround on signals typically driven by a non-GPIO HW block. | ||
| 287 | |||
| 288 | Some platforms allow some or all GPIO signals to be routed to different pins. | ||
| 289 | Similarly, other aspects of the GPIO or pin may need to be configured, such as | ||
| 290 | pullup/pulldown. Platform software should arrange that any such details are | ||
| 291 | configured prior to gpio_request() being called for those GPIOs, e.g. using | ||
| 292 | the pinctrl subsystem's mapping table, so that GPIO users need not be aware | ||
| 293 | of these details. | ||
| 277 | 294 | ||
| 278 | Also note that it's your responsibility to have stopped using a GPIO | 295 | Also note that it's your responsibility to have stopped using a GPIO |
| 279 | before you free it. | 296 | before you free it. |
| @@ -302,6 +319,8 @@ where 'flags' is currently defined to specify the following properties: · 22 unmodified lines | |||
| 302 | 319 | ||
| 303 | * GPIOF_INIT_LOW - as output, set initial level to LOW | 320 | * GPIOF_INIT_LOW - as output, set initial level to LOW |
| 304 | * GPIOF_INIT_HIGH - as output, set initial level to HIGH | 321 | * GPIOF_INIT_HIGH - as output, set initial level to HIGH |
| 322 | * GPIOF_OPEN_DRAIN - gpio pin is open drain type. | ||
| 323 | * GPIOF_OPEN_SOURCE - gpio pin is open source type. | ||
| 305 | 324 | ||
| 306 | since GPIOF_INIT_* are only valid when configured as output, so group valid | 325 | since GPIOF_INIT_* are only valid when configured as output, so group valid |
| 307 | combinations as: | 326 | combinations as: |
| @@ -310,8 +329,19 @@ combinations as: · 2 unmodified lines | |||
| 310 | * GPIOF_OUT_INIT_LOW - configured as output, initial level LOW | 329 | * GPIOF_OUT_INIT_LOW - configured as output, initial level LOW |
| 311 | * GPIOF_OUT_INIT_HIGH - configured as output, initial level HIGH | 330 | * GPIOF_OUT_INIT_HIGH - configured as output, initial level HIGH |
| 312 | 331 | ||
| 313 | In the future, these flags can be extended to support more properties such | 332 | When setting the flag as GPIOF_OPEN_DRAIN then it will assume that pins is |
| 314 | as open-drain status. | 333 | open drain type. Such pins will not be driven to 1 in output mode. It is |
| 334 | require to connect pull-up on such pins. By enabling this flag, gpio lib will | ||
| 335 | make the direction to input when it is asked to set value of 1 in output mode | ||
| 336 | to make the pin HIGH. The pin is make to LOW by driving value 0 in output mode. | ||
| 337 | |||
| 338 | When setting the flag as GPIOF_OPEN_SOURCE then it will assume that pins is | ||
| 339 | open source type. Such pins will not be driven to 0 in output mode. It is | ||
| 340 | require to connect pull-down on such pin. By enabling this flag, gpio lib will | ||
| 341 | make the direction to input when it is asked to set value of 0 in output mode | ||
| 342 | to make the pin LOW. The pin is make to HIGH by driving value 1 in output mode. | ||
| 343 | |||
| 344 | In the future, these flags can be extended to support more properties. | ||
| 315 | 345 | ||
| 316 | Further more, to ease the claim/release of multiple GPIOs, 'struct gpio' is | 346 | Further more, to ease the claim/release of multiple GPIOs, 'struct gpio' is |
| 317 | introduced to encapsulate all three fields as: | 347 | introduced to encapsulate all three fields as: |
| @@ -11,7 +11,7 @@ Supported chips: · 10 unmodified lines | |||
| 11 | Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra) | 11 | Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra) |
| 12 | * AMD Family 12h processors: "Llano" (E2/A4/A6/A8-Series) | 12 | * AMD Family 12h processors: "Llano" (E2/A4/A6/A8-Series) |
| 13 | * AMD Family 14h processors: "Brazos" (C/E/G/Z-Series) | 13 | * AMD Family 14h processors: "Brazos" (C/E/G/Z-Series) |
| 14 | * AMD Family 15h processors: "Bulldozer" | 14 | * AMD Family 15h processors: "Bulldozer" (FX-Series), "Trinity" |
| 15 | 15 | ||
| 16 | Prefix: 'k10temp' | 16 | Prefix: 'k10temp' |
| 17 | Addresses scanned: PCI space | 17 | Addresses scanned: PCI space |
| @@ -118,6 +118,10 @@ Supported chips: · 117 unmodified lines | |||
| 118 | Addresses scanned: I2C 0x48 through 0x4F | 118 | Addresses scanned: I2C 0x48 through 0x4F |
| 119 | Datasheet: Publicly available at NXP website | 119 | Datasheet: Publicly available at NXP website |
| 120 | http://ics.nxp.com/products/interface/datasheet/sa56004x.pdf | 120 | http://ics.nxp.com/products/interface/datasheet/sa56004x.pdf |
| 121 | * GMT G781 | ||
| 122 | Prefix: 'g781' | ||
| 123 | Addresses scanned: I2C 0x4c, 0x4d | ||
| 124 | Datasheet: Not publicly available from GMT | ||
| 121 | 125 | ||
| 122 | Author: Jean Delvare <khali@linux-fr.org> | 126 | Author: Jean Delvare <khali@linux-fr.org> |
| 123 | 127 | ||
| @@ -3,8 +3,11 @@ Kernel driver mc13783-adc · 2 unmodified lines | |||
| 3 | 3 | ||
| 4 | Supported chips: | 4 | Supported chips: |
| 5 | * Freescale Atlas MC13783 | 5 | * Freescale Atlas MC13783 |
| 6 | Prefix: 'mc13783_adc' | 6 | Prefix: 'mc13783' |
| 7 | Datasheet: http://www.freescale.com/files/rf_if/doc/data_sheet/MC13783.pdf?fsrch=1 | 7 | Datasheet: http://www.freescale.com/files/rf_if/doc/data_sheet/MC13783.pdf?fsrch=1 |
| 8 | * Freescale Atlas MC13892 | ||
| 9 | Prefix: 'mc13892' | ||
| 10 | Datasheet: http://cache.freescale.com/files/analog/doc/data_sheet/MC13892.pdf?fsrch=1&sr=1 | ||
| 8 | 11 | ||
| 9 | Authors: | 12 | Authors: |
| 10 | Sascha Hauer <s.hauer@pengutronix.de> | 13 | Sascha Hauer <s.hauer@pengutronix.de> |
| @@ -13,20 +16,21 @@ Authors: · 2 unmodified lines | |||
| 13 | Description | 16 | Description |
| 14 | ----------- | 17 | ----------- |
| 15 | 18 | ||
| 16 | The Freescale MC13783 is a Power Management and Audio Circuit. Among | 19 | The Freescale MC13783 and MC13892 are Power Management and Audio Circuits. |
| 17 | other things it contains a 10-bit A/D converter. The converter has 16 | 20 | Among other things they contain a 10-bit A/D converter. The converter has 16 |
| 18 | channels which can be used in different modes. | 21 | (MC13783) resp. 12 (MC13892) channels which can be used in different modes. The |
| 19 | The A/D converter has a resolution of 2.25mV. Channels 0-4 have | 22 | A/D converter has a resolution of 2.25mV. |
| 20 | a dedicated meaning with chip internal scaling applied. Channels 5-7 | ||
| 21 | can be used as general purpose inputs or alternatively in a dedicated | ||
| 22 | mode. Channels 12-15 are occupied by the touchscreen if it's active. | ||
| 23 | 23 | ||
| 24 | Currently the driver only supports channels 2 and 5-15 with no alternative | 24 | Some channels can be used as General Purpose inputs or in a dedicated mode with |
| 25 | modes for channels 5-7. | 25 | a chip internal scaling applied . |
| 26 | 26 | ||
| 27 | See this table for the meaning of the different channels and their chip | 27 | Currently the driver only supports the Application Supply channel (BP / BPSNS), |
| 28 | internal scaling: | 28 | the General Purpose inputs and touchscreen. |
| 29 | 29 | ||
| 30 | See the following tables for the meaning of the different channels and their | ||
| 31 | chip internal scaling: | ||
| 32 | |||
| 33 | MC13783: | ||
| 30 | Channel Signal Input Range Scaling | 34 | Channel Signal Input Range Scaling |
| 31 | ------------------------------------------------------------------------------- | 35 | ------------------------------------------------------------------------------- |
| 32 | 0 Battery Voltage (BATT) 2.50 - 4.65V -2.40V | 36 | 0 Battery Voltage (BATT) 2.50 - 4.65V -2.40V |
| @@ -34,7 +38,7 @@ Channel Signal Input Range Scaling · 1 unmodified line | |||
| 34 | 2 Application Supply (BP) 2.50 - 4.65V -2.40V | 38 | 2 Application Supply (BP) 2.50 - 4.65V -2.40V |
| 35 | 3 Charger Voltage (CHRGRAW) 0 - 10V / /5 | 39 | 3 Charger Voltage (CHRGRAW) 0 - 10V / /5 |
| 36 | 0 - 20V /10 | 40 | 0 - 20V /10 |
| 37 | 4 Charger Current (CHRGISNSP-CHRGISNSN) -0.25V - 0.25V x4 | 41 | 4 Charger Current (CHRGISNSP-CHRGISNSN) -0.25 - 0.25V x4 |
| 38 | 5 General Purpose ADIN5 / Battery Pack Thermistor 0 - 2.30V No | 42 | 5 General Purpose ADIN5 / Battery Pack Thermistor 0 - 2.30V No |
| 39 | 6 General Purpose ADIN6 / Backup Voltage (LICELL) 0 - 2.30V / No / | 43 | 6 General Purpose ADIN6 / Backup Voltage (LICELL) 0 - 2.30V / No / |
| 40 | 1.50 - 3.50V -1.20V | 44 | 1.50 - 3.50V -1.20V |
| @@ -48,3 +52,23 @@ Channel Signal Input Range Scaling · 7 unmodified lines | |||
| 48 | 13 General Purpose TSX2 / Touchscreen X-plate 2 0 - 2.30V No | 52 | 13 General Purpose TSX2 / Touchscreen X-plate 2 0 - 2.30V No |
| 49 | 14 General Purpose TSY1 / Touchscreen Y-plate 1 0 - 2.30V No | 53 | 14 General Purpose TSY1 / Touchscreen Y-plate 1 0 - 2.30V No |
| 50 | 15 General Purpose TSY2 / Touchscreen Y-plate 2 0 - 2.30V No | 54 | 15 General Purpose TSY2 / Touchscreen Y-plate 2 0 - 2.30V No |
| 55 | |||
| 56 | MC13892: | ||
| 57 | Channel Signal Input Range Scaling | ||
| 58 | ------------------------------------------------------------------------------- | ||
| 59 | 0 Battery Voltage (BATT) 0 - 4.8V /2 | ||
| 60 | 1 Battery Current (BATT - BATTISNSCC) -60 - 60 mV x20 | ||
| 61 | 2 Application Supply (BPSNS) 0 - 4.8V /2 | ||
| 62 | 3 Charger Voltage (CHRGRAW) 0 - 12V / /5 | ||
| 63 | 0 - 20V /10 | ||
| 64 | 4 Charger Current (CHRGISNS-BPSNS) / -0.3 - 0.3V / x4 / | ||
| 65 | Touchscreen X-plate 1 0 - 2.4V No | ||
| 66 | 5 General Purpose ADIN5 / Battery Pack Thermistor 0 - 2.4V No | ||
| 67 | 6 General Purpose ADIN6 / Backup Voltage (LICELL) 0 - 2.4V / No | ||
| 68 | Backup Voltage (LICELL) 0 - 3.6V x2/3 | ||
| 69 | 7 General Purpose ADIN7 / UID / Die Temperature 0 - 2.4V / No / | ||
| 70 | 0 - 4.8V /2 | ||
| 71 | 12 General Purpose TSX1 / Touchscreen X-plate 1 0 - 2.4V No | ||
| 72 | 13 General Purpose TSX2 / Touchscreen X-plate 2 0 - 2.4V No | ||
| 73 | 14 General Purpose TSY1 / Touchscreen Y-plate 1 0 - 2.4V No | ||
| 74 | 15 General Purpose TSY2 / Touchscreen Y-plate 2 0 - 2.4V No | ||
| @@ -0,0 +1,22 @@ | |||
| 1 | Kernel driver MCP3021 | ||
| 2 | ====================== | ||
| 3 | |||
| 4 | Supported chips: | ||
| 5 | * Microchip Technology MCP3021 | ||
| 6 | Prefix: 'mcp3021' | ||
| 7 | Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/21805a.pdf | ||
| 8 | |||
| 9 | Author: Mingkai Hu | ||
| 10 | |||
| 11 | Description | ||
| 12 | ----------- | ||
| 13 | |||
| 14 | This driver implements support for the Microchip Technology MCP3021 chip. | ||
| 15 | |||
| 16 | The Microchip Technology Inc. MCP3021 is a successive approximation A/D | ||
| 17 | converter (ADC) with 10-bit resolution. | ||
| 18 | This device provides one single-ended input with very low power consumption. | ||
| 19 | Communication to the MCP3021 is performed using a 2-wire I2C compatible | ||
| 20 | interface. Standard (100 kHz) and Fast (400 kHz) I2C modes are available. | ||
| 21 | The default I2C device address is 0x4d (contact the Microchip factory for | ||
| 22 | additional address options). | ||
| @@ -20,6 +20,7 @@ Supported adapters: · 19 unmodified lines | |||
| 20 | * Intel Patsburg (PCH) | 20 | * Intel Patsburg (PCH) |
| 21 | * Intel DH89xxCC (PCH) | 21 | * Intel DH89xxCC (PCH) |
| 22 | * Intel Panther Point (PCH) | 22 | * Intel Panther Point (PCH) |
| 23 | * Intel Lynx Point (PCH) | ||
| 23 | Datasheets: Publicly available at the Intel website | 24 | Datasheets: Publicly available at the Intel website |
| 24 | 25 | ||
| 25 | On Intel Patsburg and later chipsets, both the normal host SMBus controller | 26 | On Intel Patsburg and later chipsets, both the normal host SMBus controller |
| @@ -28,5 +28,5 @@ If the scx200_acb driver is built into the kernel, add the following · 27 unmodified lines | |||
| 28 | parameter to your boot command line: | 28 | parameter to your boot command line: |
| 29 | scx200_acb.base=0x810,0x820 | 29 | scx200_acb.base=0x810,0x820 |
| 30 | If the scx200_acb driver is built as a module, add the following line to | 30 | If the scx200_acb driver is built as a module, add the following line to |
| 31 | the file /etc/modprobe.conf instead: | 31 | a configuration file in /etc/modprobe.d/ instead: |
| 32 | options scx200_acb base=0x810,0x820 | 32 | options scx200_acb base=0x810,0x820 |
| @@ -169,7 +169,7 @@ When using ide.c as a module in combination with kmod, add: · 168 unmodified lines | |||
| 169 | 169 | ||
| 170 | alias block-major-3 ide-probe | 170 | alias block-major-3 ide-probe |
| 171 | 171 | ||
| 172 | to /etc/modprobe.conf. | 172 | to a configuration file in /etc/modprobe.d/. |
| 173 | 173 | ||
| 174 | When ide.c is used as a module, you can pass command line parameters to the | 174 | When ide.c is used as a module, you can pass command line parameters to the |
| 175 | driver using the "options=" keyword to insmod, while replacing any ',' with | 175 | driver using the "options=" keyword to insmod, while replacing any ',' with |
| @@ -250,8 +250,8 @@ And so on up to event31. · 249 unmodified lines | |||
| 250 | a USB keyboard works and is correctly connected to the kernel keyboard | 250 | a USB keyboard works and is correctly connected to the kernel keyboard |
| 251 | driver. | 251 | driver. |
| 252 | 252 | ||
| 253 | Doing a cat /dev/input/mouse0 (c, 13, 32) will verify that a mouse | 253 | Doing a "cat /dev/input/mouse0" (c, 13, 32) will verify that a mouse |
| 254 | is also emulated, characters should appear if you move it. | 254 | is also emulated; characters should appear if you move it. |
| 255 | 255 | ||
| 256 | You can test the joystick emulation with the 'jstest' utility, | 256 | You can test the joystick emulation with the 'jstest' utility, |
| 257 | available in the joystick package (see Documentation/input/joystick.txt). | 257 | available in the joystick package (see Documentation/input/joystick.txt). |
| @@ -225,6 +225,7 @@ Code Seq#(hex) Include File Comments · 224 unmodified lines | |||
| 225 | 'j' 00-3F linux/joystick.h | 225 | 'j' 00-3F linux/joystick.h |
| 226 | 'k' 00-0F linux/spi/spidev.h conflict! | 226 | 'k' 00-0F linux/spi/spidev.h conflict! |
| 227 | 'k' 00-05 video/kyro.h conflict! | 227 | 'k' 00-05 video/kyro.h conflict! |
| 228 | 'k' 10-17 linux/hsi/hsi_char.h HSI character device | ||
| 228 | 'l' 00-3F linux/tcfs_fs.h transparent cryptographic file system | 229 | 'l' 00-3F linux/tcfs_fs.h transparent cryptographic file system |
| 229 | <http://web.archive.org/web/*/http://mikonos.dia.unisa.it/tcfs> | 230 | <http://web.archive.org/web/*/http://mikonos.dia.unisa.it/tcfs> |
| 230 | 'l' 40-7F linux/udf_fs_i.h in development: | 231 | 'l' 40-7F linux/udf_fs_i.h in development: |
| @@ -97,8 +97,7 @@ GigaSet 307x Device Driver · 96 unmodified lines | |||
| 97 | 2.5.): 1=on (default), 0=off | 97 | 2.5.): 1=on (default), 0=off |
| 98 | 98 | ||
| 99 | Depending on your distribution you may want to create a separate module | 99 | Depending on your distribution you may want to create a separate module |
| 100 | configuration file /etc/modprobe.d/gigaset for these, or add them to a | 100 | configuration file like /etc/modprobe.d/gigaset.conf for these. |
| 101 | custom file like /etc/modprobe.conf.local. | ||
| 102 | 101 | ||
| 103 | 2.2. Device nodes for user space programs | 102 | 2.2. Device nodes for user space programs |
| 104 | ------------------------------------ | 103 | ------------------------------------ |
| @@ -212,8 +211,8 @@ GigaSet 307x Device Driver · 107 unmodified lines | |||
| 212 | 211 | ||
| 213 | options ppp_async flag_time=0 | 212 | options ppp_async flag_time=0 |
| 214 | 213 | ||
| 215 | to an appropriate module configuration file, like /etc/modprobe.d/gigaset | 214 | to an appropriate module configuration file, like |
| 216 | or /etc/modprobe.conf.local. | 215 | /etc/modprobe.d/gigaset.conf. |
| 217 | 216 | ||
| 218 | Unimodem mode is needed for making some devices [e.g. SX100] work which | 217 | Unimodem mode is needed for making some devices [e.g. SX100] work which |
| 219 | do not support the regular Gigaset command set. If debug output (see | 218 | do not support the regular Gigaset command set. If debug output (see |
| @@ -237,8 +236,8 @@ GigaSet 307x Device Driver · 17 unmodified lines | |||
| 237 | modprobe usb_gigaset startmode=0 | 236 | modprobe usb_gigaset startmode=0 |
| 238 | or by adding a line like | 237 | or by adding a line like |
| 239 | options usb_gigaset startmode=0 | 238 | options usb_gigaset startmode=0 |
| 240 | to an appropriate module configuration file, like /etc/modprobe.d/gigaset | 239 | to an appropriate module configuration file, like |
| 241 | or /etc/modprobe.conf.local. | 240 | /etc/modprobe.d/gigaset.conf |
| 242 | 241 | ||
| 243 | 2.6. Call-ID (CID) mode | 242 | 2.6. Call-ID (CID) mode |
| 244 | ------------------ | 243 | ------------------ |
| @@ -310,7 +309,7 @@ GigaSet 307x Device Driver · 65 unmodified lines | |||
| 310 | 309 | ||
| 311 | options isdn dialtimeout=15 | 310 | options isdn dialtimeout=15 |
| 312 | 311 | ||
| 313 | to /etc/modprobe.d/gigaset, /etc/modprobe.conf.local or a similar file. | 312 | to /etc/modprobe.d/gigaset.conf or a similar file. |
| 314 | 313 | ||
| 315 | Problem: | 314 | Problem: |
| 316 | The isdnlog program emits error messages or just doesn't work. | 315 | The isdnlog program emits error messages or just doesn't work. |
| @@ -350,8 +349,7 @@ GigaSet 307x Device Driver · 33 unmodified lines | |||
| 350 | The initial value can be set using the debug parameter when loading the | 349 | The initial value can be set using the debug parameter when loading the |
| 351 | module "gigaset", e.g. by adding a line | 350 | module "gigaset", e.g. by adding a line |
| 352 | options gigaset debug=0 | 351 | options gigaset debug=0 |
| 353 | to your module configuration file, eg. /etc/modprobe.d/gigaset or | 352 | to your module configuration file, eg. /etc/modprobe.d/gigaset.conf |
| 354 | /etc/modprobe.conf.local. | ||
| 355 | 353 | ||
| 356 | Generated debugging information can be found | 354 | Generated debugging information can be found |
| 357 | - as output of the command | 355 | - as output of the command |
| @@ -28,12 +28,10 @@ new (default) values, so you can use: · 27 unmodified lines | |||
| 28 | 28 | ||
| 29 | grep "(NEW)" conf.new | 29 | grep "(NEW)" conf.new |
| 30 | 30 | ||
| 31 | to see the new config symbols or you can 'diff' the previous and | 31 | to see the new config symbols or you can use diffconfig to see the |
| 32 | new .config files to see the differences: | 32 | differences between the previous and new .config files: |
| 33 | 33 | ||
| 34 | diff .config.old .config | less | 34 | scripts/diffconfig .config.old .config | less |
| 35 | |||
| 36 | (Yes, we need something better here.) | ||
| 37 | 35 | ||
| 38 | ______________________________________________________________________ | 36 | ______________________________________________________________________ |
| 39 | Environment variables for '*config' | 37 | Environment variables for '*config' |
| @@ -1086,8 +1086,6 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 1085 unmodified lines | |||
| 1086 | no_x2apic_optout | 1086 | no_x2apic_optout |
| 1087 | BIOS x2APIC opt-out request will be ignored | 1087 | BIOS x2APIC opt-out request will be ignored |
| 1088 | 1088 | ||
| 1089 | inttest= [IA-64] | ||
| 1090 | |||
| 1091 | iomem= Disable strict checking of access to MMIO memory | 1089 | iomem= Disable strict checking of access to MMIO memory |
| 1092 | strict regions from userspace. | 1090 | strict regions from userspace. |
| 1093 | relaxed | 1091 | relaxed |
| @@ -1701,6 +1699,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 607 unmodified lines | |||
| 1701 | The default is to send the implementation identification | 1699 | The default is to send the implementation identification |
| 1702 | information. | 1700 | information. |
| 1703 | 1701 | ||
| 1702 | nfsd.nfs4_disable_idmapping= | ||
| 1703 | [NFSv4] When set to the default of '1', the NFSv4 | ||
| 1704 | server will return only numeric uids and gids to | ||
| 1705 | clients using auth_sys, and will accept numeric uids | ||
| 1706 | and gids from such clients. This is intended to ease | ||
| 1707 | migration from NFSv2/v3. | ||
| 1704 | 1708 | ||
| 1705 | objlayoutdriver.osd_login_prog= | 1709 | objlayoutdriver.osd_login_prog= |
| 1706 | [NFS] [OBJLAYOUT] sets the pathname to the program which | 1710 | [NFS] [OBJLAYOUT] sets the pathname to the program which |
| @@ -1871,6 +1875,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 164 unmodified lines | |||
| 1871 | shutdown the other cpus. Instead use the REBOOT_VECTOR | 1875 | shutdown the other cpus. Instead use the REBOOT_VECTOR |
| 1872 | irq. | 1876 | irq. |
| 1873 | 1877 | ||
| 1878 | nomodule Disable module load | ||
| 1879 | |||
| 1874 | nopat [X86] Disable PAT (page attribute table extension of | 1880 | nopat [X86] Disable PAT (page attribute table extension of |
| 1875 | pagetables) support. | 1881 | pagetables) support. |
| 1876 | 1882 | ||
| @@ -2147,8 +2153,14 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 270 unmodified lines | |||
| 2147 | the default. | 2153 | the default. |
| 2148 | off: Turn ECRC off | 2154 | off: Turn ECRC off |
| 2149 | on: Turn ECRC on. | 2155 | on: Turn ECRC on. |
| 2150 | realloc reallocate PCI resources if allocations done by BIOS | 2156 | realloc= Enable/disable reallocating PCI bridge resources |
| 2151 | are erroneous. | 2157 | if allocations done by BIOS are too small to |
| 2158 | accommodate resources required by all child | ||
| 2159 | devices. | ||
| 2160 | off: Turn realloc off | ||
| 2161 | on: Turn realloc on | ||
| 2162 | realloc same as realloc=on | ||
| 2163 | noari do not use PCIe ARI. | ||
| 2152 | 2164 | ||
| 2153 | pcie_aspm= [PCIE] Forcibly enable or disable PCIe Active State Power | 2165 | pcie_aspm= [PCIE] Forcibly enable or disable PCIe Active State Power |
| 2154 | Management. | 2166 | Management. |
| @@ -2156,6 +2168,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 1 unmodified line | |||
| 2156 | force Enable ASPM even on devices that claim not to support it. | 2168 | force Enable ASPM even on devices that claim not to support it. |
| 2157 | WARNING: Forcing ASPM on may cause system lockups. | 2169 | WARNING: Forcing ASPM on may cause system lockups. |
| 2158 | 2170 | ||
| 2171 | pcie_hp= [PCIE] PCI Express Hotplug driver options: | ||
| 2172 | nomsi Do not use MSI for PCI Express Native Hotplug (this | ||
| 2173 | makes all PCIe ports use INTx for hotplug services). | ||
| 2174 | |||
| 2159 | pcie_ports= [PCIE] PCIe ports handling: | 2175 | pcie_ports= [PCIE] PCIe ports handling: |
| 2160 | auto Ask the BIOS whether or not to use native PCIe services | 2176 | auto Ask the BIOS whether or not to use native PCIe services |
| 2161 | associated with PCIe ports (PME, hot-plug, AER). Use | 2177 | associated with PCIe ports (PME, hot-plug, AER). Use |
| @@ -45,7 +45,7 @@ Status · 44 unmodified lines | |||
| 45 | Usage | 45 | Usage |
| 46 | ----- | 46 | ----- |
| 47 | 47 | ||
| 48 | Try "modprobe asus_acpi". Check your dmesg (simply type dmesg). You should | 48 | Try "modprobe asus-laptop". Check your dmesg (simply type dmesg). You should |
| 49 | see some lines like this : | 49 | see some lines like this : |
| 50 | 50 | ||
| 51 | Asus Laptop Extras version 0.42 | 51 | Asus Laptop Extras version 0.42 |
| @@ -17,6 +17,11 @@ subsystem. See the logs of acpid or /proc/acpi/event and · 16 unmodified lines | |||
| 17 | devices are created by the driver. Additionally, loading the driver with the | 17 | devices are created by the driver. Additionally, loading the driver with the |
| 18 | debug option will report all events in the kernel log. | 18 | debug option will report all events in the kernel log. |
| 19 | 19 | ||
| 20 | The "scancodes" passed to the input system (that can be remapped with udev) | ||
| 21 | are indexes to the table "sony_laptop_input_keycode_map" in the sony-laptop.c | ||
| 22 | module. For example the "FN/E" key combination (EJECTCD on some models) | ||
| 23 | generates the scancode 20 (0x14). | ||
| 24 | |||
| 20 | Backlight control: | 25 | Backlight control: |
| 21 | ------------------ | 26 | ------------------ |
| 22 | If your laptop model supports it, you will find sysfs files in the | 27 | If your laptop model supports it, you will find sysfs files in the |
| @@ -110,7 +110,7 @@ Module use: · 109 unmodified lines | |||
| 110 | ----------- | 110 | ----------- |
| 111 | 111 | ||
| 112 | In order to automatically load the sonypi module on use, you can put those | 112 | In order to automatically load the sonypi module on use, you can put those |
| 113 | lines in your /etc/modprobe.conf file: | 113 | lines a configuration file in /etc/modprobe.d/: |
| 114 | 114 | ||
| 115 | alias char-major-10-250 sonypi | 115 | alias char-major-10-250 sonypi |
| 116 | options sonypi minor=250 | 116 | options sonypi minor=250 |
| @@ -38,11 +38,11 @@ if [ ! -e /proc/sys/fs/binfmt_misc/register ]; then · 37 unmodified lines | |||
| 38 | /sbin/modprobe binfmt_misc | 38 | /sbin/modprobe binfmt_misc |
| 39 | # Some distributions, like Fedora Core, perform | 39 | # Some distributions, like Fedora Core, perform |
| 40 | # the following command automatically when the | 40 | # the following command automatically when the |
| 41 | # binfmt_misc module is loaded into the kernel. | 41 | # binfmt_misc module is loaded into the kernel |
| 42 | # or during normal boot up (systemd-based systems). | ||
| 42 | # Thus, it is possible that the following line | 43 | # Thus, it is possible that the following line |
| 43 | # is not needed at all. Look at /etc/modprobe.conf | 44 | # is not needed at all. |
| 44 | # to check whether this is applicable or not. | 45 | mount -t binfmt_misc none /proc/sys/fs/binfmt_misc |
| 45 | mount -t binfmt_misc none /proc/sys/fs/binfmt_misc | ||
| 46 | fi | 46 | fi |
| 47 | 47 | ||
| 48 | # Register support for .NET CLR binaries | 48 | # Register support for .NET CLR binaries |
| @@ -93,7 +93,7 @@ Every time a driver is inserted into the kernel, it has to know which · 92 unmodified lines | |||
| 93 | modems it should access at which ports. This can be done with the setbaycom | 93 | modems it should access at which ports. This can be done with the setbaycom |
| 94 | utility. If you are only using one modem, you can also configure the | 94 | utility. If you are only using one modem, you can also configure the |
| 95 | driver from the insmod command line (or by means of an option line in | 95 | driver from the insmod command line (or by means of an option line in |
| 96 | /etc/modprobe.conf). | 96 | /etc/modprobe.d/*.conf). |
| 97 | 97 | ||
| 98 | Examples: | 98 | Examples: |
| 99 | modprobe baycom_ser_fdx mode="ser12*" iobase=0x3f8 irq=4 | 99 | modprobe baycom_ser_fdx mode="ser12*" iobase=0x3f8 irq=4 |
| @@ -173,9 +173,8 @@ bonding module at load time, or are specified via sysfs. · 172 unmodified lines | |||
| 173 | 173 | ||
| 174 | Module options may be given as command line arguments to the | 174 | Module options may be given as command line arguments to the |
| 175 | insmod or modprobe command, but are usually specified in either the | 175 | insmod or modprobe command, but are usually specified in either the |
| 176 | /etc/modules.conf or /etc/modprobe.conf configuration file, or in a | 176 | /etc/modrobe.d/*.conf configuration files, or in a distro-specific |
| 177 | distro-specific configuration file (some of which are detailed in the next | 177 | configuration file (some of which are detailed in the next section). |
| 178 | section). | ||
| 179 | 178 | ||
| 180 | Details on bonding support for sysfs is provided in the | 179 | Details on bonding support for sysfs is provided in the |
| 181 | "Configuring Bonding Manually via Sysfs" section, below. | 180 | "Configuring Bonding Manually via Sysfs" section, below. |
| @@ -1021,7 +1020,7 @@ ifcfg-bondX files. · 839 unmodified lines | |||
| 1021 | 1020 | ||
| 1022 | Because the sysconfig scripts supply the bonding module | 1021 | Because the sysconfig scripts supply the bonding module |
| 1023 | options in the ifcfg-bondX file, it is not necessary to add them to | 1022 | options in the ifcfg-bondX file, it is not necessary to add them to |
| 1024 | the system /etc/modules.conf or /etc/modprobe.conf configuration file. | 1023 | the system /etc/modules.d/*.conf configuration files. |
| 1025 | 1024 | ||
| 1026 | 3.2 Configuration with Initscripts Support | 1025 | 3.2 Configuration with Initscripts Support |
| 1027 | ------------------------------------------ | 1026 | ------------------------------------------ |
| @@ -1098,15 +1097,13 @@ queried targets, e.g., · 70 unmodified lines | |||
| 1098 | arp_ip_target=+192.168.1.1 arp_ip_target=+192.168.1.2 | 1097 | arp_ip_target=+192.168.1.1 arp_ip_target=+192.168.1.2 |
| 1099 | 1098 | ||
| 1100 | is the proper syntax to specify multiple targets. When specifying | 1099 | is the proper syntax to specify multiple targets. When specifying |
| 1101 | options via BONDING_OPTS, it is not necessary to edit /etc/modules.conf or | 1100 | options via BONDING_OPTS, it is not necessary to edit /etc/modprobe.d/*.conf. |
| 1102 | /etc/modprobe.conf. | ||
| 1103 | 1101 | ||
| 1104 | For even older versions of initscripts that do not support | 1102 | For even older versions of initscripts that do not support |
| 1105 | BONDING_OPTS, it is necessary to edit /etc/modules.conf (or | 1103 | BONDING_OPTS, it is necessary to edit /etc/modprobe.d/*.conf, depending upon |
| 1106 | /etc/modprobe.conf, depending upon your distro) to load the bonding module | 1104 | your distro) to load the bonding module with your desired options when the |
| 1107 | with your desired options when the bond0 interface is brought up. The | 1105 | bond0 interface is brought up. The following lines in /etc/modprobe.d/*.conf |
| 1108 | following lines in /etc/modules.conf (or modprobe.conf) will load the | 1106 | will load the bonding module, and select its options: |
| 1109 | bonding module, and select its options: | ||
| 1110 | 1107 | ||
| 1111 | alias bond0 bonding | 1108 | alias bond0 bonding |
| 1112 | options bond0 mode=balance-alb miimon=100 | 1109 | options bond0 mode=balance-alb miimon=100 |
| @@ -1152,7 +1149,7 @@ knowledge of bonding. One such distro is SuSE Linux Enterprise Server · 39 unmodified lines | |||
| 1152 | version 8. | 1149 | version 8. |
| 1153 | 1150 | ||
| 1154 | The general method for these systems is to place the bonding | 1151 | The general method for these systems is to place the bonding |
| 1155 | module parameters into /etc/modules.conf or /etc/modprobe.conf (as | 1152 | module parameters into a config file in /etc/modprobe.d/ (as |
| 1156 | appropriate for the installed distro), then add modprobe and/or | 1153 | appropriate for the installed distro), then add modprobe and/or |
| 1157 | ifenslave commands to the system's global init script. The name of | 1154 | ifenslave commands to the system's global init script. The name of |
| 1158 | the global init script differs; for sysconfig, it is | 1155 | the global init script differs; for sysconfig, it is |
| @@ -1228,7 +1225,7 @@ network initialization scripts. · 69 unmodified lines | |||
| 1228 | specify a different name for each instance (the module loading system | 1225 | specify a different name for each instance (the module loading system |
| 1229 | requires that every loaded module, even multiple instances of the same | 1226 | requires that every loaded module, even multiple instances of the same |
| 1230 | module, have a unique name). This is accomplished by supplying multiple | 1227 | module, have a unique name). This is accomplished by supplying multiple |
| 1231 | sets of bonding options in /etc/modprobe.conf, for example: | 1228 | sets of bonding options in /etc/modprobe.d/*.conf, for example: |
| 1232 | 1229 | ||
| 1233 | alias bond0 bonding | 1230 | alias bond0 bonding |
| 1234 | options bond0 -o bond0 mode=balance-rr miimon=100 | 1231 | options bond0 -o bond0 mode=balance-rr miimon=100 |
| @@ -1793,8 +1790,8 @@ route additions may cause trouble. · 558 unmodified lines | |||
| 1793 | On systems with network configuration scripts that do not | 1790 | On systems with network configuration scripts that do not |
| 1794 | associate physical devices directly with network interface names (so | 1791 | associate physical devices directly with network interface names (so |
| 1795 | that the same physical device always has the same "ethX" name), it may | 1792 | that the same physical device always has the same "ethX" name), it may |
| 1796 | be necessary to add some special logic to either /etc/modules.conf or | 1793 | be necessary to add some special logic to config files in |
| 1797 | /etc/modprobe.conf (depending upon which is installed on the system). | 1794 | /etc/modprobe.d/. |
| 1798 | 1795 | ||
| 1799 | For example, given a modules.conf containing the following: | 1796 | For example, given a modules.conf containing the following: |
| 1800 | 1797 | ||
| @@ -1821,20 +1818,15 @@ add above bonding e1000 tg3 · 20 unmodified lines | |||
| 1821 | bonding is loaded. This command is fully documented in the | 1818 | bonding is loaded. This command is fully documented in the |
| 1822 | modules.conf manual page. | 1819 | modules.conf manual page. |
| 1823 | 1820 | ||
| 1824 | On systems utilizing modprobe.conf (or modprobe.conf.local), | 1821 | On systems utilizing modprobe an equivalent problem can occur. |
| 1825 | an equivalent problem can occur. In this case, the following can be | 1822 | In this case, the following can be added to config files in |
| 1826 | added to modprobe.conf (or modprobe.conf.local, as appropriate), as | 1823 | /etc/modprobe.d/ as: |
| 1827 | follows (all on one line; it has been split here for clarity): | ||
| 1828 | 1824 | ||
| 1829 | install bonding /sbin/modprobe tg3; /sbin/modprobe e1000; | 1825 | softdep bonding pre: tg3 e1000 |
| 1830 | /sbin/modprobe --ignore-install bonding | ||
| 1831 | 1826 | ||
| 1832 | This will, when loading the bonding module, rather than | 1827 | This will load tg3 and e1000 modules before loading the bonding one. |
| 1833 | performing the normal action, instead execute the provided command. | 1828 | Full documentation on this can be found in the modprobe.d and modprobe |
| 1834 | This command loads the device drivers in the order needed, then calls | 1829 | manual pages. |
| 1835 | modprobe with --ignore-install to cause the normal action to then take | ||
| 1836 | place. Full documentation on this can be found in the modprobe.conf | ||
| 1837 | and modprobe manual pages. | ||
| 1838 | 1830 | ||
| 1839 | 8.3. Painfully Slow Or No Failed Link Detection By Miimon | 1831 | 8.3. Painfully Slow Or No Failed Link Detection By Miimon |
| 1840 | --------------------------------------------------------- | 1832 | --------------------------------------------------------- |
| @@ -45,12 +45,13 @@ Now eth0 should active, you can test it by "ping" or get more information by · 44 unmodified lines | |||
| 45 | "ifconfig". If tested ok, continue the next step. | 45 | "ifconfig". If tested ok, continue the next step. |
| 46 | 46 | ||
| 47 | 4. cp dl2k.ko /lib/modules/`uname -r`/kernel/drivers/net | 47 | 4. cp dl2k.ko /lib/modules/`uname -r`/kernel/drivers/net |
| 48 | 5. Add the following line to /etc/modprobe.conf: | 48 | 5. Add the following line to /etc/modprobe.d/dl2k.conf: |
| 49 | alias eth0 dl2k | 49 | alias eth0 dl2k |
| 50 | 6. Run "netconfig" or "netconf" to create configuration script ifcfg-eth0 | 50 | 6. Run depmod to updated module indexes. |
| 51 | 7. Run "netconfig" or "netconf" to create configuration script ifcfg-eth0 | ||
| 51 | located at /etc/sysconfig/network-scripts or create it manually. | 52 | located at /etc/sysconfig/network-scripts or create it manually. |
| 52 | [see - Configuration Script Sample] | 53 | [see - Configuration Script Sample] |
| 53 | 7. Driver will automatically load and configure at next boot time. | 54 | 8. Driver will automatically load and configure at next boot time. |
| 54 | 55 | ||
| 55 | Compiling the Driver | 56 | Compiling the Driver |
| 56 | ==================== | 57 | ==================== |
| @@ -154,8 +155,8 @@ Installing the Driver · 97 unmodified lines | |||
| 154 | ----------------- | 155 | ----------------- |
| 155 | 1. Copy dl2k.o to the network modules directory, typically | 156 | 1. Copy dl2k.o to the network modules directory, typically |
| 156 | /lib/modules/2.x.x-xx/net or /lib/modules/2.x.x/kernel/drivers/net. | 157 | /lib/modules/2.x.x-xx/net or /lib/modules/2.x.x/kernel/drivers/net. |
| 157 | 2. Locate the boot module configuration file, most commonly modprobe.conf | 158 | 2. Locate the boot module configuration file, most commonly in the |
| 158 | or modules.conf (for 2.4) in the /etc directory. Add the following lines: | 159 | /etc/modprobe.d/ directory. Add the following lines: |
| 159 | 160 | ||
| 160 | alias ethx dl2k | 161 | alias ethx dl2k |
| 161 | options dl2k <optional parameters> | 162 | options dl2k <optional parameters> |
| @@ -2,16 +2,16 @@ Document about softnet driver issues · 1 unmodified line | |||
| 2 | 2 | ||
| 3 | Transmit path guidelines: | 3 | Transmit path guidelines: |
| 4 | 4 | ||
| 5 | 1) The hard_start_xmit method must never return '1' under any | 5 | 1) The ndo_start_xmit method must not return NETDEV_TX_BUSY under |
| 6 | normal circumstances. It is considered a hard error unless | 6 | any normal circumstances. It is considered a hard error unless |
| 7 | there is no way your device can tell ahead of time when it's | 7 | there is no way your device can tell ahead of time when it's |
| 8 | transmit function will become busy. | 8 | transmit function will become busy. |
| 9 | 9 | ||
| 10 | Instead it must maintain the queue properly. For example, | 10 | Instead it must maintain the queue properly. For example, |
| 11 | for a driver implementing scatter-gather this means: | 11 | for a driver implementing scatter-gather this means: |
| 12 | 12 | ||
| 13 | static int drv_hard_start_xmit(struct sk_buff *skb, | 13 | static netdev_tx_t drv_hard_start_xmit(struct sk_buff *skb, |
| 14 | struct net_device *dev) | 14 | struct net_device *dev) |
| 15 | { | 15 | { |
| 16 | struct drv *dp = netdev_priv(dev); | 16 | struct drv *dp = netdev_priv(dev); |
| 17 | 17 | ||
| @@ -23,7 +23,7 @@ Transmit path guidelines: · 5 unmodified lines | |||
| 23 | unlock_tx(dp); | 23 | unlock_tx(dp); |
| 24 | printk(KERN_ERR PFX "%s: BUG! Tx Ring full when queue awake!\n", | 24 | printk(KERN_ERR PFX "%s: BUG! Tx Ring full when queue awake!\n", |
| 25 | dev->name); | 25 | dev->name); |
| 26 | return 1; | 26 | return NETDEV_TX_BUSY; |
| 27 | } | 27 | } |
| 28 | 28 | ||
| 29 | ... queue packet to card ... | 29 | ... queue packet to card ... |
| @@ -35,6 +35,7 @@ Transmit path guidelines: · 5 unmodified lines | |||
| 35 | ... | 35 | ... |
| 36 | unlock_tx(dp); | 36 | unlock_tx(dp); |
| 37 | ... | 37 | ... |
| 38 | return NETDEV_TX_OK; | ||
| 38 | } | 39 | } |
| 39 | 40 | ||
| 40 | And then at the end of your TX reclamation event handling: | 41 | And then at the end of your TX reclamation event handling: |
| @@ -58,15 +59,12 @@ Transmit path guidelines: · 17 unmodified lines | |||
| 58 | TX_BUFFS_AVAIL(dp) > 0) | 59 | TX_BUFFS_AVAIL(dp) > 0) |
| 59 | netif_wake_queue(dp->dev); | 60 | netif_wake_queue(dp->dev); |
| 60 | 61 | ||
| 61 | 2) Do not forget to update netdev->trans_start to jiffies after | 62 | 2) An ndo_start_xmit method must not modify the shared parts of a |
| 62 | each new tx packet is given to the hardware. | ||
| 63 | |||
| 64 | 3) A hard_start_xmit method must not modify the shared parts of a | ||
| 65 | cloned SKB. | 63 | cloned SKB. |
| 66 | 64 | ||
| 67 | 4) Do not forget that once you return 0 from your hard_start_xmit | 65 | 3) Do not forget that once you return NETDEV_TX_OK from your |
| 68 | method, it is your driver's responsibility to free up the SKB | 66 | ndo_start_xmit method, it is your driver's responsibility to free |
| 69 | and in some finite amount of time. | 67 | up the SKB and in some finite amount of time. |
| 70 | 68 | ||
| 71 | For example, this means that it is not allowed for your TX | 69 | For example, this means that it is not allowed for your TX |
| 72 | mitigation scheme to let TX packets "hang out" in the TX | 70 | mitigation scheme to let TX packets "hang out" in the TX |
| @@ -74,8 +72,9 @@ Transmit path guidelines: · 1 unmodified line | |||
| 74 | This error can deadlock sockets waiting for send buffer room | 72 | This error can deadlock sockets waiting for send buffer room |
| 75 | to be freed up. | 73 | to be freed up. |
| 76 | 74 | ||
| 77 | If you return 1 from the hard_start_xmit method, you must not keep | 75 | If you return NETDEV_TX_BUSY from the ndo_start_xmit method, you |
| 78 | any reference to that SKB and you must not attempt to free it up. | 76 | must not keep any reference to that SKB and you must not attempt |
| 77 | to free it up. | ||
| 79 | 78 | ||
| 80 | Probing guidelines: | 79 | Probing guidelines: |
| 81 | 80 | ||
| @@ -85,10 +84,10 @@ Probing guidelines: · 3 unmodified lines | |||
| 85 | 84 | ||
| 86 | Close/stop guidelines: | 85 | Close/stop guidelines: |
| 87 | 86 | ||
| 88 | 1) After the dev->stop routine has been called, the hardware must | 87 | 1) After the ndo_stop routine has been called, the hardware must |
| 89 | not receive or transmit any data. All in flight packets must | 88 | not receive or transmit any data. All in flight packets must |
| 90 | be aborted. If necessary, poll or wait for completion of | 89 | be aborted. If necessary, poll or wait for completion of |
| 91 | any reset commands. | 90 | any reset commands. |
| 92 | 91 | ||
| 93 | 2) The dev->stop routine will be called by unregister_netdevice | 92 | 2) The ndo_stop routine will be called by unregister_netdevice |
| 94 | if device is still UP. | 93 | if device is still UP. |
| @@ -94,8 +94,8 @@ Additional Configurations · 93 unmodified lines | |||
| 94 | 94 | ||
| 95 | Configuring a network driver to load properly when the system is started is | 95 | Configuring a network driver to load properly when the system is started is |
| 96 | distribution dependent. Typically, the configuration process involves adding | 96 | distribution dependent. Typically, the configuration process involves adding |
| 97 | an alias line to /etc/modules.conf or /etc/modprobe.conf as well as editing | 97 | an alias line to /etc/modprobe.d/*.conf as well as editing other system |
| 98 | other system startup scripts and/or configuration files. Many popular Linux | 98 | startup scripts and/or configuration files. Many popular Linux |
| 99 | distributions ship with tools to make these changes for you. To learn the | 99 | distributions ship with tools to make these changes for you. To learn the |
| 100 | proper way to configure a network device for your system, refer to your | 100 | proper way to configure a network device for your system, refer to your |
| 101 | distribution documentation. If during this process you are asked for the | 101 | distribution documentation. If during this process you are asked for the |
| @@ -103,7 +103,7 @@ Additional Configurations · 1 unmodified line | |||
| 103 | PRO/100 Family of Adapters is e100. | 103 | PRO/100 Family of Adapters is e100. |
| 104 | 104 | ||
| 105 | As an example, if you install the e100 driver for two PRO/100 adapters | 105 | As an example, if you install the e100 driver for two PRO/100 adapters |
| 106 | (eth0 and eth1), add the following to modules.conf or modprobe.conf: | 106 | (eth0 and eth1), add the following to a configuraton file in /etc/modprobe.d/ |
| 107 | 107 | ||
| 108 | alias eth0 e100 | 108 | alias eth0 e100 |
| 109 | alias eth1 e100 | 109 | alias eth1 e100 |
| @@ -604,15 +604,8 @@ IP Variables: · 603 unmodified lines | |||
| 604 | ip_local_port_range - 2 INTEGERS | 604 | ip_local_port_range - 2 INTEGERS |
| 605 | Defines the local port range that is used by TCP and UDP to | 605 | Defines the local port range that is used by TCP and UDP to |
| 606 | choose the local port. The first number is the first, the | 606 | choose the local port. The first number is the first, the |
| 607 | second the last local port number. Default value depends on | 607 | second the last local port number. The default values are |
| 608 | amount of memory available on the system: | 608 | 32768 and 61000 respectively. |
| 609 | > 128Mb 32768-61000 | ||
| 610 | < 128Mb 1024-4999 or even less. | ||
| 611 | This number defines number of active connections, which this | ||
| 612 | system can issue simultaneously to systems not supporting | ||
| 613 | TCP extensions (timestamps). With tcp_tw_recycle enabled | ||
| 614 | (i.e. by default) range 1024-4999 is enough to issue up to | ||
| 615 | 2000 connections per second to systems supporting timestamps. | ||
| 616 | 609 | ||
| 617 | ip_local_reserved_ports - list of comma separated ranges | 610 | ip_local_reserved_ports - list of comma separated ranges |
| 618 | Specify the ports which are reserved for known third-party | 611 | Specify the ports which are reserved for known third-party |
| @@ -2,9 +2,9 @@ · 1 unmodified line | |||
| 2 | Options for the ipv6 module are supplied as parameters at load time. | 2 | Options for the ipv6 module are supplied as parameters at load time. |
| 3 | 3 | ||
| 4 | Module options may be given as command line arguments to the insmod | 4 | Module options may be given as command line arguments to the insmod |
| 5 | or modprobe command, but are usually specified in either the | 5 | or modprobe command, but are usually specified in either |
| 6 | /etc/modules.conf or /etc/modprobe.conf configuration file, or in a | 6 | /etc/modules.d/*.conf configuration files, or in a distro-specific |
| 7 | distro-specific configuration file. | 7 | configuration file. |
| 8 | 8 | ||
| 9 | The available ipv6 module parameters are listed below. If a parameter | 9 | The available ipv6 module parameters are listed below. If a parameter |
| 10 | is not specified the default value is used. | 10 | is not specified the default value is used. |
| @@ -274,9 +274,9 @@ Additional Configurations · 273 unmodified lines | |||
| 274 | ------------------------------------------------- | 274 | ------------------------------------------------- |
| 275 | Configuring a network driver to load properly when the system is started is | 275 | Configuring a network driver to load properly when the system is started is |
| 276 | distribution dependent. Typically, the configuration process involves adding | 276 | distribution dependent. Typically, the configuration process involves adding |
| 277 | an alias line to /etc/modprobe.conf as well as editing other system startup | 277 | an alias line to files in /etc/modprobe.d/ as well as editing other system |
| 278 | scripts and/or configuration files. Many popular Linux distributions ship | 278 | startup scripts and/or configuration files. Many popular Linux distributions |
| 279 | with tools to make these changes for you. To learn the proper way to | 279 | ship with tools to make these changes for you. To learn the proper way to |
| 280 | configure a network device for your system, refer to your distribution | 280 | configure a network device for your system, refer to your distribution |
| 281 | documentation. If during this process you are asked for the driver or module | 281 | documentation. If during this process you are asked for the driver or module |
| 282 | name, the name for the Linux Base Driver for the Intel 10GbE Family of | 282 | name, the name for the Linux Base Driver for the Intel 10GbE Family of |
| @@ -25,7 +25,7 @@ the driver will try to determine them itself. · 24 unmodified lines | |||
| 25 | 25 | ||
| 26 | If you load the driver as a module, you can pass the parameters "io=", | 26 | If you load the driver as a module, you can pass the parameters "io=", |
| 27 | "irq=", and "dma=" on the command line with insmod or modprobe, or add | 27 | "irq=", and "dma=" on the command line with insmod or modprobe, or add |
| 28 | them as options in /etc/modprobe.conf: | 28 | them as options in a configuration file in /etc/modprobe.d/ directory: |
| 29 | 29 | ||
| 30 | alias lt0 ltpc # autoload the module when the interface is configured | 30 | alias lt0 ltpc # autoload the module when the interface is configured |
| 31 | options ltpc io=0x240 irq=9 dma=1 | 31 | options ltpc io=0x240 irq=9 dma=1 |
| @@ -47,26 +47,25 @@ packets is preferred. · 46 unmodified lines | |||
| 47 | 47 | ||
| 48 | struct net_device synchronization rules | 48 | struct net_device synchronization rules |
| 49 | ======================================= | 49 | ======================================= |
| 50 | dev->open: | 50 | ndo_open: |
| 51 | Synchronization: rtnl_lock() semaphore. | 51 | Synchronization: rtnl_lock() semaphore. |
| 52 | Context: process | 52 | Context: process |
| 53 | 53 | ||
| 54 | dev->stop: | 54 | ndo_stop: |
| 55 | Synchronization: rtnl_lock() semaphore. | 55 | Synchronization: rtnl_lock() semaphore. |
| 56 | Context: process | 56 | Context: process |
| 57 | Note1: netif_running() is guaranteed false | 57 | Note: netif_running() is guaranteed false |
| 58 | Note2: dev->poll() is guaranteed to be stopped | ||
| 59 | 58 | ||
| 60 | dev->do_ioctl: | 59 | ndo_do_ioctl: |
| 61 | Synchronization: rtnl_lock() semaphore. | 60 | Synchronization: rtnl_lock() semaphore. |
| 62 | Context: process | 61 | Context: process |
| 63 | 62 | ||
| 64 | dev->get_stats: | 63 | ndo_get_stats: |
| 65 | Synchronization: dev_base_lock rwlock. | 64 | Synchronization: dev_base_lock rwlock. |
| 66 | Context: nominally process, but don't sleep inside an rwlock | 65 | Context: nominally process, but don't sleep inside an rwlock |
| 67 | 66 | ||
| 68 | dev->hard_start_xmit: | 67 | ndo_start_xmit: |
| 69 | Synchronization: netif_tx_lock spinlock. | 68 | Synchronization: __netif_tx_lock spinlock. |
| 70 | 69 | ||
| 71 | When the driver sets NETIF_F_LLTX in dev->features this will be | 70 | When the driver sets NETIF_F_LLTX in dev->features this will be |
| 72 | called without holding netif_tx_lock. In this case the driver | 71 | called without holding netif_tx_lock. In this case the driver |
| @@ -87,20 +86,20 @@ dev->hard_start_xmit: · 14 unmodified lines | |||
| 87 | o NETDEV_TX_LOCKED Locking failed, please retry quickly. | 86 | o NETDEV_TX_LOCKED Locking failed, please retry quickly. |
| 88 | Only valid when NETIF_F_LLTX is set. | 87 | Only valid when NETIF_F_LLTX is set. |
| 89 | 88 | ||
| 90 | dev->tx_timeout: | 89 | ndo_tx_timeout: |
| 91 | Synchronization: netif_tx_lock spinlock. | 90 | Synchronization: netif_tx_lock spinlock; all TX queues frozen. |
| 92 | Context: BHs disabled | 91 | Context: BHs disabled |
| 93 | Notes: netif_queue_stopped() is guaranteed true | 92 | Notes: netif_queue_stopped() is guaranteed true |
| 94 | 93 | ||
| 95 | dev->set_rx_mode: | 94 | ndo_set_rx_mode: |
| 96 | Synchronization: netif_tx_lock spinlock. | 95 | Synchronization: netif_addr_lock spinlock. |
| 97 | Context: BHs disabled | 96 | Context: BHs disabled |
| 98 | 97 | ||
| 99 | struct napi_struct synchronization rules | 98 | struct napi_struct synchronization rules |
| 100 | ======================================== | 99 | ======================================== |
| 101 | napi->poll: | 100 | napi->poll: |
| 102 | Synchronization: NAPI_STATE_SCHED bit in napi->state. Device | 101 | Synchronization: NAPI_STATE_SCHED bit in napi->state. Device |
| 103 | driver's dev->close method will invoke napi_disable() on | 102 | driver's ndo_stop method will invoke napi_disable() on |
| 104 | all NAPI instances which will do a sleeping poll on the | 103 | all NAPI instances which will do a sleeping poll on the |
| 105 | NAPI_STATE_SCHED napi->state bit, waiting for all pending | 104 | NAPI_STATE_SCHED napi->state bit, waiting for all pending |
| 106 | NAPI activity to cease. | 105 | NAPI activity to cease. |
| @@ -67,8 +67,8 @@ Module parameters · 66 unmodified lines | |||
| 67 | ================= | 67 | ================= |
| 68 | 68 | ||
| 69 | There are several parameters which may be provided to the driver when | 69 | There are several parameters which may be provided to the driver when |
| 70 | its module is loaded. These are usually placed in /etc/modprobe.conf | 70 | its module is loaded. These are usually placed in /etc/modprobe.d/*.conf |
| 71 | (/etc/modules.conf in 2.4). Example: | 71 | configuretion files. Example: |
| 72 | 72 | ||
| 73 | options 3c59x debug=3 rx_copybreak=300 | 73 | options 3c59x debug=3 rx_copybreak=300 |
| 74 | 74 | ||
| @@ -425,7 +425,7 @@ steps you should take: · 350 unmodified lines | |||
| 425 | 1) Increase the debug level. Usually this is done via: | 425 | 1) Increase the debug level. Usually this is done via: |
| 426 | 426 | ||
| 427 | a) modprobe driver debug=7 | 427 | a) modprobe driver debug=7 |
| 428 | b) In /etc/modprobe.conf (or /etc/modules.conf for 2.4): | 428 | b) In /etc/modprobe.d/driver.conf: |
| 429 | options driver debug=7 | 429 | options driver debug=7 |
| 430 | 430 | ||
| 431 | 2) Recreate the problem with the higher debug level, | 431 | 2) Recreate the problem with the higher debug level, |
| @@ -36,18 +36,17 @@ addresses should not be specified for supported PCI cards since they · 35 unmodified lines | |||
| 36 | are automatically detected. | 36 | are automatically detected. |
| 37 | 37 | ||
| 38 | 38 | ||
| 39 | KMod | 39 | modprobe |
| 40 | ---- | 40 | -------- |
| 41 | 41 | ||
| 42 | If you use kmod, you will find it useful to edit /etc/modprobe.conf. | 42 | If you use modprobe , you will find it useful to add lines as below to a |
| 43 | Here is an example of the lines that need to be added: | 43 | configuration file in /etc/modprobe.d/ directory:. |
| 44 | 44 | ||
| 45 | alias parport_lowlevel parport_pc | 45 | alias parport_lowlevel parport_pc |
| 46 | options parport_pc io=0x378,0x278 irq=7,auto | 46 | options parport_pc io=0x378,0x278 irq=7,auto |
| 47 | 47 | ||
| 48 | KMod will then automatically load parport_pc (with the options | 48 | modprobe will load parport_pc (with the options "io=0x378,0x278 irq=7,auto") |
| 49 | "io=0x378,0x278 irq=7,auto") whenever a parallel port device driver | 49 | whenever a parallel port device driver (such as lp) is loaded. |
| 50 | (such as lp) is loaded. | ||
| 51 | 50 | ||
| 52 | Note that these are example lines only! You shouldn't in general need | 51 | Note that these are example lines only! You shouldn't in general need |
| 53 | to specify any options to parport_pc in order to be able to use a | 52 | to specify any options to parport_pc in order to be able to use a |
| @@ -0,0 +1,322 @@ | |||
| 1 | Remote Processor Framework | ||
| 2 | |||
| 3 | 1. Introduction | ||
| 4 | |||
| 5 | Modern SoCs typically have heterogeneous remote processor devices in asymmetric | ||
| 6 | multiprocessing (AMP) configurations, which may be running different instances | ||
| 7 | of operating system, whether it's Linux or any other flavor of real-time OS. | ||
| 8 | |||
| 9 | OMAP4, for example, has dual Cortex-A9, dual Cortex-M3 and a C64x+ DSP. | ||
| 10 | In a typical configuration, the dual cortex-A9 is running Linux in a SMP | ||
| 11 | configuration, and each of the other three cores (two M3 cores and a DSP) | ||
| 12 | is running its own instance of RTOS in an AMP configuration. | ||
| 13 | |||
| 14 | The remoteproc framework allows different platforms/architectures to | ||
| 15 | control (power on, load firmware, power off) those remote processors while | ||
| 16 | abstracting the hardware differences, so the entire driver doesn't need to be | ||
| 17 | duplicated. In addition, this framework also adds rpmsg virtio devices | ||
| 18 | for remote processors that supports this kind of communication. This way, | ||
| 19 | platform-specific remoteproc drivers only need to provide a few low-level | ||
| 20 | handlers, and then all rpmsg drivers will then just work | ||
| 21 | (for more information about the virtio-based rpmsg bus and its drivers, | ||
| 22 | please read Documentation/rpmsg.txt). | ||
| 23 | Registration of other types of virtio devices is now also possible. Firmwares | ||
| 24 | just need to publish what kind of virtio devices do they support, and then | ||
| 25 | remoteproc will add those devices. This makes it possible to reuse the | ||
| 26 | existing virtio drivers with remote processor backends at a minimal development | ||
| 27 | cost. | ||
| 28 | |||
| 29 | 2. User API | ||
| 30 | |||
| 31 | int rproc_boot(struct rproc *rproc) | ||
| 32 | - Boot a remote processor (i.e. load its firmware, power it on, ...). | ||
| 33 | If the remote processor is already powered on, this function immediately | ||
| 34 | returns (successfully). | ||
| 35 | Returns 0 on success, and an appropriate error value otherwise. | ||
| 36 | Note: to use this function you should already have a valid rproc | ||
| 37 | handle. There are several ways to achieve that cleanly (devres, pdata, | ||
| 38 | the way remoteproc_rpmsg.c does this, or, if this becomes prevalent, we | ||
| 39 | might also consider using dev_archdata for this). See also | ||
| 40 | rproc_get_by_name() below. | ||
| 41 | |||
| 42 | void rproc_shutdown(struct rproc *rproc) | ||
| 43 | - Power off a remote processor (previously booted with rproc_boot()). | ||
| 44 | In case @rproc is still being used by an additional user(s), then | ||
| 45 | this function will just decrement the power refcount and exit, | ||
| 46 | without really powering off the device. | ||
| 47 | Every call to rproc_boot() must (eventually) be accompanied by a call | ||
| 48 | to rproc_shutdown(). Calling rproc_shutdown() redundantly is a bug. | ||
| 49 | Notes: | ||
| 50 | - we're not decrementing the rproc's refcount, only the power refcount. | ||
| 51 | which means that the @rproc handle stays valid even after | ||
| 52 | rproc_shutdown() returns, and users can still use it with a subsequent | ||
| 53 | rproc_boot(), if needed. | ||
| 54 | - don't call rproc_shutdown() to unroll rproc_get_by_name(), exactly | ||
| 55 | because rproc_shutdown() _does not_ decrement the refcount of @rproc. | ||
| 56 | To decrement the refcount of @rproc, use rproc_put() (but _only_ if | ||
| 57 | you acquired @rproc using rproc_get_by_name()). | ||
| 58 | |||
| 59 | struct rproc *rproc_get_by_name(const char *name) | ||
| 60 | - Find an rproc handle using the remote processor's name, and then | ||
| 61 | boot it. If it's already powered on, then just immediately return | ||
| 62 | (successfully). Returns the rproc handle on success, and NULL on failure. | ||
| 63 | This function increments the remote processor's refcount, so always | ||
| 64 | use rproc_put() to decrement it back once rproc isn't needed anymore. | ||
| 65 | Note: currently rproc_get_by_name() and rproc_put() are not used anymore | ||
| 66 | by the rpmsg bus and its drivers. We need to scrutinize the use cases | ||
| 67 | that still need them, and see if we can migrate them to use the non | ||
| 68 | name-based boot/shutdown interface. | ||
| 69 | |||
| 70 | void rproc_put(struct rproc *rproc) | ||
| 71 | - Decrement @rproc's power refcount and shut it down if it reaches zero | ||
| 72 | (essentially by just calling rproc_shutdown), and then decrement @rproc's | ||
| 73 | validity refcount too. | ||
| 74 | After this function returns, @rproc may _not_ be used anymore, and its | ||
| 75 | handle should be considered invalid. | ||
| 76 | This function should be called _iff_ the @rproc handle was grabbed by | ||
| 77 | calling rproc_get_by_name(). | ||
| 78 | |||
| 79 | 3. Typical usage | ||
| 80 | |||
| 81 | #include <linux/remoteproc.h> | ||
| 82 | |||
| 83 | /* in case we were given a valid 'rproc' handle */ | ||
| 84 | int dummy_rproc_example(struct rproc *my_rproc) | ||
| 85 | { | ||
| 86 | int ret; | ||
| 87 | |||
| 88 | /* let's power on and boot our remote processor */ | ||
| 89 | ret = rproc_boot(my_rproc); | ||
| 90 | if (ret) { | ||
| 91 | /* | ||
| 92 | * something went wrong. handle it and leave. | ||
| 93 | */ | ||
| 94 | } | ||
| 95 | |||
| 96 | /* | ||
| 97 | * our remote processor is now powered on... give it some work | ||
| 98 | */ | ||
| 99 | |||
| 100 | /* let's shut it down now */ | ||
| 101 | rproc_shutdown(my_rproc); | ||
| 102 | } | ||
| 103 | |||
| 104 | 4. API for implementors | ||
| 105 | |||
| 106 | struct rproc *rproc_alloc(struct device *dev, const char *name, | ||
| 107 | const struct rproc_ops *ops, | ||
| 108 | const char *firmware, int len) | ||
| 109 | - Allocate a new remote processor handle, but don't register | ||
| 110 | it yet. Required parameters are the underlying device, the | ||
| 111 | name of this remote processor, platform-specific ops handlers, | ||
| 112 | the name of the firmware to boot this rproc with, and the | ||
| 113 | length of private data needed by the allocating rproc driver (in bytes). | ||
| 114 | |||
| 115 | This function should be used by rproc implementations during | ||
| 116 | initialization of the remote processor. | ||
| 117 | After creating an rproc handle using this function, and when ready, | ||
| 118 | implementations should then call rproc_register() to complete | ||
| 119 | the registration of the remote processor. | ||
| 120 | On success, the new rproc is returned, and on failure, NULL. | ||
| 121 | |||
| 122 | Note: _never_ directly deallocate @rproc, even if it was not registered | ||
| 123 | yet. Instead, if you just need to unroll rproc_alloc(), use rproc_free(). | ||
| 124 | |||
| 125 | void rproc_free(struct rproc *rproc) | ||
| 126 | - Free an rproc handle that was allocated by rproc_alloc. | ||
| 127 | This function should _only_ be used if @rproc was only allocated, | ||
| 128 | but not registered yet. | ||
| 129 | If @rproc was already successfully registered (by calling | ||
| 130 | rproc_register()), then use rproc_unregister() instead. | ||
| 131 | |||
| 132 | int rproc_register(struct rproc *rproc) | ||
| 133 | - Register @rproc with the remoteproc framework, after it has been | ||
| 134 | allocated with rproc_alloc(). | ||
| 135 | This is called by the platform-specific rproc implementation, whenever | ||
| 136 | a new remote processor device is probed. | ||
| 137 | Returns 0 on success and an appropriate error code otherwise. | ||
| 138 | Note: this function initiates an asynchronous firmware loading | ||
| 139 | context, which will look for virtio devices supported by the rproc's | ||
| 140 | firmware. | ||
| 141 | If found, those virtio devices will be created and added, so as a result | ||
| 142 | of registering this remote processor, additional virtio drivers might get | ||
| 143 | probed. | ||
| 144 | |||
| 145 | int rproc_unregister(struct rproc *rproc) | ||
| 146 | - Unregister a remote processor, and decrement its refcount. | ||
| 147 | If its refcount drops to zero, then @rproc will be freed. If not, | ||
| 148 | it will be freed later once the last reference is dropped. | ||
| 149 | |||
| 150 | This function should be called when the platform specific rproc | ||
| 151 | implementation decides to remove the rproc device. it should | ||
| 152 | _only_ be called if a previous invocation of rproc_register() | ||
| 153 | has completed successfully. | ||
| 154 | |||
| 155 | After rproc_unregister() returns, @rproc is _not_ valid anymore and | ||
| 156 | it shouldn't be used. More specifically, don't call rproc_free() | ||
| 157 | or try to directly free @rproc after rproc_unregister() returns; | ||
| 158 | none of these are needed, and calling them is a bug. | ||
| 159 | |||
| 160 | Returns 0 on success and -EINVAL if @rproc isn't valid. | ||
| 161 | |||
| 162 | 5. Implementation callbacks | ||
| 163 | |||
| 164 | These callbacks should be provided by platform-specific remoteproc | ||
| 165 | drivers: | ||
| 166 | |||
| 167 | /** | ||
| 168 | * struct rproc_ops - platform-specific device handlers | ||
| 169 | * @start: power on the device and boot it | ||
| 170 | * @stop: power off the device | ||
| 171 | * @kick: kick a virtqueue (virtqueue id given as a parameter) | ||
| 172 | */ | ||
| 173 | struct rproc_ops { | ||
| 174 | int (*start)(struct rproc *rproc); | ||
| 175 | int (*stop)(struct rproc *rproc); | ||
| 176 | void (*kick)(struct rproc *rproc, int vqid); | ||
| 177 | }; | ||
| 178 | |||
| 179 | Every remoteproc implementation should at least provide the ->start and ->stop | ||
| 180 | handlers. If rpmsg/virtio functionality is also desired, then the ->kick handler | ||
| 181 | should be provided as well. | ||
| 182 | |||
| 183 | The ->start() handler takes an rproc handle and should then power on the | ||
| 184 | device and boot it (use rproc->priv to access platform-specific private data). | ||
| 185 | The boot address, in case needed, can be found in rproc->bootaddr (remoteproc | ||
| 186 | core puts there the ELF entry point). | ||
| 187 | On success, 0 should be returned, and on failure, an appropriate error code. | ||
| 188 | |||
| 189 | The ->stop() handler takes an rproc handle and powers the device down. | ||
| 190 | On success, 0 is returned, and on failure, an appropriate error code. | ||
| 191 | |||
| 192 | The ->kick() handler takes an rproc handle, and an index of a virtqueue | ||
| 193 | where new message was placed in. Implementations should interrupt the remote | ||
| 194 | processor and let it know it has pending messages. Notifying remote processors | ||
| 195 | the exact virtqueue index to look in is optional: it is easy (and not | ||
| 196 | too expensive) to go through the existing virtqueues and look for new buffers | ||
| 197 | in the used rings. | ||
| 198 | |||
| 199 | 6. Binary Firmware Structure | ||
| 200 | |||
| 201 | At this point remoteproc only supports ELF32 firmware binaries. However, | ||
| 202 | it is quite expected that other platforms/devices which we'd want to | ||
| 203 | support with this framework will be based on different binary formats. | ||
| 204 | |||
| 205 | When those use cases show up, we will have to decouple the binary format | ||
| 206 | from the framework core, so we can support several binary formats without | ||
| 207 | duplicating common code. | ||
| 208 | |||
| 209 | When the firmware is parsed, its various segments are loaded to memory | ||
| 210 | according to the specified device address (might be a physical address | ||
| 211 | if the remote processor is accessing memory directly). | ||
| 212 | |||
| 213 | In addition to the standard ELF segments, most remote processors would | ||
| 214 | also include a special section which we call "the resource table". | ||
| 215 | |||
| 216 | The resource table contains system resources that the remote processor | ||
| 217 | requires before it should be powered on, such as allocation of physically | ||
| 218 | contiguous memory, or iommu mapping of certain on-chip peripherals. | ||
| 219 | Remotecore will only power up the device after all the resource table's | ||
| 220 | requirement are met. | ||
| 221 | |||
| 222 | In addition to system resources, the resource table may also contain | ||
| 223 | resource entries that publish the existence of supported features | ||
| 224 | or configurations by the remote processor, such as trace buffers and | ||
| 225 | supported virtio devices (and their configurations). | ||
| 226 | |||
| 227 | The resource table begins with this header: | ||
| 228 | |||
| 229 | /** | ||
| 230 | * struct resource_table - firmware resource table header | ||
| 231 | * @ver: version number | ||
| 232 | * @num: number of resource entries | ||
| 233 | * @reserved: reserved (must be zero) | ||
| 234 | * @offset: array of offsets pointing at the various resource entries | ||
| 235 | * | ||
| 236 | * The header of the resource table, as expressed by this structure, | ||
| 237 | * contains a version number (should we need to change this format in the | ||
| 238 | * future), the number of available resource entries, and their offsets | ||
| 239 | * in the table. | ||
| 240 | */ | ||
| 241 | struct resource_table { | ||
| 242 | u32 ver; | ||
| 243 | u32 num; | ||
| 244 | u32 reserved[2]; | ||
| 245 | u32 offset[0]; | ||
| 246 | } __packed; | ||
| 247 | |||
| 248 | Immediately following this header are the resource entries themselves, | ||
| 249 | each of which begins with the following resource entry header: | ||
| 250 | |||
| 251 | /** | ||
| 252 | * struct fw_rsc_hdr - firmware resource entry header | ||
| 253 | * @type: resource type | ||
| 254 | * @data: resource data | ||
| 255 | * | ||
| 256 | * Every resource entry begins with a 'struct fw_rsc_hdr' header providing | ||
| 257 | * its @type. The content of the entry itself will immediately follow | ||
| 258 | * this header, and it should be parsed according to the resource type. | ||
| 259 | */ | ||
| 260 | struct fw_rsc_hdr { | ||
| 261 | u32 type; | ||
| 262 | u8 data[0]; | ||
| 263 | } __packed; | ||
| 264 | |||
| 265 | Some resources entries are mere announcements, where the host is informed | ||
| 266 | of specific remoteproc configuration. Other entries require the host to | ||
| 267 | do something (e.g. allocate a system resource). Sometimes a negotiation | ||
| 268 | is expected, where the firmware requests a resource, and once allocated, | ||
| 269 | the host should provide back its details (e.g. address of an allocated | ||
| 270 | memory region). | ||
| 271 | |||
| 272 | Here are the various resource types that are currently supported: | ||
| 273 | |||
| 274 | /** | ||
| 275 | * enum fw_resource_type - types of resource entries | ||
| 276 | * | ||
| 277 | * @RSC_CARVEOUT: request for allocation of a physically contiguous | ||
| 278 | * memory region. | ||
| 279 | * @RSC_DEVMEM: request to iommu_map a memory-based peripheral. | ||
| 280 | * @RSC_TRACE: announces the availability of a trace buffer into which | ||
| 281 | * the remote processor will be writing logs. | ||
| 282 | * @RSC_VDEV: declare support for a virtio device, and serve as its | ||
| 283 | * virtio header. | ||
| 284 | * @RSC_LAST: just keep this one at the end | ||
| 285 | * | ||
| 286 | * Please note that these values are used as indices to the rproc_handle_rsc | ||
| 287 | * lookup table, so please keep them sane. Moreover, @RSC_LAST is used to | ||
| 288 | * check the validity of an index before the lookup table is accessed, so | ||
| 289 | * please update it as needed. | ||
| 290 | */ | ||
| 291 | enum fw_resource_type { | ||
| 292 | RSC_CARVEOUT = 0, | ||
| 293 | RSC_DEVMEM = 1, | ||
| 294 | RSC_TRACE = 2, | ||
| 295 | RSC_VDEV = 3, | ||
| 296 | RSC_LAST = 4, | ||
| 297 | }; | ||
| 298 | |||
| 299 | For more details regarding a specific resource type, please see its | ||
| 300 | dedicated structure in include/linux/remoteproc.h. | ||
| 301 | |||
| 302 | We also expect that platform-specific resource entries will show up | ||
| 303 | at some point. When that happens, we could easily add a new RSC_PLATFORM | ||
| 304 | type, and hand those resources to the platform-specific rproc driver to handle. | ||
| 305 | |||
| 306 | 7. Virtio and remoteproc | ||
| 307 | |||
| 308 | The firmware should provide remoteproc information about virtio devices | ||
| 309 | that it supports, and their configurations: a RSC_VDEV resource entry | ||
| 310 | should specify the virtio device id (as in virtio_ids.h), virtio features, | ||
| 311 | virtio config space, vrings information, etc. | ||
| 312 | |||
| 313 | When a new remote processor is registered, the remoteproc framework | ||
| 314 | will look for its resource table and will register the virtio devices | ||
| 315 | it supports. A firmware may support any number of virtio devices, and | ||
| 316 | of any type (a single remote processor can also easily support several | ||
| 317 | rpmsg virtio devices this way, if desired). | ||
| 318 | |||
| 319 | Of course, RSC_VDEV resource entries are only good enough for static | ||
| 320 | allocation of virtio devices. Dynamic allocations will also be made possible | ||
| 321 | using the rpmsg bus (similar to how we already do dynamic allocations of | ||
| 322 | rpmsg channels; read more about it in rpmsg.txt). | ||
| @@ -0,0 +1,293 @@ | |||
| 1 | Remote Processor Messaging (rpmsg) Framework | ||
| 2 | |||
| 3 | Note: this document describes the rpmsg bus and how to write rpmsg drivers. | ||
| 4 | To learn how to add rpmsg support for new platforms, check out remoteproc.txt | ||
| 5 | (also a resident of Documentation/). | ||
| 6 | |||
| 7 | 1. Introduction | ||
| 8 | |||
| 9 | Modern SoCs typically employ heterogeneous remote processor devices in | ||
| 10 | asymmetric multiprocessing (AMP) configurations, which may be running | ||
| 11 | different instances of operating system, whether it's Linux or any other | ||
| 12 | flavor of real-time OS. | ||
| 13 | |||
| 14 | OMAP4, for example, has dual Cortex-A9, dual Cortex-M3 and a C64x+ DSP. | ||
| 15 | Typically, the dual cortex-A9 is running Linux in a SMP configuration, | ||
| 16 | and each of the other three cores (two M3 cores and a DSP) is running | ||
| 17 | its own instance of RTOS in an AMP configuration. | ||
| 18 | |||
| 19 | Typically AMP remote processors employ dedicated DSP codecs and multimedia | ||
| 20 | hardware accelerators, and therefore are often used to offload CPU-intensive | ||
| 21 | multimedia tasks from the main application processor. | ||
| 22 | |||
| 23 | These remote processors could also be used to control latency-sensitive | ||
| 24 | sensors, drive random hardware blocks, or just perform background tasks | ||
| 25 | while the main CPU is idling. | ||
| 26 | |||
| 27 | Users of those remote processors can either be userland apps (e.g. multimedia | ||
| 28 | frameworks talking with remote OMX components) or kernel drivers (controlling | ||
| 29 | hardware accessible only by the remote processor, reserving kernel-controlled | ||
| 30 | resources on behalf of the remote processor, etc..). | ||
| 31 | |||
| 32 | Rpmsg is a virtio-based messaging bus that allows kernel drivers to communicate | ||
| 33 | with remote processors available on the system. In turn, drivers could then | ||
| 34 | expose appropriate user space interfaces, if needed. | ||
| 35 | |||
| 36 | When writing a driver that exposes rpmsg communication to userland, please | ||
| 37 | keep in mind that remote processors might have direct access to the | ||
| 38 | system's physical memory and other sensitive hardware resources (e.g. on | ||
| 39 | OMAP4, remote cores and hardware accelerators may have direct access to the | ||
| 40 | physical memory, gpio banks, dma controllers, i2c bus, gptimers, mailbox | ||
| 41 | devices, hwspinlocks, etc..). Moreover, those remote processors might be | ||
| 42 | running RTOS where every task can access the entire memory/devices exposed | ||
| 43 | to the processor. To minimize the risks of rogue (or buggy) userland code | ||
| 44 | exploiting remote bugs, and by that taking over the system, it is often | ||
| 45 | desired to limit userland to specific rpmsg channels (see definition below) | ||
| 46 | it can send messages on, and if possible, minimize how much control | ||
| 47 | it has over the content of the messages. | ||
| 48 | |||
| 49 | Every rpmsg device is a communication channel with a remote processor (thus | ||
| 50 | rpmsg devices are called channels). Channels are identified by a textual name | ||
| 51 | and have a local ("source") rpmsg address, and remote ("destination") rpmsg | ||
| 52 | address. | ||
| 53 | |||
| 54 | When a driver starts listening on a channel, its rx callback is bound with | ||
| 55 | a unique rpmsg local address (a 32-bit integer). This way when inbound messages | ||
| 56 | arrive, the rpmsg core dispatches them to the appropriate driver according | ||
| 57 | to their destination address (this is done by invoking the driver's rx handler | ||
| 58 | with the payload of the inbound message). | ||
| 59 | |||
| 60 | |||
| 61 | 2. User API | ||
| 62 | |||
| 63 | int rpmsg_send(struct rpmsg_channel *rpdev, void *data, int len); | ||
| 64 | - sends a message across to the remote processor on a given channel. | ||
| 65 | The caller should specify the channel, the data it wants to send, | ||
| 66 | and its length (in bytes). The message will be sent on the specified | ||
| 67 | channel, i.e. its source and destination address fields will be | ||
| 68 | set to the channel's src and dst addresses. | ||
| 69 | |||
| 70 | In case there are no TX buffers available, the function will block until | ||
| 71 | one becomes available (i.e. until the remote processor consumes | ||
| 72 | a tx buffer and puts it back on virtio's used descriptor ring), | ||
| 73 | or a timeout of 15 seconds elapses. When the latter happens, | ||
| 74 | -ERESTARTSYS is returned. | ||
| 75 | The function can only be called from a process context (for now). | ||
| 76 | Returns 0 on success and an appropriate error value on failure. | ||
| 77 | |||
| 78 | int rpmsg_sendto(struct rpmsg_channel *rpdev, void *data, int len, u32 dst); | ||
| 79 | - sends a message across to the remote processor on a given channel, | ||
| 80 | to a destination address provided by the caller. | ||
| 81 | The caller should specify the channel, the data it wants to send, | ||
| 82 | its length (in bytes), and an explicit destination address. | ||
| 83 | The message will then be sent to the remote processor to which the | ||
| 84 | channel belongs, using the channel's src address, and the user-provided | ||
| 85 | dst address (thus the channel's dst address will be ignored). | ||
| 86 | |||
| 87 | In case there are no TX buffers available, the function will block until | ||
| 88 | one becomes available (i.e. until the remote processor consumes | ||
| 89 | a tx buffer and puts it back on virtio's used descriptor ring), | ||
| 90 | or a timeout of 15 seconds elapses. When the latter happens, | ||
| 91 | -ERESTARTSYS is returned. | ||
| 92 | The function can only be called from a process context (for now). | ||
| 93 | Returns 0 on success and an appropriate error value on failure. | ||
| 94 | |||
| 95 | int rpmsg_send_offchannel(struct rpmsg_channel *rpdev, u32 src, u32 dst, | ||
| 96 | void *data, int len); | ||
| 97 | - sends a message across to the remote processor, using the src and dst | ||
| 98 | addresses provided by the user. | ||
| 99 | The caller should specify the channel, the data it wants to send, | ||
| 100 | its length (in bytes), and explicit source and destination addresses. | ||
| 101 | The message will then be sent to the remote processor to which the | ||
| 102 | channel belongs, but the channel's src and dst addresses will be | ||
| 103 | ignored (and the user-provided addresses will be used instead). | ||
| 104 | |||
| 105 | In case there are no TX buffers available, the function will block until | ||
| 106 | one becomes available (i.e. until the remote processor consumes | ||
| 107 | a tx buffer and puts it back on virtio's used descriptor ring), | ||
| 108 | or a timeout of 15 seconds elapses. When the latter happens, | ||
| 109 | -ERESTARTSYS is returned. | ||
| 110 | The function can only be called from a process context (for now). | ||
| 111 | Returns 0 on success and an appropriate error value on failure. | ||
| 112 | |||
| 113 | int rpmsg_trysend(struct rpmsg_channel *rpdev, void *data, int len); | ||
| 114 | - sends a message across to the remote processor on a given channel. | ||
| 115 | The caller should specify the channel, the data it wants to send, | ||
| 116 | and its length (in bytes). The message will be sent on the specified | ||
| 117 | channel, i.e. its source and destination address fields will be | ||
| 118 | set to the channel's src and dst addresses. | ||
| 119 | |||
| 120 | In case there are no TX buffers available, the function will immediately | ||
| 121 | return -ENOMEM without waiting until one becomes available. | ||
| 122 | The function can only be called from a process context (for now). | ||
| 123 | Returns 0 on success and an appropriate error value on failure. | ||
| 124 | |||
| 125 | int rpmsg_trysendto(struct rpmsg_channel *rpdev, void *data, int len, u32 dst) | ||
| 126 | - sends a message across to the remote processor on a given channel, | ||
| 127 | to a destination address provided by the user. | ||
| 128 | The user should specify the channel, the data it wants to send, | ||
| 129 | its length (in bytes), and an explicit destination address. | ||
| 130 | The message will then be sent to the remote processor to which the | ||
| 131 | channel belongs, using the channel's src address, and the user-provided | ||
| 132 | dst address (thus the channel's dst address will be ignored). | ||
| 133 | |||
| 134 | In case there are no TX buffers available, the function will immediately | ||
| 135 | return -ENOMEM without waiting until one becomes available. | ||
| 136 | The function can only be called from a process context (for now). | ||
| 137 | Returns 0 on success and an appropriate error value on failure. | ||
| 138 | |||
| 139 | int rpmsg_trysend_offchannel(struct rpmsg_channel *rpdev, u32 src, u32 dst, | ||
| 140 | void *data, int len); | ||
| 141 | - sends a message across to the remote processor, using source and | ||
| 142 | destination addresses provided by the user. | ||
| 143 | The user should specify the channel, the data it wants to send, | ||
| 144 | its length (in bytes), and explicit source and destination addresses. | ||
| 145 | The message will then be sent to the remote processor to which the | ||
| 146 | channel belongs, but the channel's src and dst addresses will be | ||
| 147 | ignored (and the user-provided addresses will be used instead). | ||
| 148 | |||
| 149 | In case there are no TX buffers available, the function will immediately | ||
| 150 | return -ENOMEM without waiting until one becomes available. | ||
| 151 | The function can only be called from a process context (for now). | ||
| 152 | Returns 0 on success and an appropriate error value on failure. | ||
| 153 | |||
| 154 | struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *rpdev, | ||
| 155 | void (*cb)(struct rpmsg_channel *, void *, int, void *, u32), | ||
| 156 | void *priv, u32 addr); | ||
| 157 | - every rpmsg address in the system is bound to an rx callback (so when | ||
| 158 | inbound messages arrive, they are dispatched by the rpmsg bus using the | ||
| 159 | appropriate callback handler) by means of an rpmsg_endpoint struct. | ||
| 160 | |||
| 161 | This function allows drivers to create such an endpoint, and by that, | ||
| 162 | bind a callback, and possibly some private data too, to an rpmsg address | ||
| 163 | (either one that is known in advance, or one that will be dynamically | ||
| 164 | assigned for them). | ||
| 165 | |||
| 166 | Simple rpmsg drivers need not call rpmsg_create_ept, because an endpoint | ||
| 167 | is already created for them when they are probed by the rpmsg bus | ||
| 168 | (using the rx callback they provide when they registered to the rpmsg bus). | ||
| 169 | |||
| 170 | So things should just work for simple drivers: they already have an | ||
| 171 | endpoint, their rx callback is bound to their rpmsg address, and when | ||
| 172 | relevant inbound messages arrive (i.e. messages which their dst address | ||
| 173 | equals to the src address of their rpmsg channel), the driver's handler | ||
| 174 | is invoked to process it. | ||
| 175 | |||
| 176 | That said, more complicated drivers might do need to allocate | ||
| 177 | additional rpmsg addresses, and bind them to different rx callbacks. | ||
| 178 | To accomplish that, those drivers need to call this function. | ||
| 179 | Drivers should provide their channel (so the new endpoint would bind | ||
| 180 | to the same remote processor their channel belongs to), an rx callback | ||
| 181 | function, an optional private data (which is provided back when the | ||
| 182 | rx callback is invoked), and an address they want to bind with the | ||
| 183 | callback. If addr is RPMSG_ADDR_ANY, then rpmsg_create_ept will | ||
| 184 | dynamically assign them an available rpmsg address (drivers should have | ||
| 185 | a very good reason why not to always use RPMSG_ADDR_ANY here). | ||
| 186 | |||
| 187 | Returns a pointer to the endpoint on success, or NULL on error. | ||
| 188 | |||
| 189 | void rpmsg_destroy_ept(struct rpmsg_endpoint *ept); | ||
| 190 | - destroys an existing rpmsg endpoint. user should provide a pointer | ||
| 191 | to an rpmsg endpoint that was previously created with rpmsg_create_ept(). | ||
| 192 | |||
| 193 | int register_rpmsg_driver(struct rpmsg_driver *rpdrv); | ||
| 194 | - registers an rpmsg driver with the rpmsg bus. user should provide | ||
| 195 | a pointer to an rpmsg_driver struct, which contains the driver's | ||
| 196 | ->probe() and ->remove() functions, an rx callback, and an id_table | ||
| 197 | specifying the names of the channels this driver is interested to | ||
| 198 | be probed with. | ||
| 199 | |||
| 200 | void unregister_rpmsg_driver(struct rpmsg_driver *rpdrv); | ||
| 201 | - unregisters an rpmsg driver from the rpmsg bus. user should provide | ||
| 202 | a pointer to a previously-registered rpmsg_driver struct. | ||
| 203 | Returns 0 on success, and an appropriate error value on failure. | ||
| 204 | |||
| 205 | |||
| 206 | 3. Typical usage | ||
| 207 | |||
| 208 | The following is a simple rpmsg driver, that sends an "hello!" message | ||
| 209 | on probe(), and whenever it receives an incoming message, it dumps its | ||
| 210 | content to the console. | ||
| 211 | |||
| 212 | #include <linux/kernel.h> | ||
| 213 | #include <linux/module.h> | ||
| 214 | #include <linux/rpmsg.h> | ||
| 215 | |||
| 216 | static void rpmsg_sample_cb(struct rpmsg_channel *rpdev, void *data, int len, | ||
| 217 | void *priv, u32 src) | ||
| 218 | { | ||
| 219 | print_hex_dump(KERN_INFO, "incoming message:", DUMP_PREFIX_NONE, | ||
| 220 | 16, 1, data, len, true); | ||
| 221 | } | ||
| 222 | |||
| 223 | static int rpmsg_sample_probe(struct rpmsg_channel *rpdev) | ||
| 224 | { | ||
| 225 | int err; | ||
| 226 | |||
| 227 | dev_info(&rpdev->dev, "chnl: 0x%x -> 0x%x\n", rpdev->src, rpdev->dst); | ||
| 228 | |||
| 229 | /* send a message on our channel */ | ||
| 230 | err = rpmsg_send(rpdev, "hello!", 6); | ||
| 231 | if (err) { | ||
| 232 | pr_err("rpmsg_send failed: %d\n", err); | ||
| 233 | return err; | ||
| 234 | } | ||
| 235 | |||
| 236 | return 0; | ||
| 237 | } | ||
| 238 | |||
| 239 | static void __devexit rpmsg_sample_remove(struct rpmsg_channel *rpdev) | ||
| 240 | { | ||
| 241 | dev_info(&rpdev->dev, "rpmsg sample client driver is removed\n"); | ||
| 242 | } | ||
| 243 | |||
| 244 | static struct rpmsg_device_id rpmsg_driver_sample_id_table[] = { | ||
| 245 | { .name = "rpmsg-client-sample" }, | ||
| 246 | { }, | ||
| 247 | }; | ||
| 248 | MODULE_DEVICE_TABLE(rpmsg, rpmsg_driver_sample_id_table); | ||
| 249 | |||
| 250 | static struct rpmsg_driver rpmsg_sample_client = { | ||
| 251 | .drv.name = KBUILD_MODNAME, | ||
| 252 | .drv.owner = THIS_MODULE, | ||
| 253 | .id_table = rpmsg_driver_sample_id_table, | ||
| 254 | .probe = rpmsg_sample_probe, | ||
| 255 | .callback = rpmsg_sample_cb, | ||
| 256 | .remove = __devexit_p(rpmsg_sample_remove), | ||
| 257 | }; | ||
| 258 | |||
| 259 | static int __init init(void) | ||
| 260 | { | ||
| 261 | return register_rpmsg_driver(&rpmsg_sample_client); | ||
| 262 | } | ||
| 263 | module_init(init); | ||
| 264 | |||
| 265 | static void __exit fini(void) | ||
| 266 | { | ||
| 267 | unregister_rpmsg_driver(&rpmsg_sample_client); | ||
| 268 | } | ||
| 269 | module_exit(fini); | ||
| 270 | |||
| 271 | Note: a similar sample which can be built and loaded can be found | ||
| 272 | in samples/rpmsg/. | ||
| 273 | |||
| 274 | 4. Allocations of rpmsg channels: | ||
| 275 | |||
| 276 | At this point we only support dynamic allocations of rpmsg channels. | ||
| 277 | |||
| 278 | This is possible only with remote processors that have the VIRTIO_RPMSG_F_NS | ||
| 279 | virtio device feature set. This feature bit means that the remote | ||
| 280 | processor supports dynamic name service announcement messages. | ||
| 281 | |||
| 282 | When this feature is enabled, creation of rpmsg devices (i.e. channels) | ||
| 283 | is completely dynamic: the remote processor announces the existence of a | ||
| 284 | remote rpmsg service by sending a name service message (which contains | ||
| 285 | the name and rpmsg addr of the remote service, see struct rpmsg_ns_msg). | ||
| 286 | |||
| 287 | This message is then handled by the rpmsg bus, which in turn dynamically | ||
| 288 | creates and registers an rpmsg channel (which represents the remote service). | ||
| 289 | If/when a relevant rpmsg driver is registered, it will be immediately probed | ||
| 290 | by the bus, and can then start sending messages to the remote service. | ||
| 291 | |||
| 292 | The plan is also to add static creation of rpmsg channels via the virtio | ||
| 293 | config space, but it's not implemented yet. | ||
| @@ -47,9 +47,9 @@ including the console 3270, changes subchannel identifier relative to · 46 unmodified lines | |||
| 47 | one another. ReIPL as soon as possible after running the configuration | 47 | one another. ReIPL as soon as possible after running the configuration |
| 48 | script and the resulting /tmp/mkdev3270. | 48 | script and the resulting /tmp/mkdev3270. |
| 49 | 49 | ||
| 50 | If you have chosen to make tub3270 a module, you add a line to | 50 | If you have chosen to make tub3270 a module, you add a line to a |
| 51 | /etc/modprobe.conf. If you are working on a VM virtual machine, you | 51 | configuration file under /etc/modprobe.d/. If you are working on a VM |
| 52 | can use DEF GRAF to define virtual 3270 devices. | 52 | virtual machine, you can use DEF GRAF to define virtual 3270 devices. |
| 53 | 53 | ||
| 54 | You may generate both 3270 and 3215 console support, or one or the | 54 | You may generate both 3270 and 3215 console support, or one or the |
| 55 | other, or neither. If you generate both, the console type under VM is | 55 | other, or neither. If you generate both, the console type under VM is |
| @@ -60,7 +60,7 @@ at boot time to a 3270 if it is a 3215. · 4 unmodified lines | |||
| 60 | 60 | ||
| 61 | In brief, these are the steps: | 61 | In brief, these are the steps: |
| 62 | 1. Install the tub3270 patch | 62 | 1. Install the tub3270 patch |
| 63 | 2. (If a module) add a line to /etc/modprobe.conf | 63 | 2. (If a module) add a line to a file in /etc/modprobe.d/*.conf |
| 64 | 3. (If VM) define devices with DEF GRAF | 64 | 3. (If VM) define devices with DEF GRAF |
| 65 | 4. Reboot | 65 | 4. Reboot |
| 66 | 5. Configure | 66 | 5. Configure |
| @@ -84,13 +84,12 @@ Here are the installation steps in detail: · 17 unmodified lines | |||
| 84 | make modules_install | 84 | make modules_install |
| 85 | 85 | ||
| 86 | 2. (Perform this step only if you have configured tub3270 as a | 86 | 2. (Perform this step only if you have configured tub3270 as a |
| 87 | module.) Add a line to /etc/modprobe.conf to automatically | 87 | module.) Add a line to a file /etc/modprobe.d/*.conf to automatically |
| 88 | load the driver when it's needed. With this line added, | 88 | load the driver when it's needed. With this line added, you will see |
| 89 | you will see login prompts appear on your 3270s as soon as | 89 | login prompts appear on your 3270s as soon as boot is complete (or |
| 90 | boot is complete (or with emulated 3270s, as soon as you dial | 90 | with emulated 3270s, as soon as you dial into your vm guest using the |
| 91 | into your vm guest using the command "DIAL <vmguestname>"). | 91 | command "DIAL <vmguestname>"). Since the line-mode major number is |
| 92 | Since the line-mode major number is 227, the line to add to | 92 | 227, the line to add should be: |
| 93 | /etc/modprobe.conf should be: | ||
| 94 | alias char-major-227 tub3270 | 93 | alias char-major-227 tub3270 |
| 95 | 94 | ||
| 96 | 3. Define graphic devices to your vm guest machine, if you | 95 | 3. Define graphic devices to your vm guest machine, if you |
| @@ -94,3 +94,5 @@ sym53c8xx_2.txt · 93 unmodified lines | |||
| 94 | - info on second generation driver for sym53c8xx based adapters | 94 | - info on second generation driver for sym53c8xx based adapters |
| 95 | tmscsim.txt | 95 | tmscsim.txt |
| 96 | - info on driver for AM53c974 based adapters | 96 | - info on driver for AM53c974 based adapters |
| 97 | ufs.txt | ||
| 98 | - info on Universal Flash Storage(UFS) and UFS host controller driver. | ||
| @@ -215,7 +215,7 @@ The following information is available in this file: · 214 unmodified lines | |||
| 215 | INCORRECTLY CAN RENDER YOUR SYSTEM INOPERABLE. | 215 | INCORRECTLY CAN RENDER YOUR SYSTEM INOPERABLE. |
| 216 | USE THEM WITH CAUTION. | 216 | USE THEM WITH CAUTION. |
| 217 | 217 | ||
| 218 | Edit the file "modprobe.conf" in the directory /etc and add/edit a | 218 | Put a .conf file in the /etc/modprobe.d/ directory and add/edit a |
| 219 | line containing 'options aic79xx aic79xx=[command[,command...]]' where | 219 | line containing 'options aic79xx aic79xx=[command[,command...]]' where |
| 220 | 'command' is one or more of the following: | 220 | 'command' is one or more of the following: |
| 221 | ----------------------------------------------------------------- | 221 | ----------------------------------------------------------------- |
| @@ -190,7 +190,7 @@ The following information is available in this file: · 189 unmodified lines | |||
| 190 | INCORRECTLY CAN RENDER YOUR SYSTEM INOPERABLE. | 190 | INCORRECTLY CAN RENDER YOUR SYSTEM INOPERABLE. |
| 191 | USE THEM WITH CAUTION. | 191 | USE THEM WITH CAUTION. |
| 192 | 192 | ||
| 193 | Edit the file "modprobe.conf" in the directory /etc and add/edit a | 193 | Put a .conf file in the /etc/modprobe.d directory and add/edit a |
| 194 | line containing 'options aic7xxx aic7xxx=[command[,command...]]' where | 194 | line containing 'options aic7xxx aic7xxx=[command[,command...]]' where |
| 195 | 'command' is one or more of the following: | 195 | 'command' is one or more of the following: |
| 196 | ----------------------------------------------------------------- | 196 | ----------------------------------------------------------------- |
| @@ -66,7 +66,7 @@ recognized. · 65 unmodified lines | |||
| 66 | If you want to have the module autoloaded on access to /dev/osst, you may | 66 | If you want to have the module autoloaded on access to /dev/osst, you may |
| 67 | add something like | 67 | add something like |
| 68 | alias char-major-206 osst | 68 | alias char-major-206 osst |
| 69 | to your /etc/modprobe.conf (before 2.6: modules.conf). | 69 | to a file under /etc/modprobe.d/ directory. |
| 70 | 70 | ||
| 71 | You may find it convenient to create a symbolic link | 71 | You may find it convenient to create a symbolic link |
| 72 | ln -s nosst0 /dev/tape | 72 | ln -s nosst0 /dev/tape |
| @@ -390,6 +390,10 @@ MTSETDRVBUFFER · 389 unmodified lines | |||
| 390 | MT_ST_SYSV sets the SYSV semantics (mode) | 390 | MT_ST_SYSV sets the SYSV semantics (mode) |
| 391 | MT_ST_NOWAIT enables immediate mode (i.e., don't wait for | 391 | MT_ST_NOWAIT enables immediate mode (i.e., don't wait for |
| 392 | the command to finish) for some commands (e.g., rewind) | 392 | the command to finish) for some commands (e.g., rewind) |
| 393 | MT_ST_NOWAIT_EOF enables immediate filemark mode (i.e. when | ||
| 394 | writing a filemark, don't wait for it to complete). Please | ||
| 395 | see the BASICS note about MTWEOFI with respect to the | ||
| 396 | possible dangers of writing immediate filemarks. | ||
| 393 | MT_ST_SILI enables setting the SILI bit in SCSI commands when | 397 | MT_ST_SILI enables setting the SILI bit in SCSI commands when |
| 394 | reading in variable block mode to enhance performance when | 398 | reading in variable block mode to enhance performance when |
| 395 | reading blocks shorter than the byte count; set this only | 399 | reading blocks shorter than the byte count; set this only |
| @@ -0,0 +1,133 @@ | |||
| 1 | Universal Flash Storage | ||
| 2 | ======================= | ||
| 3 | |||
| 4 | |||
| 5 | Contents | ||
| 6 | -------- | ||
| 7 | |||
| 8 | 1. Overview | ||
| 9 | 2. UFS Architecture Overview | ||
| 10 | 2.1 Application Layer | ||
| 11 | 2.2 UFS Transport Protocol(UTP) layer | ||
| 12 | 2.3 UFS Interconnect(UIC) Layer | ||
| 13 | 3. UFSHCD Overview | ||
| 14 | 3.1 UFS controller initialization | ||
| 15 | 3.2 UTP Transfer requests | ||
| 16 | 3.3 UFS error handling | ||
| 17 | 3.4 SCSI Error handling | ||
| 18 | |||
| 19 | |||
| 20 | 1. Overview | ||
| 21 | ----------- | ||
| 22 | |||
| 23 | Universal Flash Storage(UFS) is a storage specification for flash devices. | ||
| 24 | It is aimed to provide a universal storage interface for both | ||
| 25 | embedded and removable flash memory based storage in mobile | ||
| 26 | devices such as smart phones and tablet computers. The specification | ||
| 27 | is defined by JEDEC Solid State Technology Association. UFS is based | ||
| 28 | on MIPI M-PHY physical layer standard. UFS uses MIPI M-PHY as the | ||
| 29 | physical layer and MIPI Unipro as the link layer. | ||
| 30 | |||
| 31 | The main goals of UFS is to provide, | ||
| 32 | * Optimized performance: | ||
| 33 | For UFS version 1.0 and 1.1 the target performance is as follows, | ||
| 34 | Support for Gear1 is mandatory (rate A: 1248Mbps, rate B: 1457.6Mbps) | ||
| 35 | Support for Gear2 is optional (rate A: 2496Mbps, rate B: 2915.2Mbps) | ||
| 36 | Future version of the standard, | ||
| 37 | Gear3 (rate A: 4992Mbps, rate B: 5830.4Mbps) | ||
| 38 | * Low power consumption | ||
| 39 | * High random IOPs and low latency | ||
| 40 | |||
| 41 | |||
| 42 | 2. UFS Architecture Overview | ||
| 43 | ---------------------------- | ||
| 44 | |||
| 45 | UFS has a layered communication architecture which is based on SCSI | ||
| 46 | SAM-5 architectural model. | ||
| 47 | |||
| 48 | UFS communication architecture consists of following layers, | ||
| 49 | |||
| 50 | 2.1 Application Layer | ||
| 51 | |||
| 52 | The Application layer is composed of UFS command set layer(UCS), | ||
| 53 | Task Manager and Device manager. The UFS interface is designed to be | ||
| 54 | protocol agnostic, however SCSI has been selected as a baseline | ||
| 55 | protocol for versions 1.0 and 1.1 of UFS protocol layer. | ||
| 56 | UFS supports subset of SCSI commands defined by SPC-4 and SBC-3. | ||
| 57 | * UCS: It handles SCSI commands supported by UFS specification. | ||
| 58 | * Task manager: It handles task management functions defined by the | ||
| 59 | UFS which are meant for command queue control. | ||
| 60 | * Device manager: It handles device level operations and device | ||
| 61 | configuration operations. Device level operations mainly involve | ||
| 62 | device power management operations and commands to Interconnect | ||
| 63 | layers. Device level configurations involve handling of query | ||
| 64 | requests which are used to modify and retrieve configuration | ||
| 65 | information of the device. | ||
| 66 | |||
| 67 | 2.2 UFS Transport Protocol(UTP) layer | ||
| 68 | |||
| 69 | UTP layer provides services for | ||
| 70 | the higher layers through Service Access Points. UTP defines 3 | ||
| 71 | service access points for higher layers. | ||
| 72 | * UDM_SAP: Device manager service access point is exposed to device | ||
| 73 | manager for device level operations. These device level operations | ||
| 74 | are done through query requests. | ||
| 75 | * UTP_CMD_SAP: Command service access point is exposed to UFS command | ||
| 76 | set layer(UCS) to transport commands. | ||
| 77 | * UTP_TM_SAP: Task management service access point is exposed to task | ||
| 78 | manager to transport task management functions. | ||
| 79 | UTP transports messages through UFS protocol information unit(UPIU). | ||
| 80 | |||
| 81 | 2.3 UFS Interconnect(UIC) Layer | ||
| 82 | |||
| 83 | UIC is the lowest layer of UFS layered architecture. It handles | ||
| 84 | connection between UFS host and UFS device. UIC consists of | ||
| 85 | MIPI UniPro and MIPI M-PHY. UIC provides 2 service access points | ||
| 86 | to upper layer, | ||
| 87 | * UIC_SAP: To transport UPIU between UFS host and UFS device. | ||
| 88 | * UIO_SAP: To issue commands to Unipro layers. | ||
| 89 | |||
| 90 | |||
| 91 | 3. UFSHCD Overview | ||
| 92 | ------------------ | ||
| 93 | |||
| 94 | The UFS host controller driver is based on Linux SCSI Framework. | ||
| 95 | UFSHCD is a low level device driver which acts as an interface between | ||
| 96 | SCSI Midlayer and PCIe based UFS host controllers. | ||
| 97 | |||
| 98 | The current UFSHCD implementation supports following functionality, | ||
| 99 | |||
| 100 | 3.1 UFS controller initialization | ||
| 101 | |||
| 102 | The initialization module brings UFS host controller to active state | ||
| 103 | and prepares the controller to transfer commands/response between | ||
| 104 | UFSHCD and UFS device. | ||
| 105 | |||
| 106 | 3.2 UTP Transfer requests | ||
| 107 | |||
| 108 | Transfer request handling module of UFSHCD receives SCSI commands | ||
| 109 | from SCSI Midlayer, forms UPIUs and issues the UPIUs to UFS Host | ||
| 110 | controller. Also, the module decodes, responses received from UFS | ||
| 111 | host controller in the form of UPIUs and intimates the SCSI Midlayer | ||
| 112 | of the status of the command. | ||
| 113 | |||
| 114 | 3.3 UFS error handling | ||
| 115 | |||
| 116 | Error handling module handles Host controller fatal errors, | ||
| 117 | Device fatal errors and UIC interconnect layer related errors. | ||
| 118 | |||
| 119 | 3.4 SCSI Error handling | ||
| 120 | |||
| 121 | This is done through UFSHCD SCSI error handling routines registered | ||
| 122 | with SCSI Midlayer. Examples of some of the error handling commands | ||
| 123 | issues by SCSI Midlayer are Abort task, Lun reset and host reset. | ||
| 124 | UFSHCD Routines to perform these tasks are registered with | ||
| 125 | SCSI Midlayer through .eh_abort_handler, .eh_device_reset_handler and | ||
| 126 | .eh_host_reset_handler. | ||
| 127 | |||
| 128 | In this version of UFSHCD Query requests and power management | ||
| 129 | functionality are not implemented. | ||
| 130 | |||
| 131 | UFS Specifications can be found at, | ||
| 132 | UFS - http://www.jedec.org/sites/default/files/docs/JESD220.pdf | ||
| 133 | UFSHCI - http://www.jedec.org/sites/default/files/docs/JESD223.pdf | ||
| @@ -49,7 +49,7 @@ Hardware - If you have an ISA card, find a free interrupt and io port. · 48 unmodified lines | |||
| 49 | 49 | ||
| 50 | Note the hardware address from the Computone ISA cards installed into | 50 | Note the hardware address from the Computone ISA cards installed into |
| 51 | the system. These are required for editing ip2.c or editing | 51 | the system. These are required for editing ip2.c or editing |
| 52 | /etc/modprobe.conf, or for specification on the modprobe | 52 | /etc/modprobe.d/*.conf, or for specification on the modprobe |
| 53 | command line. | 53 | command line. |
| 54 | 54 | ||
| 55 | Note that the /etc/modules.conf should be used for older (pre-2.6) | 55 | Note that the /etc/modules.conf should be used for older (pre-2.6) |
| @@ -66,7 +66,7 @@ b) Run "make config" or "make menuconfig" or "make xconfig" · 10 unmodified lines | |||
| 66 | c) Set address on ISA cards then: | 66 | c) Set address on ISA cards then: |
| 67 | edit /usr/src/linux/drivers/char/ip2.c if needed | 67 | edit /usr/src/linux/drivers/char/ip2.c if needed |
| 68 | or | 68 | or |
| 69 | edit /etc/modprobe.conf if needed (module). | 69 | edit config file in /etc/modprobe.d/ if needed (module). |
| 70 | or both to match this setting. | 70 | or both to match this setting. |
| 71 | d) Run "make modules" | 71 | d) Run "make modules" |
| 72 | e) Run "make modules_install" | 72 | e) Run "make modules_install" |
| @@ -153,11 +153,11 @@ the irqs are not specified the driver uses the default in ip2.c (which · 80 unmodified lines | |||
| 153 | selects polled mode). If no base addresses are specified the defaults in | 153 | selects polled mode). If no base addresses are specified the defaults in |
| 154 | ip2.c are used. If you are autoloading the driver module with kerneld or | 154 | ip2.c are used. If you are autoloading the driver module with kerneld or |
| 155 | kmod the base addresses and interrupt number must also be set in ip2.c | 155 | kmod the base addresses and interrupt number must also be set in ip2.c |
| 156 | and recompile or just insert and options line in /etc/modprobe.conf or both. | 156 | and recompile or just insert and options line in /etc/modprobe.d/*.conf or both. |
| 157 | The options line is equivalent to the command line and takes precedence over | 157 | The options line is equivalent to the command line and takes precedence over |
| 158 | what is in ip2.c. | 158 | what is in ip2.c. |
| 159 | 159 | ||
| 160 | /etc/modprobe.conf sample: | 160 | config sample to put /etc/modprobe.d/*.conf: |
| 161 | options ip2 io=1,0x328 irq=1,10 | 161 | options ip2 io=1,0x328 irq=1,10 |
| 162 | alias char-major-71 ip2 | 162 | alias char-major-71 ip2 |
| 163 | alias char-major-72 ip2 | 163 | alias char-major-72 ip2 |
| @@ -62,7 +62,7 @@ in the system log at /var/log/messages. · 61 unmodified lines | |||
| 62 | 62 | ||
| 63 | If installed as a module, the module must be loaded. This can be done | 63 | If installed as a module, the module must be loaded. This can be done |
| 64 | manually by entering "modprobe rocket". To have the module loaded automatically | 64 | manually by entering "modprobe rocket". To have the module loaded automatically |
| 65 | upon system boot, edit the /etc/modprobe.conf file and add the line | 65 | upon system boot, edit a /etc/modprobe.d/*.conf file and add the line |
| 66 | "alias char-major-46 rocket". | 66 | "alias char-major-46 rocket". |
| 67 | 67 | ||
| 68 | In order to use the ports, their device names (nodes) must be created with mknod. | 68 | In order to use the ports, their device names (nodes) must be created with mknod. |
| @@ -139,8 +139,8 @@ secondary address 0x280 and IRQ 10. · 138 unmodified lines | |||
| 139 | 139 | ||
| 140 | You will probably want to enter this module load and configuration information | 140 | You will probably want to enter this module load and configuration information |
| 141 | into your system startup scripts so that the drivers are loaded and configured | 141 | into your system startup scripts so that the drivers are loaded and configured |
| 142 | on each system boot. Typically the start up script would be something like | 142 | on each system boot. Typically configuration files are put in the |
| 143 | /etc/modprobe.conf. | 143 | /etc/modprobe.d/ directory. |
| 144 | 144 | ||
| 145 | 145 | ||
| 146 | 2.2 STATIC DRIVER CONFIGURATION: | 146 | 2.2 STATIC DRIVER CONFIGURATION: |
| @@ -2044,7 +2044,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. · 2043 unmodified lines | |||
| 2044 | Install the necessary firmware files in alsa-firmware package. | 2044 | Install the necessary firmware files in alsa-firmware package. |
| 2045 | When no hotplug fw loader is available, you need to load the | 2045 | When no hotplug fw loader is available, you need to load the |
| 2046 | firmware via vxloader utility in alsa-tools package. To invoke | 2046 | firmware via vxloader utility in alsa-tools package. To invoke |
| 2047 | vxloader automatically, add the following to /etc/modprobe.conf | 2047 | vxloader automatically, add the following to /etc/modprobe.d/alsa.conf |
| 2048 | 2048 | ||
| 2049 | install snd-vx222 /sbin/modprobe --first-time -i snd-vx222 && /usr/bin/vxloader | 2049 | install snd-vx222 /sbin/modprobe --first-time -i snd-vx222 && /usr/bin/vxloader |
| 2050 | 2050 | ||
| @@ -2168,10 +2168,10 @@ corresponds to the card index of ALSA. Usually, define this · 117 unmodified lines | |||
| 2168 | as the same card module. | 2168 | as the same card module. |
| 2169 | 2169 | ||
| 2170 | An example configuration for a single emu10k1 card is like below: | 2170 | An example configuration for a single emu10k1 card is like below: |
| 2171 | ----- /etc/modprobe.conf | 2171 | ----- /etc/modprobe.d/alsa.conf |
| 2172 | alias snd-card-0 snd-emu10k1 | 2172 | alias snd-card-0 snd-emu10k1 |
| 2173 | alias sound-slot-0 snd-emu10k1 | 2173 | alias sound-slot-0 snd-emu10k1 |
| 2174 | ----- /etc/modprobe.conf | 2174 | ----- /etc/modprobe.d/alsa.conf |
| 2175 | 2175 | ||
| 2176 | The available number of auto-loaded sound cards depends on the module | 2176 | The available number of auto-loaded sound cards depends on the module |
| 2177 | option "cards_limit" of snd module. As default it's set to 1. | 2177 | option "cards_limit" of snd module. As default it's set to 1. |
| @@ -2184,7 +2184,7 @@ cards is kept consistent. · 6 unmodified lines | |||
| 2184 | 2184 | ||
| 2185 | An example configuration for two sound cards is like below: | 2185 | An example configuration for two sound cards is like below: |
| 2186 | 2186 | ||
| 2187 | ----- /etc/modprobe.conf | 2187 | ----- /etc/modprobe.d/alsa.conf |
| 2188 | # ALSA portion | 2188 | # ALSA portion |
| 2189 | options snd cards_limit=2 | 2189 | options snd cards_limit=2 |
| 2190 | alias snd-card-0 snd-interwave | 2190 | alias snd-card-0 snd-interwave |
| @@ -2194,7 +2194,7 @@ options snd-ens1371 index=1 · 3 unmodified lines | |||
| 2194 | # OSS/Free portion | 2194 | # OSS/Free portion |
| 2195 | alias sound-slot-0 snd-interwave | 2195 | alias sound-slot-0 snd-interwave |
| 2196 | alias sound-slot-1 snd-ens1371 | 2196 | alias sound-slot-1 snd-ens1371 |
| 2197 | ----- /etc/modprobe.conf | 2197 | ----- /etc/modprobe.d/alsa.conf |
| 2198 | 2198 | ||
| 2199 | In this example, the interwave card is always loaded as the first card | 2199 | In this example, the interwave card is always loaded as the first card |
| 2200 | (index 0) and ens1371 as the second (index 1). | 2200 | (index 0) and ens1371 as the second (index 1). |
| @@ -232,7 +232,7 @@ The parameter can be given: · 231 unmodified lines | |||
| 232 | # modprobe snd-usb-audio index=1 device_setup=0x09 | 232 | # modprobe snd-usb-audio index=1 device_setup=0x09 |
| 233 | 233 | ||
| 234 | * Or while configuring the modules options in your modules configuration file | 234 | * Or while configuring the modules options in your modules configuration file |
| 235 | - For Fedora distributions, edit the /etc/modprobe.conf file: | 235 | (tipically a .conf file in /etc/modprobe.d/ directory: |
| 236 | alias snd-card-1 snd-usb-audio | 236 | alias snd-card-1 snd-usb-audio |
| 237 | options snd-usb-audio index=1 device_setup=0x09 | 237 | options snd-usb-audio index=1 device_setup=0x09 |
| 238 | 238 | ||
| @@ -253,7 +253,7 @@ CAUTION when initializing the device · 14 unmodified lines | |||
| 253 | - first turn off the device | 253 | - first turn off the device |
| 254 | - de-register the snd-usb-audio module (modprobe -r) | 254 | - de-register the snd-usb-audio module (modprobe -r) |
| 255 | - change the device_setup parameter by changing the device_setup | 255 | - change the device_setup parameter by changing the device_setup |
| 256 | option in /etc/modprobe.conf | 256 | option in /etc/modprobe.d/*.conf |
| 257 | - turn on the device | 257 | - turn on the device |
| 258 | * A workaround for this last issue has been applied to kernel 2.6.23, but it may not | 258 | * A workaround for this last issue has been applied to kernel 2.6.23, but it may not |
| 259 | be enough to ensure the 'stability' of the device initialization. | 259 | be enough to ensure the 'stability' of the device initialization. |
| @@ -43,7 +43,9 @@ ALC680 · 42 unmodified lines | |||
| 43 | 43 | ||
| 44 | ALC882/883/885/888/889 | 44 | ALC882/883/885/888/889 |
| 45 | ====================== | 45 | ====================== |
| 46 | N/A | 46 | acer-aspire-4930g Acer Aspire 4930G/5930G/6530G/6930G/7730G |
| 47 | acer-aspire-8930g Acer Aspire 8330G/6935G | ||
| 48 | acer-aspire Acer Aspire others | ||
| 47 | 49 | ||
| 48 | ALC861/660 | 50 | ALC861/660 |
| 49 | ========== | 51 | ========== |
| @@ -76,9 +76,9 @@ FIRMWARE · 75 unmodified lines | |||
| 76 | when CONFIG_FW_LOADER is set. The mixartloader is necessary only | 76 | when CONFIG_FW_LOADER is set. The mixartloader is necessary only |
| 77 | for older versions or when you build the driver into kernel.] | 77 | for older versions or when you build the driver into kernel.] |
| 78 | 78 | ||
| 79 | For loading the firmware automatically after the module is loaded, use | 79 | For loading the firmware automatically after the module is loaded, use a |
| 80 | the post-install command. For example, add the following entry to | 80 | install command. For example, add the following entry to |
| 81 | /etc/modprobe.conf for miXart driver: | 81 | /etc/modprobe.d/mixart.conf for miXart driver: |
| 82 | 82 | ||
| 83 | install snd-mixart /sbin/modprobe --first-time -i snd-mixart && \ | 83 | install snd-mixart /sbin/modprobe --first-time -i snd-mixart && \ |
| 84 | /usr/bin/mixartloader | 84 | /usr/bin/mixartloader |
| @@ -19,7 +19,7 @@ the card number and the minor unit number. Usually you don't have to · 18 unmodified lines | |||
| 19 | define these aliases by yourself. | 19 | define these aliases by yourself. |
| 20 | 20 | ||
| 21 | Only necessary step for auto-loading of OSS modules is to define the | 21 | Only necessary step for auto-loading of OSS modules is to define the |
| 22 | card alias in /etc/modprobe.conf, such as | 22 | card alias in /etc/modprobe.d/alsa.conf, such as |
| 23 | 23 | ||
| 24 | alias sound-slot-0 snd-emu10k1 | 24 | alias sound-slot-0 snd-emu10k1 |
| 25 | 25 | ||
| @@ -41,7 +41,7 @@ mpu_base I/O base address for activate MPU-401 mode · 40 unmodified lines | |||
| 41 | (0x300, 0x310, 0x320 or 0x330) | 41 | (0x300, 0x310, 0x320 or 0x330) |
| 42 | mpu_irq MPU-401 irq line (5, 7, 9, 10 or 0) | 42 | mpu_irq MPU-401 irq line (5, 7, 9, 10 or 0) |
| 43 | 43 | ||
| 44 | The /etc/modprobe.conf will have lines like this: | 44 | A configuration file in /etc/modprobe.d/ directory will have lines like this: |
| 45 | 45 | ||
| 46 | options opl3 io=0x388 | 46 | options opl3 io=0x388 |
| 47 | options ad1848 io=0x530 irq=11 dma=3 | 47 | options ad1848 io=0x530 irq=11 dma=3 |
| @@ -51,11 +51,11 @@ Where the aedsp16 options are the options for this driver while opl3 and · 3 unmodified lines | |||
| 51 | ad1848 are the corresponding options for the MSS and OPL3 modules. | 51 | ad1848 are the corresponding options for the MSS and OPL3 modules. |
| 52 | 52 | ||
| 53 | Loading MSS and OPL3 needs to pre load the aedsp16 module to set up correctly | 53 | Loading MSS and OPL3 needs to pre load the aedsp16 module to set up correctly |
| 54 | the sound card. Installation dependencies must be written in the modprobe.conf | 54 | the sound card. Installation dependencies must be written in configuration |
| 55 | file: | 55 | files under /etc/modprobe.d/ directory: |
| 56 | 56 | ||
| 57 | install ad1848 /sbin/modprobe aedsp16 && /sbin/modprobe -i ad1848 | 57 | softdep ad1848 pre: aedsp16 |
| 58 | install opl3 /sbin/modprobe aedsp16 && /sbin/modprobe -i opl3 | 58 | softdep opl3 pre: aedsp16 |
| 59 | 59 | ||
| 60 | Then you must load the sound modules stack in this order: | 60 | Then you must load the sound modules stack in this order: |
| 61 | sound -> aedsp16 -> [ ad1848, opl3 ] | 61 | sound -> aedsp16 -> [ ad1848, opl3 ] |
| @@ -143,11 +143,10 @@ CONFIG_SOUND_MSS=m · 142 unmodified lines | |||
| 143 | 143 | ||
| 144 | 144 | ||
| 145 | 145 | ||
| 146 | Alma Chao <elysian@ethereal.torsion.org> suggests the following /etc/modprobe.conf: | 146 | Alma Chao <elysian@ethereal.torsion.org> suggests the following in |
| 147 | a /etc/modprobe.d/*conf file: | ||
| 147 | 148 | ||
| 148 | alias sound ad1848 | 149 | alias sound ad1848 |
| 149 | alias synth0 opl3 | 150 | alias synth0 opl3 |
| 150 | options ad1848 io=0x530 irq=7 dma=0 soundpro=1 | 151 | options ad1848 io=0x530 irq=7 dma=0 soundpro=1 |
| 151 | options opl3 io=0x388 | 152 | options opl3 io=0x388 |
| 152 | |||
| 153 | |||
| @@ -167,8 +167,8 @@ in a file such as /root/soundon.sh. · 166 unmodified lines | |||
| 167 | MODPROBE: | 167 | MODPROBE: |
| 168 | ========= | 168 | ========= |
| 169 | 169 | ||
| 170 | If loading via modprobe, these common files are automatically loaded | 170 | If loading via modprobe, these common files are automatically loaded when |
| 171 | when requested by modprobe. For example, my /etc/modprobe.conf contains: | 171 | requested by modprobe. For example, my /etc/modprobe.d/oss.conf contains: |
| 172 | 172 | ||
| 173 | alias sound sb | 173 | alias sound sb |
| 174 | options sb io=0x240 irq=9 dma=3 dma16=5 mpu_io=0x300 | 174 | options sb io=0x240 irq=9 dma=3 dma16=5 mpu_io=0x300 |
| @@ -228,7 +228,7 @@ http://www.opensound.com. Before loading the commercial sound · 53 unmodified lines | |||
| 228 | driver, you should do the following: | 228 | driver, you should do the following: |
| 229 | 229 | ||
| 230 | 1. remove sound modules (detailed above) | 230 | 1. remove sound modules (detailed above) |
| 231 | 2. remove the sound modules from /etc/modprobe.conf | 231 | 2. remove the sound modules from /etc/modprobe.d/*.conf |
| 232 | 3. move the sound modules from /lib/modules/<kernel>/misc | 232 | 3. move the sound modules from /lib/modules/<kernel>/misc |
| 233 | (for example, I make a /lib/modules/<kernel>/misc/tmp | 233 | (for example, I make a /lib/modules/<kernel>/misc/tmp |
| 234 | directory and copy the sound module files to that | 234 | directory and copy the sound module files to that |
| @@ -265,7 +265,7 @@ twice, you need to do the following: · 30 unmodified lines | |||
| 265 | sb.o could be copied (or symlinked) to sb1.o for the | 265 | sb.o could be copied (or symlinked) to sb1.o for the |
| 266 | second SoundBlaster. | 266 | second SoundBlaster. |
| 267 | 267 | ||
| 268 | 2. Make a second entry in /etc/modprobe.conf, for example, | 268 | 2. Make a second entry in /etc/modprobe.d/*conf, for example, |
| 269 | sound1 or sb1. This second entry should refer to the | 269 | sound1 or sb1. This second entry should refer to the |
| 270 | new module names for example sb1, and should include | 270 | new module names for example sb1, and should include |
| 271 | the I/O, etc. for the second sound card. | 271 | the I/O, etc. for the second sound card. |
| @@ -369,7 +369,7 @@ There are several ways of configuring your sound: · 97 unmodified lines | |||
| 369 | 2) On the command line when using insmod or in a bash script | 369 | 2) On the command line when using insmod or in a bash script |
| 370 | using command line calls to load sound. | 370 | using command line calls to load sound. |
| 371 | 371 | ||
| 372 | 3) In /etc/modprobe.conf when using modprobe. | 372 | 3) In /etc/modprobe.d/*conf when using modprobe. |
| 373 | 373 | ||
| 374 | 4) Via Red Hat's GPL'd /usr/sbin/sndconfig program (text based). | 374 | 4) Via Red Hat's GPL'd /usr/sbin/sndconfig program (text based). |
| 375 | 375 | ||
| @@ -18,7 +18,7 @@ force the card into a mode in which it can be programmed. · 17 unmodified lines | |||
| 18 | If you have another OS installed on your computer it is recommended | 18 | If you have another OS installed on your computer it is recommended |
| 19 | that Linux and the other OS use the same resources. | 19 | that Linux and the other OS use the same resources. |
| 20 | 20 | ||
| 21 | Also, it is recommended that resources specified in /etc/modprobe.conf | 21 | Also, it is recommended that resources specified in /etc/modprobe.d/*.conf |
| 22 | and resources specified in /etc/isapnp.conf agree. | 22 | and resources specified in /etc/isapnp.conf agree. |
| 23 | 23 | ||
| 24 | Compiling the sound driver | 24 | Compiling the sound driver |
| @@ -67,11 +67,7 @@ address is hard-coded into the driver. · 42 unmodified lines | |||
| 67 | 67 | ||
| 68 | Using kmod and autoloading the sound driver | 68 | Using kmod and autoloading the sound driver |
| 69 | ------------------------------------------- | 69 | ------------------------------------------- |
| 70 | Comment: as of linux-2.1.90 kmod is replacing kerneld. | 70 | Config files in '/etc/modprobe.d/' are used as below: |
| 71 | The config file '/etc/modprobe.conf' is used as before. | ||
| 72 | |||
| 73 | This is the sound part of my /etc/modprobe.conf file. | ||
| 74 | Following that I will explain each line. | ||
| 75 | 71 | ||
| 76 | alias mixer0 mad16 | 72 | alias mixer0 mad16 |
| 77 | alias audio0 mad16 | 73 | alias audio0 mad16 |
| @@ -128,7 +128,7 @@ CONFIG_SOUND_YM3812 · 127 unmodified lines | |||
| 128 | You can then get OPL3 functionality by issuing the command: | 128 | You can then get OPL3 functionality by issuing the command: |
| 129 | insmod opl3 | 129 | insmod opl3 |
| 130 | In addition, you must either add the following line to | 130 | In addition, you must either add the following line to |
| 131 | /etc/modprobe.conf: | 131 | /etc/modprobe.d/*.conf: |
| 132 | options opl3 io=0x388 | 132 | options opl3 io=0x388 |
| 133 | or else add the following line to /etc/lilo.conf: | 133 | or else add the following line to /etc/lilo.conf: |
| 134 | opl3=0x388 | 134 | opl3=0x388 |
| @@ -158,5 +158,5 @@ following line would be appropriate: · 23 unmodified lines | |||
| 158 | append="pas2=0x388,10,3,-1,0,-1,-1,-1 opl3=0x388" | 158 | append="pas2=0x388,10,3,-1,0,-1,-1,-1 opl3=0x388" |
| 159 | 159 | ||
| 160 | If sound is built totally modular, the above options may be | 160 | If sound is built totally modular, the above options may be |
| 161 | specified in /etc/modprobe.conf for pas2, sb and opl3 | 161 | specified in /etc/modprobe.d/*.conf for pas2, sb and opl3 |
| 162 | respectively. | 162 | respectively. |
| @@ -26,7 +26,7 @@ Note that it is no longer necessary or possible to configure sound in the · 25 unmodified lines | |||
| 26 | drivers/sound dir. Now one simply configures and makes one's kernel and | 26 | drivers/sound dir. Now one simply configures and makes one's kernel and |
| 27 | modules in the usual way. | 27 | modules in the usual way. |
| 28 | 28 | ||
| 29 | Then, add to your /etc/modprobe.conf something like: | 29 | Then, add to your /etc/modprobe.d/oss.conf something like: |
| 30 | 30 | ||
| 31 | alias char-major-14-* sb | 31 | alias char-major-14-* sb |
| 32 | install sb /sbin/modprobe -i sb && /sbin/modprobe adlib_card | 32 | install sb /sbin/modprobe -i sb && /sbin/modprobe adlib_card |
| @@ -36,7 +36,7 @@ options adlib_card io=0x388 # FM synthesizer · 3 unmodified lines | |||
| 36 | Alternatively, if you have compiled in kernel level ISAPnP support: | 36 | Alternatively, if you have compiled in kernel level ISAPnP support: |
| 37 | 37 | ||
| 38 | alias char-major-14 sb | 38 | alias char-major-14 sb |
| 39 | post-install sb /sbin/modprobe "-k" "adlib_card" | 39 | softdep sb post: adlib_card |
| 40 | options adlib_card io=0x388 | 40 | options adlib_card io=0x388 |
| 41 | 41 | ||
| 42 | The effect of this is that the sound driver and all necessary bits and | 42 | The effect of this is that the sound driver and all necessary bits and |
| @@ -66,12 +66,12 @@ args are expected. · 23 unmodified lines | |||
| 66 | Note that at present there is no way to configure the io, irq and other | 66 | Note that at present there is no way to configure the io, irq and other |
| 67 | parameters for the modular drivers as one does for the wired drivers.. One | 67 | parameters for the modular drivers as one does for the wired drivers.. One |
| 68 | needs to pass the modules the necessary parameters as arguments, either | 68 | needs to pass the modules the necessary parameters as arguments, either |
| 69 | with /etc/modprobe.conf or with command-line args to modprobe, e.g. | 69 | with /etc/modprobe.d/*.conf or with command-line args to modprobe, e.g. |
| 70 | 70 | ||
| 71 | modprobe sb io=0x220 irq=7 dma=1 dma16=5 mpu_io=0x330 | 71 | modprobe sb io=0x220 irq=7 dma=1 dma16=5 mpu_io=0x330 |
| 72 | modprobe adlib_card io=0x388 | 72 | modprobe adlib_card io=0x388 |
| 73 | 73 | ||
| 74 | recommend using /etc/modprobe.conf. | 74 | recommend using /etc/modprobe.d/*.conf. |
| 75 | 75 | ||
| 76 | Persistent DMA Buffers: | 76 | Persistent DMA Buffers: |
| 77 | 77 | ||
| @@ -89,7 +89,7 @@ wasteful of RAM, but it guarantees that sound always works. · 11 unmodified lines | |||
| 89 | 89 | ||
| 90 | To make the sound driver use persistent DMA buffers we need to pass the | 90 | To make the sound driver use persistent DMA buffers we need to pass the |
| 91 | sound.o module a "dmabuf=1" command-line argument. This is normally done | 91 | sound.o module a "dmabuf=1" command-line argument. This is normally done |
| 92 | in /etc/modprobe.conf like so: | 92 | in /etc/modprobe.d/*.conf files like so: |
| 93 | 93 | ||
| 94 | options sound dmabuf=1 | 94 | options sound dmabuf=1 |
| 95 | 95 | ||
| @@ -241,9 +241,8 @@ command you are interested in. · 240 unmodified lines | |||
| 241 | 241 | ||
| 242 | * I have more questions, who can I ask? | 242 | * I have more questions, who can I ask? |
| 243 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 243 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 244 | And I'll answer any questions about the registration system you got, also | 244 | Just ask them on the linux-kernel mailing list: |
| 245 | responding as soon as possible. | 245 | linux-kernel@vger.kernel.org |
| 246 | -Crutcher | ||
| 247 | 246 | ||
| 248 | * Credits | 247 | * Credits |
| 249 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 248 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| @@ -168,6 +168,28 @@ that if the completion handler or anyone else tries to resubmit it · 167 unmodified lines | |||
| 168 | they will get a -EPERM error. Thus you can be sure that when | 168 | they will get a -EPERM error. Thus you can be sure that when |
| 169 | usb_kill_urb() returns, the URB is totally idle. | 169 | usb_kill_urb() returns, the URB is totally idle. |
| 170 | 170 | ||
| 171 | There is a lifetime issue to consider. An URB may complete at any | ||
| 172 | time, and the completion handler may free the URB. If this happens | ||
| 173 | while usb_unlink_urb or usb_kill_urb is running, it will cause a | ||
| 174 | memory-access violation. The driver is responsible for avoiding this, | ||
| 175 | which often means some sort of lock will be needed to prevent the URB | ||
| 176 | from being deallocated while it is still in use. | ||
| 177 | |||
| 178 | On the other hand, since usb_unlink_urb may end up calling the | ||
| 179 | completion handler, the handler must not take any lock that is held | ||
| 180 | when usb_unlink_urb is invoked. The general solution to this problem | ||
| 181 | is to increment the URB's reference count while holding the lock, then | ||
| 182 | drop the lock and call usb_unlink_urb or usb_kill_urb, and then | ||
| 183 | decrement the URB's reference count. You increment the reference | ||
| 184 | count by calling | ||
| 185 | |||
| 186 | struct urb *usb_get_urb(struct urb *urb) | ||
| 187 | |||
| 188 | (ignore the return value; it is the same as the argument) and | ||
| 189 | decrement the reference count by calling usb_free_urb. Of course, | ||
| 190 | none of this is necessary if there's no danger of the URB being freed | ||
| 191 | by the completion handler. | ||
| 192 | |||
| 171 | 193 | ||
| 172 | 1.7. What about the completion handler? | 194 | 1.7. What about the completion handler? |
| 173 | 195 | ||
| @@ -179,7 +179,8 @@ do: · 178 unmodified lines | |||
| 179 | 179 | ||
| 180 | modprobe usbcore autosuspend=5 | 180 | modprobe usbcore autosuspend=5 |
| 181 | 181 | ||
| 182 | Equivalently, you could add to /etc/modprobe.conf a line saying: | 182 | Equivalently, you could add to a configuration file in /etc/modprobe.d |
| 183 | a line saying: | ||
| 183 | 184 | ||
| 184 | options usbcore autosuspend=5 | 185 | options usbcore autosuspend=5 |
| 185 | 186 | ||
| @@ -183,10 +183,10 @@ An input control transfer to get a port status. · 182 unmodified lines | |||
| 183 | d5ea89a0 3575914555 S Ci:1:001:0 s a3 00 0000 0003 0004 4 < | 183 | d5ea89a0 3575914555 S Ci:1:001:0 s a3 00 0000 0003 0004 4 < |
| 184 | d5ea89a0 3575914560 C Ci:1:001:0 0 4 = 01050000 | 184 | d5ea89a0 3575914560 C Ci:1:001:0 0 4 = 01050000 |
| 185 | 185 | ||
| 186 | An output bulk transfer to send a SCSI command 0x5E in a 31-byte Bulk wrapper | 186 | An output bulk transfer to send a SCSI command 0x28 (READ_10) in a 31-byte |
| 187 | to a storage device at address 5: | 187 | Bulk wrapper to a storage device at address 5: |
| 188 | 188 | ||
| 189 | dd65f0e8 4128379752 S Bo:1:005:2 -115 31 = 55534243 5e000000 00000000 00000600 00000000 00000000 00000000 000000 | 189 | dd65f0e8 4128379752 S Bo:1:005:2 -115 31 = 55534243 ad000000 00800000 80010a28 20000000 20000040 00000000 000000 |
| 190 | dd65f0e8 4128379808 C Bo:1:005:2 0 31 > | 190 | dd65f0e8 4128379808 C Bo:1:005:2 0 31 > |
| 191 | 191 | ||
| 192 | * Raw binary format and API | 192 | * Raw binary format and API |
| @@ -61,29 +61,19 @@ But that is my personal preference. · 60 unmodified lines | |||
| 61 | 2.2 Configuration | 61 | 2.2 Configuration |
| 62 | 62 | ||
| 63 | The configuration requires module configuration and device | 63 | The configuration requires module configuration and device |
| 64 | configuration. I like kmod or kerneld process with the | 64 | configuration. The following sections detail these procedures. |
| 65 | /etc/modprobe.conf file so the modules can automatically load/unload as | ||
| 66 | they are used. The video devices could already exist, be generated | ||
| 67 | using MAKEDEV, or need to be created. The following sections detail | ||
| 68 | these procedures. | ||
| 69 | 65 | ||
| 70 | 66 | ||
| 71 | 2.1 Module Configuration | 67 | 2.1 Module Configuration |
| 72 | 68 | ||
| 73 | Using modules requires a bit of work to install and pass the | 69 | Using modules requires a bit of work to install and pass the |
| 74 | parameters. Understand that entries in /etc/modprobe.conf of: | 70 | parameters. Understand that entries in /etc/modprobe.d/*.conf of: |
| 75 | 71 | ||
| 76 | alias parport_lowlevel parport_pc | 72 | alias parport_lowlevel parport_pc |
| 77 | options parport_pc io=0x378 irq=none | 73 | options parport_pc io=0x378 irq=none |
| 78 | alias char-major-81 videodev | 74 | alias char-major-81 videodev |
| 79 | alias char-major-81-0 c-qcam | 75 | alias char-major-81-0 c-qcam |
| 80 | 76 | ||
| 81 | will cause the kmod/modprobe to do certain things. If you are | ||
| 82 | using kmod, then a request for a 'char-major-81-0' will cause | ||
| 83 | the 'c-qcam' module to load. If you have other video sources with | ||
| 84 | modules, you might want to assign the different minor numbers to | ||
| 85 | different modules. | ||
| 86 | |||
| 87 | 2.2 Device Configuration | 77 | 2.2 Device Configuration |
| 88 | 78 | ||
| 89 | At this point, we need to ensure that the device files exist. | 79 | At this point, we need to ensure that the device files exist. |
| @@ -255,7 +255,7 @@ Load zr36067.o. If it can't autodetect your card, use the card=X insmod · 254 unmodified lines | |||
| 255 | option with X being the card number as given in the previous section. | 255 | option with X being the card number as given in the previous section. |
| 256 | To have more than one card, use card=X1[,X2[,X3,[X4[..]]]] | 256 | To have more than one card, use card=X1[,X2[,X3,[X4[..]]]] |
| 257 | 257 | ||
| 258 | To automate this, add the following to your /etc/modprobe.conf: | 258 | To automate this, add the following to your /etc/modprobe.d/zoran.conf: |
| 259 | 259 | ||
| 260 | options zr36067 card=X1[,X2[,X3[,X4[..]]]] | 260 | options zr36067 card=X1[,X2[,X3[,X4[..]]]] |
| 261 | alias char-major-81-0 zr36067 | 261 | alias char-major-81-0 zr36067 |
| @@ -1,4 +1,4 @@ | |||
| 1 | # For modern kernels (2.6 or above), this belongs in /etc/modprobe.conf | 1 | # For modern kernels (2.6 or above), this belongs in /etc/modprobe.d/*.conf |
| 2 | # For for 2.4 kernels or earlier, this belongs in /etc/modules.conf. | 2 | # For for 2.4 kernels or earlier, this belongs in /etc/modules.conf. |
| 3 | 3 | ||
| 4 | # i2c | 4 | # i2c |
| @@ -55,7 +55,7 @@ Module use: · 54 unmodified lines | |||
| 55 | ----------- | 55 | ----------- |
| 56 | 56 | ||
| 57 | In order to automatically load the meye module on use, you can put those lines | 57 | In order to automatically load the meye module on use, you can put those lines |
| 58 | in your /etc/modprobe.conf file: | 58 | in your /etc/modprobe.d/meye.conf file: |
| 59 | 59 | ||
| 60 | alias char-major-81 videodev | 60 | alias char-major-81 videodev |
| 61 | alias char-major-81-0 meye | 61 | alias char-major-81-0 meye |
| @@ -95,7 +95,7 @@ described as 'basic' will be available. · 94 unmodified lines | |||
| 95 | Capability: basic | 95 | Capability: basic |
| 96 | Architectures: all | 96 | Architectures: all |
| 97 | Type: system ioctl | 97 | Type: system ioctl |
| 98 | Parameters: none | 98 | Parameters: machine type identifier (KVM_VM_*) |
| 99 | Returns: a VM fd that can be used to control the new virtual machine. | 99 | Returns: a VM fd that can be used to control the new virtual machine. |
| 100 | 100 | ||
| 101 | The new VM has no virtual cpus and no memory. An mmap() of a VM fd | 101 | The new VM has no virtual cpus and no memory. An mmap() of a VM fd |
| @@ -103,6 +103,11 @@ will access the virtual machine's physical address space; offset zero · 1 unmodified line | |||
| 103 | corresponds to guest physical address zero. Use of mmap() on a VM fd | 103 | corresponds to guest physical address zero. Use of mmap() on a VM fd |
| 104 | is discouraged if userspace memory allocation (KVM_CAP_USER_MEMORY) is | 104 | is discouraged if userspace memory allocation (KVM_CAP_USER_MEMORY) is |
| 105 | available. | 105 | available. |
| 106 | You most certainly want to use 0 as machine type. | ||
| 107 | |||
| 108 | In order to create user controlled virtual machines on S390, check | ||
| 109 | KVM_CAP_S390_UCONTROL and use the flag KVM_VM_S390_UCONTROL as | ||
| 110 | privileged user (CAP_SYS_ADMIN). | ||
| 106 | 111 | ||
| 107 | 4.3 KVM_GET_MSR_INDEX_LIST | 112 | 4.3 KVM_GET_MSR_INDEX_LIST |
| 108 | 113 | ||
| @@ -213,6 +218,11 @@ allocation of vcpu ids. For example, if userspace wants · 104 unmodified lines | |||
| 213 | single-threaded guest vcpus, it should make all vcpu ids be a multiple | 218 | single-threaded guest vcpus, it should make all vcpu ids be a multiple |
| 214 | of the number of vcpus per vcore. | 219 | of the number of vcpus per vcore. |
| 215 | 220 | ||
| 221 | For virtual cpus that have been created with S390 user controlled virtual | ||
| 222 | machines, the resulting vcpu fd can be memory mapped at page offset | ||
| 223 | KVM_S390_SIE_PAGE_OFFSET in order to obtain a memory map of the virtual | ||
| 224 | cpu's hardware control block. | ||
| 225 | |||
| 216 | 4.8 KVM_GET_DIRTY_LOG (vm ioctl) | 226 | 4.8 KVM_GET_DIRTY_LOG (vm ioctl) |
| 217 | 227 | ||
| 218 | Capability: basic | 228 | Capability: basic |
| @@ -1159,6 +1169,14 @@ following flags are specified: · 940 unmodified lines | |||
| 1159 | 1169 | ||
| 1160 | /* Depends on KVM_CAP_IOMMU */ | 1170 | /* Depends on KVM_CAP_IOMMU */ |
| 1161 | #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) | 1171 | #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) |
| 1172 | /* The following two depend on KVM_CAP_PCI_2_3 */ | ||
| 1173 | #define KVM_DEV_ASSIGN_PCI_2_3 (1 << 1) | ||
| 1174 | #define KVM_DEV_ASSIGN_MASK_INTX (1 << 2) | ||
| 1175 | |||
| 1176 | If KVM_DEV_ASSIGN_PCI_2_3 is set, the kernel will manage legacy INTx interrupts | ||
| 1177 | via the PCI-2.3-compliant device-level mask, thus enable IRQ sharing with other | ||
| 1178 | assigned devices or host devices. KVM_DEV_ASSIGN_MASK_INTX specifies the | ||
| 1179 | guest's view on the INTx mask, see KVM_ASSIGN_SET_INTX_MASK for details. | ||
| 1162 | 1180 | ||
| 1163 | The KVM_DEV_ASSIGN_ENABLE_IOMMU flag is a mandatory option to ensure | 1181 | The KVM_DEV_ASSIGN_ENABLE_IOMMU flag is a mandatory option to ensure |
| 1164 | isolation of the device. Usages not specifying this flag are deprecated. | 1182 | isolation of the device. Usages not specifying this flag are deprecated. |
| @@ -1399,6 +1417,71 @@ The following flags are defined: · 234 unmodified lines | |||
| 1399 | If datamatch flag is set, the event will be signaled only if the written value | 1417 | If datamatch flag is set, the event will be signaled only if the written value |
| 1400 | to the registered address is equal to datamatch in struct kvm_ioeventfd. | 1418 | to the registered address is equal to datamatch in struct kvm_ioeventfd. |
| 1401 | 1419 | ||
| 1420 | 4.59 KVM_DIRTY_TLB | ||
| 1421 | |||
| 1422 | Capability: KVM_CAP_SW_TLB | ||
| 1423 | Architectures: ppc | ||
| 1424 | Type: vcpu ioctl | ||
| 1425 | Parameters: struct kvm_dirty_tlb (in) | ||
| 1426 | Returns: 0 on success, -1 on error | ||
| 1427 | |||
| 1428 | struct kvm_dirty_tlb { | ||
| 1429 | __u64 bitmap; | ||
| 1430 | __u32 num_dirty; | ||
| 1431 | }; | ||
| 1432 | |||
| 1433 | This must be called whenever userspace has changed an entry in the shared | ||
| 1434 | TLB, prior to calling KVM_RUN on the associated vcpu. | ||
| 1435 | |||
| 1436 | The "bitmap" field is the userspace address of an array. This array | ||
| 1437 | consists of a number of bits, equal to the total number of TLB entries as | ||
| 1438 | determined by the last successful call to KVM_CONFIG_TLB, rounded up to the | ||
| 1439 | nearest multiple of 64. | ||
| 1440 | |||
| 1441 | Each bit corresponds to one TLB entry, ordered the same as in the shared TLB | ||
| 1442 | array. | ||
| 1443 | |||
| 1444 | The array is little-endian: the bit 0 is the least significant bit of the | ||
| 1445 | first byte, bit 8 is the least significant bit of the second byte, etc. | ||
| 1446 | This avoids any complications with differing word sizes. | ||
| 1447 | |||
| 1448 | The "num_dirty" field is a performance hint for KVM to determine whether it | ||
| 1449 | should skip processing the bitmap and just invalidate everything. It must | ||
| 1450 | be set to the number of set bits in the bitmap. | ||
| 1451 | |||
| 1452 | 4.60 KVM_ASSIGN_SET_INTX_MASK | ||
| 1453 | |||
| 1454 | Capability: KVM_CAP_PCI_2_3 | ||
| 1455 | Architectures: x86 | ||
| 1456 | Type: vm ioctl | ||
| 1457 | Parameters: struct kvm_assigned_pci_dev (in) | ||
| 1458 | Returns: 0 on success, -1 on error | ||
| 1459 | |||
| 1460 | Allows userspace to mask PCI INTx interrupts from the assigned device. The | ||
| 1461 | kernel will not deliver INTx interrupts to the guest between setting and | ||
| 1462 | clearing of KVM_ASSIGN_SET_INTX_MASK via this interface. This enables use of | ||
| 1463 | and emulation of PCI 2.3 INTx disable command register behavior. | ||
| 1464 | |||
| 1465 | This may be used for both PCI 2.3 devices supporting INTx disable natively and | ||
| 1466 | older devices lacking this support. Userspace is responsible for emulating the | ||
| 1467 | read value of the INTx disable bit in the guest visible PCI command register. | ||
| 1468 | When modifying the INTx disable state, userspace should precede updating the | ||
| 1469 | physical device command register by calling this ioctl to inform the kernel of | ||
| 1470 | the new intended INTx mask state. | ||
| 1471 | |||
| 1472 | Note that the kernel uses the device INTx disable bit to internally manage the | ||
| 1473 | device interrupt state for PCI 2.3 devices. Reads of this register may | ||
| 1474 | therefore not match the expected value. Writes should always use the guest | ||
| 1475 | intended INTx disable value rather than attempting to read-copy-update the | ||
| 1476 | current physical device state. Races between user and kernel updates to the | ||
| 1477 | INTx disable bit are handled lazily in the kernel. It's possible the device | ||
| 1478 | may generate unintended interrupts, but they will not be injected into the | ||
| 1479 | guest. | ||
| 1480 | |||
| 1481 | See KVM_ASSIGN_DEV_IRQ for the data structure. The target device is specified | ||
| 1482 | by assigned_dev_id. In the flags field, only KVM_DEV_ASSIGN_MASK_INTX is | ||
| 1483 | evaluated. | ||
| 1484 | |||
| 1402 | 4.62 KVM_CREATE_SPAPR_TCE | 1485 | 4.62 KVM_CREATE_SPAPR_TCE |
| 1403 | 1486 | ||
| 1404 | Capability: KVM_CAP_SPAPR_TCE | 1487 | Capability: KVM_CAP_SPAPR_TCE |
| @@ -1491,6 +1574,101 @@ following algorithm: · 86 unmodified lines | |||
| 1491 | Some guests configure the LINT1 NMI input to cause a panic, aiding in | 1574 | Some guests configure the LINT1 NMI input to cause a panic, aiding in |
| 1492 | debugging. | 1575 | debugging. |
| 1493 | 1576 | ||
| 1577 | 4.65 KVM_S390_UCAS_MAP | ||
| 1578 | |||
| 1579 | Capability: KVM_CAP_S390_UCONTROL | ||
| 1580 | Architectures: s390 | ||
| 1581 | Type: vcpu ioctl | ||
| 1582 | Parameters: struct kvm_s390_ucas_mapping (in) | ||
| 1583 | Returns: 0 in case of success | ||
| 1584 | |||
| 1585 | The parameter is defined like this: | ||
| 1586 | struct kvm_s390_ucas_mapping { | ||
| 1587 | __u64 user_addr; | ||
| 1588 | __u64 vcpu_addr; | ||
| 1589 | __u64 length; | ||
| 1590 | }; | ||
| 1591 | |||
| 1592 | This ioctl maps the memory at "user_addr" with the length "length" to | ||
| 1593 | the vcpu's address space starting at "vcpu_addr". All parameters need to | ||
| 1594 | be alligned by 1 megabyte. | ||
| 1595 | |||
| 1596 | 4.66 KVM_S390_UCAS_UNMAP | ||
| 1597 | |||
| 1598 | Capability: KVM_CAP_S390_UCONTROL | ||
| 1599 | Architectures: s390 | ||
| 1600 | Type: vcpu ioctl | ||
| 1601 | Parameters: struct kvm_s390_ucas_mapping (in) | ||
| 1602 | Returns: 0 in case of success | ||
| 1603 | |||
| 1604 | The parameter is defined like this: | ||
| 1605 | struct kvm_s390_ucas_mapping { | ||
| 1606 | __u64 user_addr; | ||
| 1607 | __u64 vcpu_addr; | ||
| 1608 | __u64 length; | ||
| 1609 | }; | ||
| 1610 | |||
| 1611 | This ioctl unmaps the memory in the vcpu's address space starting at | ||
| 1612 | "vcpu_addr" with the length "length". The field "user_addr" is ignored. | ||
| 1613 | All parameters need to be alligned by 1 megabyte. | ||
| 1614 | |||
| 1615 | 4.67 KVM_S390_VCPU_FAULT | ||
| 1616 | |||
| 1617 | Capability: KVM_CAP_S390_UCONTROL | ||
| 1618 | Architectures: s390 | ||
| 1619 | Type: vcpu ioctl | ||
| 1620 | Parameters: vcpu absolute address (in) | ||
| 1621 | Returns: 0 in case of success | ||
| 1622 | |||
| 1623 | This call creates a page table entry on the virtual cpu's address space | ||
| 1624 | (for user controlled virtual machines) or the virtual machine's address | ||
| 1625 | space (for regular virtual machines). This only works for minor faults, | ||
| 1626 | thus it's recommended to access subject memory page via the user page | ||
| 1627 | table upfront. This is useful to handle validity intercepts for user | ||
| 1628 | controlled virtual machines to fault in the virtual cpu's lowcore pages | ||
| 1629 | prior to calling the KVM_RUN ioctl. | ||
| 1630 | |||
| 1631 | 4.68 KVM_SET_ONE_REG | ||
| 1632 | |||
| 1633 | Capability: KVM_CAP_ONE_REG | ||
| 1634 | Architectures: all | ||
| 1635 | Type: vcpu ioctl | ||
| 1636 | Parameters: struct kvm_one_reg (in) | ||
| 1637 | Returns: 0 on success, negative value on failure | ||
| 1638 | |||
| 1639 | struct kvm_one_reg { | ||
| 1640 | __u64 id; | ||
| 1641 | __u64 addr; | ||
| 1642 | }; | ||
| 1643 | |||
| 1644 | Using this ioctl, a single vcpu register can be set to a specific value | ||
| 1645 | defined by user space with the passed in struct kvm_one_reg, where id | ||
| 1646 | refers to the register identifier as described below and addr is a pointer | ||
| 1647 | to a variable with the respective size. There can be architecture agnostic | ||
| 1648 | and architecture specific registers. Each have their own range of operation | ||
| 1649 | and their own constants and width. To keep track of the implemented | ||
| 1650 | registers, find a list below: | ||
| 1651 | |||
| 1652 | Arch | Register | Width (bits) | ||
| 1653 | | | | ||
| 1654 | PPC | KVM_REG_PPC_HIOR | 64 | ||
| 1655 | |||
| 1656 | 4.69 KVM_GET_ONE_REG | ||
| 1657 | |||
| 1658 | Capability: KVM_CAP_ONE_REG | ||
| 1659 | Architectures: all | ||
| 1660 | Type: vcpu ioctl | ||
| 1661 | Parameters: struct kvm_one_reg (in and out) | ||
| 1662 | Returns: 0 on success, negative value on failure | ||
| 1663 | |||
| 1664 | This ioctl allows to receive the value of a single register implemented | ||
| 1665 | in a vcpu. The register to read is indicated by the "id" field of the | ||
| 1666 | kvm_one_reg struct passed in. On success, the register value can be found | ||
| 1667 | at the memory location pointed to by "addr". | ||
| 1668 | |||
| 1669 | The list of registers accessible using this interface is identical to the | ||
| 1670 | list in 4.64. | ||
| 1671 | |||
| 1494 | 5. The kvm_run structure | 1672 | 5. The kvm_run structure |
| 1495 | 1673 | ||
| 1496 | Application code obtains a pointer to the kvm_run structure by | 1674 | Application code obtains a pointer to the kvm_run structure by |
| @@ -1651,6 +1829,20 @@ s390 specific. · 154 unmodified lines | |||
| 1651 | 1829 | ||
| 1652 | s390 specific. | 1830 | s390 specific. |
| 1653 | 1831 | ||
| 1832 | /* KVM_EXIT_S390_UCONTROL */ | ||
| 1833 | struct { | ||
| 1834 | __u64 trans_exc_code; | ||
| 1835 | __u32 pgm_code; | ||
| 1836 | } s390_ucontrol; | ||
| 1837 | |||
| 1838 | s390 specific. A page fault has occurred for a user controlled virtual | ||
| 1839 | machine (KVM_VM_S390_UNCONTROL) on it's host page table that cannot be | ||
| 1840 | resolved by the kernel. | ||
| 1841 | The program code and the translation exception code that were placed | ||
| 1842 | in the cpu's lowcore are presented here as defined by the z Architecture | ||
| 1843 | Principles of Operation Book in the Chapter for Dynamic Address Translation | ||
| 1844 | (DAT) | ||
| 1845 | |||
| 1654 | /* KVM_EXIT_DCR */ | 1846 | /* KVM_EXIT_DCR */ |
| 1655 | struct { | 1847 | struct { |
| 1656 | __u32 dcrn; | 1848 | __u32 dcrn; |
| @@ -1693,6 +1885,29 @@ developer registration required to access it). · 36 unmodified lines | |||
| 1693 | /* Fix the size of the union. */ | 1885 | /* Fix the size of the union. */ |
| 1694 | char padding[256]; | 1886 | char padding[256]; |
| 1695 | }; | 1887 | }; |
| 1888 | |||
| 1889 | /* | ||
| 1890 | * shared registers between kvm and userspace. | ||
| 1891 | * kvm_valid_regs specifies the register classes set by the host | ||
| 1892 | * kvm_dirty_regs specified the register classes dirtied by userspace | ||
| 1893 | * struct kvm_sync_regs is architecture specific, as well as the | ||
| 1894 | * bits for kvm_valid_regs and kvm_dirty_regs | ||
| 1895 | */ | ||
| 1896 | __u64 kvm_valid_regs; | ||
| 1897 | __u64 kvm_dirty_regs; | ||
| 1898 | union { | ||
| 1899 | struct kvm_sync_regs regs; | ||
| 1900 | char padding[1024]; | ||
| 1901 | } s; | ||
| 1902 | |||
| 1903 | If KVM_CAP_SYNC_REGS is defined, these fields allow userspace to access | ||
| 1904 | certain guest registers without having to call SET/GET_*REGS. Thus we can | ||
| 1905 | avoid some system call overhead if userspace has to handle the exit. | ||
| 1906 | Userspace can query the validity of the structure by checking | ||
| 1907 | kvm_valid_regs for specific bits. These bits are architecture specific | ||
| 1908 | and usually define the validity of a groups of registers. (e.g. one bit | ||
| 1909 | for general purpose registers) | ||
| 1910 | |||
| 1696 | }; | 1911 | }; |
| 1697 | 1912 | ||
| 1698 | 6. Capabilities that can be enabled | 1913 | 6. Capabilities that can be enabled |
| @@ -1741,3 +1956,45 @@ HTAB address part of SDR1 contains an HVA instead of a GPA, as PAPR keeps the · 42 unmodified lines | |||
| 1741 | HTAB invisible to the guest. | 1956 | HTAB invisible to the guest. |
| 1742 | 1957 | ||
| 1743 | When this capability is enabled, KVM_EXIT_PAPR_HCALL can occur. | 1958 | When this capability is enabled, KVM_EXIT_PAPR_HCALL can occur. |
| 1959 | |||
| 1960 | 6.3 KVM_CAP_SW_TLB | ||
| 1961 | |||
| 1962 | Architectures: ppc | ||
| 1963 | Parameters: args[0] is the address of a struct kvm_config_tlb | ||
| 1964 | Returns: 0 on success; -1 on error | ||
| 1965 | |||
| 1966 | struct kvm_config_tlb { | ||
| 1967 | __u64 params; | ||
| 1968 | __u64 array; | ||
| 1969 | __u32 mmu_type; | ||
| 1970 | __u32 array_len; | ||
| 1971 | }; | ||
| 1972 | |||
| 1973 | Configures the virtual CPU's TLB array, establishing a shared memory area | ||
| 1974 | between userspace and KVM. The "params" and "array" fields are userspace | ||
| 1975 | addresses of mmu-type-specific data structures. The "array_len" field is an | ||
| 1976 | safety mechanism, and should be set to the size in bytes of the memory that | ||
| 1977 | userspace has reserved for the array. It must be at least the size dictated | ||
| 1978 | by "mmu_type" and "params". | ||
| 1979 | |||
| 1980 | While KVM_RUN is active, the shared region is under control of KVM. Its | ||
| 1981 | contents are undefined, and any modification by userspace results in | ||
| 1982 | boundedly undefined behavior. | ||
| 1983 | |||
| 1984 | On return from KVM_RUN, the shared region will reflect the current state of | ||
| 1985 | the guest's TLB. If userspace makes any changes, it must call KVM_DIRTY_TLB | ||
| 1986 | to tell KVM which entries have been changed, prior to calling KVM_RUN again | ||
| 1987 | on this vcpu. | ||
| 1988 | |||
| 1989 | For mmu types KVM_MMU_FSL_BOOKE_NOHV and KVM_MMU_FSL_BOOKE_HV: | ||
| 1990 | - The "params" field is of type "struct kvm_book3e_206_tlb_params". | ||
| 1991 | - The "array" field points to an array of type "struct | ||
| 1992 | kvm_book3e_206_tlb_entry". | ||
| 1993 | - The array consists of all entries in the first TLB, followed by all | ||
| 1994 | entries in the second TLB. | ||
| 1995 | - Within a TLB, entries are ordered first by increasing set number. Within a | ||
| 1996 | set, entries are ordered by way (increasing ESEL). | ||
| 1997 | - The hash for determining set number in TLB0 is: (MAS2 >> 12) & (num_sets - 1) | ||
| 1998 | where "num_sets" is the tlb_sizes[] value divided by the tlb_ways[] value. | ||
| 1999 | - The tsize field of mas1 shall be set to 4K on TLB0, even though the | ||
| 2000 | hardware ignores this value for TLB0. | ||
| @@ -81,28 +81,8 @@ additional registers to the magic page. If you add fields to the magic page, · 80 unmodified lines | |||
| 81 | also define a new hypercall feature to indicate that the host can give you more | 81 | also define a new hypercall feature to indicate that the host can give you more |
| 82 | registers. Only if the host supports the additional features, make use of them. | 82 | registers. Only if the host supports the additional features, make use of them. |
| 83 | 83 | ||
| 84 | The magic page has the following layout as described in | 84 | The magic page layout is described by struct kvm_vcpu_arch_shared |
| 85 | arch/powerpc/include/asm/kvm_para.h: | 85 | in arch/powerpc/include/asm/kvm_para.h. |
| 86 | |||
| 87 | struct kvm_vcpu_arch_shared { | ||
| 88 | __u64 scratch1; | ||
| 89 | __u64 scratch2; | ||
| 90 | __u64 scratch3; | ||
| 91 | __u64 critical; /* Guest may not get interrupts if == r1 */ | ||
| 92 | __u64 sprg0; | ||
| 93 | __u64 sprg1; | ||
| 94 | __u64 sprg2; | ||
| 95 | __u64 sprg3; | ||
| 96 | __u64 srr0; | ||
| 97 | __u64 srr1; | ||
| 98 | __u64 dar; | ||
| 99 | __u64 msr; | ||
| 100 | __u32 dsisr; | ||
| 101 | __u32 int_pending; /* Tells the guest if we have an interrupt */ | ||
| 102 | }; | ||
| 103 | |||
| 104 | Additions to the page must only occur at the end. Struct fields are always 32 | ||
| 105 | or 64 bit aligned, depending on them being 32 or 64 bit wide respectively. | ||
| 106 | 86 | ||
| 107 | Magic page features | 87 | Magic page features |
| 108 | =================== | 88 | =================== |
| @@ -1,8 +0,0 @@ | |||
| 1 | # kbuild trick to avoid linker error. Can be omitted if a module is built. | ||
| 2 | obj- := dummy.o | ||
| 3 | |||
| 4 | # List of programs to build | ||
| 5 | hostprogs-y := page-types hugepage-mmap hugepage-shm map_hugetlb | ||
| 6 | |||
| 7 | # Tell kbuild to always build the programs | ||
| 8 | always := $(hostprogs-y) | ||
| @@ -1,19 +0,0 @@ | |||
| 1 | 00-INDEX | ||
| 2 | - this file. | ||
| 3 | convert_drivers_to_kernel_api.txt | ||
| 4 | - how-to for converting old watchdog drivers to the new kernel API. | ||
| 5 | hpwdt.txt | ||
| 6 | - information on the HP iLO2 NMI watchdog | ||
| 7 | pcwd-watchdog.txt | ||
| 8 | - documentation for Berkshire Products PC Watchdog ISA cards. | ||
| 9 | src/ | ||
| 10 | - directory holding watchdog related example programs. | ||
| 11 | watchdog-api.txt | ||
| 12 | - description of the Linux Watchdog driver API. | ||
| 13 | watchdog-kernel-api.txt | ||
| 14 | - description of the Linux WatchDog Timer Driver Core kernel API. | ||
| 15 | watchdog-parameters.txt | ||
| 16 | - information on driver parameters (for drivers other than | ||
| 17 | the ones that have driver-specific files here) | ||
| 18 | wdt.txt | ||
| 19 | - description of the Watchdog Timer Interfaces for Linux. | ||
| @@ -59,6 +59,10 @@ Here is a overview of the functions and probably needed actions: · 58 unmodified lines | |||
| 59 | WDIOC_GETTIMEOUT: | 59 | WDIOC_GETTIMEOUT: |
| 60 | No preparations needed | 60 | No preparations needed |
| 61 | 61 | ||
| 62 | WDIOC_GETTIMELEFT: | ||
| 63 | It needs get_timeleft() callback to be defined. Otherwise it | ||
| 64 | will return EOPNOTSUPP | ||
| 65 | |||
| 62 | Other IOCTLs can be served using the ioctl-callback. Note that this is mainly | 66 | Other IOCTLs can be served using the ioctl-callback. Note that this is mainly |
| 63 | intended for porting old drivers; new drivers should not invent private IOCTLs. | 67 | intended for porting old drivers; new drivers should not invent private IOCTLs. |
| 64 | Private IOCTLs are processed first. When the callback returns with | 68 | Private IOCTLs are processed first. When the callback returns with |
| @@ -1,6 +1,6 @@ | |||
| 1 | The Linux WatchDog Timer Driver Core kernel API. | 1 | The Linux WatchDog Timer Driver Core kernel API. |
| 2 | =============================================== | 2 | =============================================== |
| 3 | Last reviewed: 29-Nov-2011 | 3 | Last reviewed: 16-Mar-2012 |
| 4 | 4 | ||
| 5 | Wim Van Sebroeck <wim@iguana.be> | 5 | Wim Van Sebroeck <wim@iguana.be> |
| 6 | 6 | ||
| @@ -77,6 +77,7 @@ struct watchdog_ops { · 70 unmodified lines | |||
| 77 | int (*ping)(struct watchdog_device *); | 77 | int (*ping)(struct watchdog_device *); |
| 78 | unsigned int (*status)(struct watchdog_device *); | 78 | unsigned int (*status)(struct watchdog_device *); |
| 79 | int (*set_timeout)(struct watchdog_device *, unsigned int); | 79 | int (*set_timeout)(struct watchdog_device *, unsigned int); |
| 80 | unsigned int (*get_timeleft)(struct watchdog_device *); | ||
| 80 | long (*ioctl)(struct watchdog_device *, unsigned int, unsigned long); | 81 | long (*ioctl)(struct watchdog_device *, unsigned int, unsigned long); |
| 81 | }; | 82 | }; |
| 82 | 83 | ||
| @@ -117,11 +118,13 @@ they are supported. These optional routines/operations are: · 34 unmodified lines | |||
| 117 | status of the device is reported with watchdog WDIOF_* status flags/bits. | 118 | status of the device is reported with watchdog WDIOF_* status flags/bits. |
| 118 | * set_timeout: this routine checks and changes the timeout of the watchdog | 119 | * set_timeout: this routine checks and changes the timeout of the watchdog |
| 119 | timer device. It returns 0 on success, -EINVAL for "parameter out of range" | 120 | timer device. It returns 0 on success, -EINVAL for "parameter out of range" |
| 120 | and -EIO for "could not write value to the watchdog". On success the timeout | 121 | and -EIO for "could not write value to the watchdog". On success this |
| 121 | value of the watchdog_device will be changed to the value that was just used | 122 | routine should set the timeout value of the watchdog_device to the |
| 122 | to re-program the watchdog timer device. | 123 | achieved timeout value (which may be different from the requested one |
| 124 | because the watchdog does not necessarily has a 1 second resolution). | ||
| 123 | (Note: the WDIOF_SETTIMEOUT needs to be set in the options field of the | 125 | (Note: the WDIOF_SETTIMEOUT needs to be set in the options field of the |
| 124 | watchdog's info structure). | 126 | watchdog's info structure). |
| 127 | * get_timeleft: this routines returns the time that's left before a reset. | ||
| 125 | * ioctl: if this routine is present then it will be called first before we do | 128 | * ioctl: if this routine is present then it will be called first before we do |
| 126 | our own internal ioctl call handling. This routine should return -ENOIOCTLCMD | 129 | our own internal ioctl call handling. This routine should return -ENOIOCTLCMD |
| 127 | if a command is not supported. The parameters that are passed to the ioctl | 130 | if a command is not supported. The parameters that are passed to the ioctl |
| @@ -228,7 +228,7 @@ M: Len Brown <lenb@kernel.org> · 227 unmodified lines | |||
| 228 | L: linux-acpi@vger.kernel.org | 228 | L: linux-acpi@vger.kernel.org |
| 229 | W: http://www.lesswatts.org/projects/acpi/ | 229 | W: http://www.lesswatts.org/projects/acpi/ |
| 230 | Q: http://patchwork.kernel.org/project/linux-acpi/list/ | 230 | Q: http://patchwork.kernel.org/project/linux-acpi/list/ |
| 231 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git | 231 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux |
| 232 | S: Supported | 232 | S: Supported |
| 233 | F: drivers/acpi/ | 233 | F: drivers/acpi/ |
| 234 | F: drivers/pnp/pnpacpi/ | 234 | F: drivers/pnp/pnpacpi/ |
| @@ -504,7 +504,7 @@ F: arch/x86/include/asm/geode.h · 269 unmodified lines | |||
| 504 | AMD IOMMU (AMD-VI) | 504 | AMD IOMMU (AMD-VI) |
| 505 | M: Joerg Roedel <joerg.roedel@amd.com> | 505 | M: Joerg Roedel <joerg.roedel@amd.com> |
| 506 | L: iommu@lists.linux-foundation.org | 506 | L: iommu@lists.linux-foundation.org |
| 507 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git | 507 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git |
| 508 | S: Supported | 508 | S: Supported |
| 509 | F: drivers/iommu/amd_iommu*.[ch] | 509 | F: drivers/iommu/amd_iommu*.[ch] |
| 510 | F: include/linux/amd-iommu.h | 510 | F: include/linux/amd-iommu.h |
| @@ -786,7 +786,6 @@ M: Sascha Hauer <kernel@pengutronix.de> · 275 unmodified lines | |||
| 786 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 786 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
| 787 | S: Maintained | 787 | S: Maintained |
| 788 | T: git git://git.pengutronix.de/git/imx/linux-2.6.git | 788 | T: git git://git.pengutronix.de/git/imx/linux-2.6.git |
| 789 | F: arch/arm/mach-mx*/ | ||
| 790 | F: arch/arm/mach-imx/ | 789 | F: arch/arm/mach-imx/ |
| 791 | F: arch/arm/plat-mxc/ | 790 | F: arch/arm/plat-mxc/ |
| 792 | 791 | ||
| @@ -816,9 +815,12 @@ S: Maintained · 23 unmodified lines | |||
| 816 | 815 | ||
| 817 | ARM/H4700 (HP IPAQ HX4700) MACHINE SUPPORT | 816 | ARM/H4700 (HP IPAQ HX4700) MACHINE SUPPORT |
| 818 | M: Philipp Zabel <philipp.zabel@gmail.com> | 817 | M: Philipp Zabel <philipp.zabel@gmail.com> |
| 818 | M: Paul Parsons <lost.distance@yahoo.com> | ||
| 819 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||
| 819 | S: Maintained | 820 | S: Maintained |
| 820 | F: arch/arm/mach-pxa/hx4700.c | 821 | F: arch/arm/mach-pxa/hx4700.c |
| 821 | F: arch/arm/mach-pxa/include/mach/hx4700.h | 822 | F: arch/arm/mach-pxa/include/mach/hx4700.h |
| 823 | F: sound/soc/pxa/hx4700.c | ||
| 822 | 824 | ||
| 823 | ARM/HP JORNADA 7XX MACHINE SUPPORT | 825 | ARM/HP JORNADA 7XX MACHINE SUPPORT |
| 824 | M: Kristoffer Ericson <kristoffer.ericson@gmail.com> | 826 | M: Kristoffer Ericson <kristoffer.ericson@gmail.com> |
| @@ -1249,7 +1251,6 @@ ATHEROS ATH5K WIRELESS DRIVER · 424 unmodified lines | |||
| 1249 | M: Jiri Slaby <jirislaby@gmail.com> | 1251 | M: Jiri Slaby <jirislaby@gmail.com> |
| 1250 | M: Nick Kossifidis <mickflemm@gmail.com> | 1252 | M: Nick Kossifidis <mickflemm@gmail.com> |
| 1251 | M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com> | 1253 | M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com> |
| 1252 | M: Bob Copeland <me@bobcopeland.com> | ||
| 1253 | L: linux-wireless@vger.kernel.org | 1254 | L: linux-wireless@vger.kernel.org |
| 1254 | L: ath5k-devel@lists.ath5k.org | 1255 | L: ath5k-devel@lists.ath5k.org |
| 1255 | W: http://wireless.kernel.org/en/users/Drivers/ath5k | 1256 | W: http://wireless.kernel.org/en/users/Drivers/ath5k |
| @@ -1520,8 +1521,8 @@ M: Gustavo Padovan <gustavo@padovan.org> · 264 unmodified lines | |||
| 1520 | M: Johan Hedberg <johan.hedberg@gmail.com> | 1521 | M: Johan Hedberg <johan.hedberg@gmail.com> |
| 1521 | L: linux-bluetooth@vger.kernel.org | 1522 | L: linux-bluetooth@vger.kernel.org |
| 1522 | W: http://www.bluez.org/ | 1523 | W: http://www.bluez.org/ |
| 1523 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth.git | 1524 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git |
| 1524 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/jh/bluetooth.git | 1525 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git |
| 1525 | S: Maintained | 1526 | S: Maintained |
| 1526 | F: drivers/bluetooth/ | 1527 | F: drivers/bluetooth/ |
| 1527 | 1528 | ||
| @@ -1531,8 +1532,8 @@ M: Gustavo Padovan <gustavo@padovan.org> · 3 unmodified lines | |||
| 1531 | M: Johan Hedberg <johan.hedberg@gmail.com> | 1532 | M: Johan Hedberg <johan.hedberg@gmail.com> |
| 1532 | L: linux-bluetooth@vger.kernel.org | 1533 | L: linux-bluetooth@vger.kernel.org |
| 1533 | W: http://www.bluez.org/ | 1534 | W: http://www.bluez.org/ |
| 1534 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth.git | 1535 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git |
| 1535 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/jh/bluetooth.git | 1536 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git |
| 1536 | S: Maintained | 1537 | S: Maintained |
| 1537 | F: net/bluetooth/ | 1538 | F: net/bluetooth/ |
| 1538 | F: include/net/bluetooth/ | 1539 | F: include/net/bluetooth/ |
| @@ -1938,7 +1939,7 @@ F: drivers/connector/ · 399 unmodified lines | |||
| 1938 | 1939 | ||
| 1939 | CONTROL GROUPS (CGROUPS) | 1940 | CONTROL GROUPS (CGROUPS) |
| 1940 | M: Tejun Heo <tj@kernel.org> | 1941 | M: Tejun Heo <tj@kernel.org> |
| 1941 | M: Li Zefan <lizf@cn.fujitsu.com> | 1942 | M: Li Zefan <lizefan@huawei.com> |
| 1942 | L: containers@lists.linux-foundation.org | 1943 | L: containers@lists.linux-foundation.org |
| 1943 | L: cgroups@vger.kernel.org | 1944 | L: cgroups@vger.kernel.org |
| 1944 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git | 1945 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git |
| @@ -2223,13 +2224,16 @@ W: http://lanana.org/docs/device-list/index.html · 278 unmodified lines | |||
| 2223 | S: Maintained | 2224 | S: Maintained |
| 2224 | 2225 | ||
| 2225 | DEVICE-MAPPER (LVM) | 2226 | DEVICE-MAPPER (LVM) |
| 2226 | P: Alasdair Kergon | 2227 | M: Alasdair Kergon <agk@redhat.com> |
| 2228 | M: dm-devel@redhat.com | ||
| 2227 | L: dm-devel@redhat.com | 2229 | L: dm-devel@redhat.com |
| 2228 | W: http://sources.redhat.com/dm | 2230 | W: http://sources.redhat.com/dm |
| 2229 | Q: http://patchwork.kernel.org/project/dm-devel/list/ | 2231 | Q: http://patchwork.kernel.org/project/dm-devel/list/ |
| 2232 | T: quilt http://people.redhat.com/agk/patches/linux/editing/ | ||
| 2230 | S: Maintained | 2233 | S: Maintained |
| 2231 | F: Documentation/device-mapper/ | 2234 | F: Documentation/device-mapper/ |
| 2232 | F: drivers/md/dm* | 2235 | F: drivers/md/dm* |
| 2236 | F: drivers/md/persistent-data/ | ||
| 2233 | F: include/linux/device-mapper.h | 2237 | F: include/linux/device-mapper.h |
| 2234 | F: include/linux/dm-*.h | 2238 | F: include/linux/dm-*.h |
| 2235 | 2239 | ||
| @@ -2446,17 +2450,17 @@ F: fs/ecryptfs/ · 210 unmodified lines | |||
| 2446 | 2450 | ||
| 2447 | EDAC-CORE | 2451 | EDAC-CORE |
| 2448 | M: Doug Thompson <dougthompson@xmission.com> | 2452 | M: Doug Thompson <dougthompson@xmission.com> |
| 2449 | L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | 2453 | L: linux-edac@vger.kernel.org |
| 2450 | W: bluesmoke.sourceforge.net | 2454 | W: bluesmoke.sourceforge.net |
| 2451 | S: Supported | 2455 | S: Supported |
| 2452 | F: Documentation/edac.txt | 2456 | F: Documentation/edac.txt |
| 2453 | F: drivers/edac/edac_* | 2457 | F: drivers/edac/ |
| 2454 | F: include/linux/edac.h | 2458 | F: include/linux/edac.h |
| 2455 | 2459 | ||
| 2456 | EDAC-AMD64 | 2460 | EDAC-AMD64 |
| 2457 | M: Doug Thompson <dougthompson@xmission.com> | 2461 | M: Doug Thompson <dougthompson@xmission.com> |
| 2458 | M: Borislav Petkov <borislav.petkov@amd.com> | 2462 | M: Borislav Petkov <borislav.petkov@amd.com> |
| 2459 | L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | 2463 | L: linux-edac@vger.kernel.org |
| 2460 | W: bluesmoke.sourceforge.net | 2464 | W: bluesmoke.sourceforge.net |
| 2461 | S: Supported | 2465 | S: Supported |
| 2462 | F: drivers/edac/amd64_edac* | 2466 | F: drivers/edac/amd64_edac* |
| @@ -2464,35 +2468,35 @@ F: drivers/edac/amd64_edac* · 1 unmodified line | |||
| 2464 | EDAC-E752X | 2468 | EDAC-E752X |
| 2465 | M: Mark Gross <mark.gross@intel.com> | 2469 | M: Mark Gross <mark.gross@intel.com> |
| 2466 | M: Doug Thompson <dougthompson@xmission.com> | 2470 | M: Doug Thompson <dougthompson@xmission.com> |
| 2467 | L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | 2471 | L: linux-edac@vger.kernel.org |
| 2468 | W: bluesmoke.sourceforge.net | 2472 | W: bluesmoke.sourceforge.net |
| 2469 | S: Maintained | 2473 | S: Maintained |
| 2470 | F: drivers/edac/e752x_edac.c | 2474 | F: drivers/edac/e752x_edac.c |
| 2471 | 2475 | ||
| 2472 | EDAC-E7XXX | 2476 | EDAC-E7XXX |
| 2473 | M: Doug Thompson <dougthompson@xmission.com> | 2477 | M: Doug Thompson <dougthompson@xmission.com> |
| 2474 | L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | 2478 | L: linux-edac@vger.kernel.org |
| 2475 | W: bluesmoke.sourceforge.net | 2479 | W: bluesmoke.sourceforge.net |
| 2476 | S: Maintained | 2480 | S: Maintained |
| 2477 | F: drivers/edac/e7xxx_edac.c | 2481 | F: drivers/edac/e7xxx_edac.c |
| 2478 | 2482 | ||
| 2479 | EDAC-I82443BXGX | 2483 | EDAC-I82443BXGX |
| 2480 | M: Tim Small <tim@buttersideup.com> | 2484 | M: Tim Small <tim@buttersideup.com> |
| 2481 | L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | 2485 | L: linux-edac@vger.kernel.org |
| 2482 | W: bluesmoke.sourceforge.net | 2486 | W: bluesmoke.sourceforge.net |
| 2483 | S: Maintained | 2487 | S: Maintained |
| 2484 | F: drivers/edac/i82443bxgx_edac.c | 2488 | F: drivers/edac/i82443bxgx_edac.c |
| 2485 | 2489 | ||
| 2486 | EDAC-I3000 | 2490 | EDAC-I3000 |
| 2487 | M: Jason Uhlenkott <juhlenko@akamai.com> | 2491 | M: Jason Uhlenkott <juhlenko@akamai.com> |
| 2488 | L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | 2492 | L: linux-edac@vger.kernel.org |
| 2489 | W: bluesmoke.sourceforge.net | 2493 | W: bluesmoke.sourceforge.net |
| 2490 | S: Maintained | 2494 | S: Maintained |
| 2491 | F: drivers/edac/i3000_edac.c | 2495 | F: drivers/edac/i3000_edac.c |
| 2492 | 2496 | ||
| 2493 | EDAC-I5000 | 2497 | EDAC-I5000 |
| 2494 | M: Doug Thompson <dougthompson@xmission.com> | 2498 | M: Doug Thompson <dougthompson@xmission.com> |
| 2495 | L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | 2499 | L: linux-edac@vger.kernel.org |
| 2496 | W: bluesmoke.sourceforge.net | 2500 | W: bluesmoke.sourceforge.net |
| 2497 | S: Maintained | 2501 | S: Maintained |
| 2498 | F: drivers/edac/i5000_edac.c | 2502 | F: drivers/edac/i5000_edac.c |
| @@ -2521,21 +2525,21 @@ F: drivers/edac/i7core_edac.c · 22 unmodified lines | |||
| 2521 | EDAC-I82975X | 2525 | EDAC-I82975X |
| 2522 | M: Ranganathan Desikan <ravi@jetztechnologies.com> | 2526 | M: Ranganathan Desikan <ravi@jetztechnologies.com> |
| 2523 | M: "Arvind R." <arvino55@gmail.com> | 2527 | M: "Arvind R." <arvino55@gmail.com> |
| 2524 | L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | 2528 | L: linux-edac@vger.kernel.org |
| 2525 | W: bluesmoke.sourceforge.net | 2529 | W: bluesmoke.sourceforge.net |
| 2526 | S: Maintained | 2530 | S: Maintained |
| 2527 | F: drivers/edac/i82975x_edac.c | 2531 | F: drivers/edac/i82975x_edac.c |
| 2528 | 2532 | ||
| 2529 | EDAC-PASEMI | 2533 | EDAC-PASEMI |
| 2530 | M: Egor Martovetsky <egor@pasemi.com> | 2534 | M: Egor Martovetsky <egor@pasemi.com> |
| 2531 | L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | 2535 | L: linux-edac@vger.kernel.org |
| 2532 | W: bluesmoke.sourceforge.net | 2536 | W: bluesmoke.sourceforge.net |
| 2533 | S: Maintained | 2537 | S: Maintained |
| 2534 | F: drivers/edac/pasemi_edac.c | 2538 | F: drivers/edac/pasemi_edac.c |
| 2535 | 2539 | ||
| 2536 | EDAC-R82600 | 2540 | EDAC-R82600 |
| 2537 | M: Tim Small <tim@buttersideup.com> | 2541 | M: Tim Small <tim@buttersideup.com> |
| 2538 | L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | 2542 | L: linux-edac@vger.kernel.org |
| 2539 | W: bluesmoke.sourceforge.net | 2543 | W: bluesmoke.sourceforge.net |
| 2540 | S: Maintained | 2544 | S: Maintained |
| 2541 | F: drivers/edac/r82600_edac.c | 2545 | F: drivers/edac/r82600_edac.c |
| @@ -3559,17 +3563,13 @@ L: linux-pm@vger.kernel.org · 1017 unmodified lines | |||
| 3559 | S: Supported | 3563 | S: Supported |
| 3560 | F: arch/x86/platform/mrst/pmu.* | 3564 | F: arch/x86/platform/mrst/pmu.* |
| 3561 | 3565 | ||
| 3562 | INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT | 3566 | INTEL PRO/WIRELESS 2100, 2200BG, 2915ABG NETWORK CONNECTION SUPPORT |
| 3567 | M: Stanislav Yakovlev <stas.yakovlev@gmail.com> | ||
| 3563 | L: linux-wireless@vger.kernel.org | 3568 | L: linux-wireless@vger.kernel.org |
| 3564 | S: Orphan | 3569 | S: Maintained |
| 3565 | F: Documentation/networking/README.ipw2100 | 3570 | F: Documentation/networking/README.ipw2100 |
| 3566 | F: drivers/net/wireless/ipw2x00/ipw2100.* | ||
| 3567 | |||
| 3568 | INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT | ||
| 3569 | L: linux-wireless@vger.kernel.org | ||
| 3570 | S: Orphan | ||
| 3571 | F: Documentation/networking/README.ipw2200 | 3571 | F: Documentation/networking/README.ipw2200 |
| 3572 | F: drivers/net/wireless/ipw2x00/ipw2200.* | 3572 | F: drivers/net/wireless/ipw2x00/ |
| 3573 | 3573 | ||
| 3574 | INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT) | 3574 | INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT) |
| 3575 | M: Joseph Cihula <joseph.cihula@intel.com> | 3575 | M: Joseph Cihula <joseph.cihula@intel.com> |
| @@ -4316,6 +4316,13 @@ W: http://www.kernel.org/doc/man-pages · 740 unmodified lines | |||
| 4316 | L: linux-man@vger.kernel.org | 4316 | L: linux-man@vger.kernel.org |
| 4317 | S: Maintained | 4317 | S: Maintained |
| 4318 | 4318 | ||
| 4319 | MARVELL GIGABIT ETHERNET DRIVERS (skge/sky2) | ||
| 4320 | M: Mirko Lindner <mlindner@marvell.com> | ||
| 4321 | M: Stephen Hemminger <shemminger@vyatta.com> | ||
| 4322 | L: netdev@vger.kernel.org | ||
| 4323 | S: Maintained | ||
| 4324 | F: drivers/net/ethernet/marvell/sk* | ||
| 4325 | |||
| 4319 | MARVELL LIBERTAS WIRELESS DRIVER | 4326 | MARVELL LIBERTAS WIRELESS DRIVER |
| 4320 | M: Dan Williams <dcbw@redhat.com> | 4327 | M: Dan Williams <dcbw@redhat.com> |
| 4321 | L: libertas-dev@lists.infradead.org | 4328 | L: libertas-dev@lists.infradead.org |
| @@ -4346,12 +4353,6 @@ M: Nicolas Pitre <nico@fluxnic.net> · 24 unmodified lines | |||
| 4346 | S: Odd Fixes | 4353 | S: Odd Fixes |
| 4347 | F: drivers/mmc/host/mvsdio.* | 4354 | F: drivers/mmc/host/mvsdio.* |
| 4348 | 4355 | ||
| 4349 | MARVELL YUKON / SYSKONNECT DRIVER | ||
| 4350 | M: Mirko Lindner <mlindner@syskonnect.de> | ||
| 4351 | M: Ralph Roesler <rroesler@syskonnect.de> | ||
| 4352 | W: http://www.syskonnect.com | ||
| 4353 | S: Supported | ||
| 4354 | |||
| 4355 | MATROX FRAMEBUFFER DRIVER | 4356 | MATROX FRAMEBUFFER DRIVER |
| 4356 | L: linux-fbdev@vger.kernel.org | 4357 | L: linux-fbdev@vger.kernel.org |
| 4357 | S: Orphan | 4358 | S: Orphan |
| @@ -4539,8 +4540,7 @@ S: Supported · 181 unmodified lines | |||
| 4539 | F: drivers/net/ethernet/myricom/myri10ge/ | 4540 | F: drivers/net/ethernet/myricom/myri10ge/ |
| 4540 | 4541 | ||
| 4541 | NATSEMI ETHERNET DRIVER (DP8381x) | 4542 | NATSEMI ETHERNET DRIVER (DP8381x) |
| 4542 | M: Tim Hockin <thockin@hockin.org> | 4543 | S: Orphan |
| 4543 | S: Maintained | ||
| 4544 | F: drivers/net/ethernet/natsemi/natsemi.c | 4544 | F: drivers/net/ethernet/natsemi/natsemi.c |
| 4545 | 4545 | ||
| 4546 | NATIVE INSTRUMENTS USB SOUND INTERFACE DRIVER | 4546 | NATIVE INSTRUMENTS USB SOUND INTERFACE DRIVER |
| @@ -4809,6 +4809,7 @@ F: arch/arm/mach-omap2/clockdomain2xxx_3xxx.c · 262 unmodified lines | |||
| 4809 | F: arch/arm/mach-omap2/clockdomain44xx.c | 4809 | F: arch/arm/mach-omap2/clockdomain44xx.c |
| 4810 | 4810 | ||
| 4811 | OMAP AUDIO SUPPORT | 4811 | OMAP AUDIO SUPPORT |
| 4812 | M: Peter Ujfalusi <peter.ujfalusi@ti.com> | ||
| 4812 | M: Jarkko Nikula <jarkko.nikula@bitmer.com> | 4813 | M: Jarkko Nikula <jarkko.nikula@bitmer.com> |
| 4813 | L: alsa-devel@alsa-project.org (subscribers-only) | 4814 | L: alsa-devel@alsa-project.org (subscribers-only) |
| 4814 | L: linux-omap@vger.kernel.org | 4815 | L: linux-omap@vger.kernel.org |
| @@ -5123,6 +5124,11 @@ F: drivers/i2c/busses/i2c-pca-* · 308 unmodified lines | |||
| 5123 | F: include/linux/i2c-algo-pca.h | 5124 | F: include/linux/i2c-algo-pca.h |
| 5124 | F: include/linux/i2c-pca-platform.h | 5125 | F: include/linux/i2c-pca-platform.h |
| 5125 | 5126 | ||
| 5127 | PCDP - PRIMARY CONSOLE AND DEBUG PORT | ||
| 5128 | M: Khalid Aziz <khalid.aziz@hp.com> | ||
| 5129 | S: Maintained | ||
| 5130 | F: drivers/firmware/pcdp.* | ||
| 5131 | |||
| 5126 | PCI ERROR RECOVERY | 5132 | PCI ERROR RECOVERY |
| 5127 | M: Linas Vepstas <linasvepstas@gmail.com> | 5133 | M: Linas Vepstas <linasvepstas@gmail.com> |
| 5128 | L: linux-pci@vger.kernel.org | 5134 | L: linux-pci@vger.kernel.org |
| @@ -5131,7 +5137,7 @@ F: Documentation/PCI/pci-error-recovery.txt · 2 unmodified lines | |||
| 5131 | F: Documentation/powerpc/eeh-pci-error-recovery.txt | 5137 | F: Documentation/powerpc/eeh-pci-error-recovery.txt |
| 5132 | 5138 | ||
| 5133 | PCI SUBSYSTEM | 5139 | PCI SUBSYSTEM |
| 5134 | M: Jesse Barnes <jbarnes@virtuousgeek.org> | 5140 | M: Bjorn Helgaas <bhelgaas@google.com> |
| 5135 | L: linux-pci@vger.kernel.org | 5141 | L: linux-pci@vger.kernel.org |
| 5136 | Q: http://patchwork.kernel.org/project/linux-pci/list/ | 5142 | Q: http://patchwork.kernel.org/project/linux-pci/list/ |
| 5137 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci.git | 5143 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci.git |
| @@ -5141,7 +5147,7 @@ F: drivers/pci/ · 3 unmodified lines | |||
| 5141 | F: include/linux/pci* | 5147 | F: include/linux/pci* |
| 5142 | 5148 | ||
| 5143 | PCI HOTPLUG | 5149 | PCI HOTPLUG |
| 5144 | M: Jesse Barnes <jbarnes@virtuousgeek.org> | 5150 | M: Bjorn Helgaas <bhelgaas@google.com> |
| 5145 | L: linux-pci@vger.kernel.org | 5151 | L: linux-pci@vger.kernel.org |
| 5146 | S: Supported | 5152 | S: Supported |
| 5147 | F: drivers/pci/hotplug | 5153 | F: drivers/pci/hotplug |
| @@ -5187,7 +5193,7 @@ F: kernel/delayacct.c · 39 unmodified lines | |||
| 5187 | PERFORMANCE EVENTS SUBSYSTEM | 5193 | PERFORMANCE EVENTS SUBSYSTEM |
| 5188 | M: Peter Zijlstra <a.p.zijlstra@chello.nl> | 5194 | M: Peter Zijlstra <a.p.zijlstra@chello.nl> |
| 5189 | M: Paul Mackerras <paulus@samba.org> | 5195 | M: Paul Mackerras <paulus@samba.org> |
| 5190 | M: Ingo Molnar <mingo@elte.hu> | 5196 | M: Ingo Molnar <mingo@redhat.com> |
| 5191 | M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> | 5197 | M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> |
| 5192 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core | 5198 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core |
| 5193 | S: Supported | 5199 | S: Supported |
| @@ -5427,7 +5433,7 @@ F: drivers/media/video/pvrusb2/ · 233 unmodified lines | |||
| 5427 | PXA2xx/PXA3xx SUPPORT | 5433 | PXA2xx/PXA3xx SUPPORT |
| 5428 | M: Eric Miao <eric.y.miao@gmail.com> | 5434 | M: Eric Miao <eric.y.miao@gmail.com> |
| 5429 | M: Russell King <linux@arm.linux.org.uk> | 5435 | M: Russell King <linux@arm.linux.org.uk> |
| 5430 | M: Haojian Zhuang <haojian.zhuang@marvell.com> | 5436 | M: Haojian Zhuang <haojian.zhuang@gmail.com> |
| 5431 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 5437 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
| 5432 | T: git git://github.com/hzhuang1/linux.git | 5438 | T: git git://github.com/hzhuang1/linux.git |
| 5433 | T: git git://git.linaro.org/people/ycmiao/pxa-linux.git | 5439 | T: git git://git.linaro.org/people/ycmiao/pxa-linux.git |
| @@ -5442,7 +5448,7 @@ F: sound/soc/pxa · 8 unmodified lines | |||
| 5442 | 5448 | ||
| 5443 | MMP SUPPORT | 5449 | MMP SUPPORT |
| 5444 | M: Eric Miao <eric.y.miao@gmail.com> | 5450 | M: Eric Miao <eric.y.miao@gmail.com> |
| 5445 | M: Haojian Zhuang <haojian.zhuang@marvell.com> | 5451 | M: Haojian Zhuang <haojian.zhuang@gmail.com> |
| 5446 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 5452 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
| 5447 | T: git git://github.com/hzhuang1/linux.git | 5453 | T: git git://github.com/hzhuang1/linux.git |
| 5448 | T: git git://git.linaro.org/people/ycmiao/pxa-linux.git | 5454 | T: git git://git.linaro.org/people/ycmiao/pxa-linux.git |
| @@ -5639,6 +5645,13 @@ S: Supported · 190 unmodified lines | |||
| 5639 | F: drivers/base/regmap/ | 5645 | F: drivers/base/regmap/ |
| 5640 | F: include/linux/regmap.h | 5646 | F: include/linux/regmap.h |
| 5641 | 5647 | ||
| 5648 | REMOTE PROCESSOR (REMOTEPROC) SUBSYSTEM | ||
| 5649 | M: Ohad Ben-Cohen <ohad@wizery.com> | ||
| 5650 | S: Maintained | ||
| 5651 | F: drivers/remoteproc/ | ||
| 5652 | F: Documentation/remoteproc.txt | ||
| 5653 | F: include/linux/remoteproc.h | ||
| 5654 | |||
| 5642 | RFKILL | 5655 | RFKILL |
| 5643 | M: Johannes Berg <johannes@sipsolutions.net> | 5656 | M: Johannes Berg <johannes@sipsolutions.net> |
| 5644 | L: linux-wireless@vger.kernel.org | 5657 | L: linux-wireless@vger.kernel.org |
| @@ -5771,6 +5784,12 @@ F: drivers/media/common/saa7146* · 126 unmodified lines | |||
| 5771 | F: drivers/media/video/*7146* | 5784 | F: drivers/media/video/*7146* |
| 5772 | F: include/media/*7146* | 5785 | F: include/media/*7146* |
| 5773 | 5786 | ||
| 5787 | SAMSUNG LAPTOP DRIVER | ||
| 5788 | M: Corentin Chary <corentincj@iksaif.net> | ||
| 5789 | L: platform-driver-x86@vger.kernel.org | ||
| 5790 | S: Maintained | ||
| 5791 | F: drivers/platform/x86/samsung-laptop.c | ||
| 5792 | |||
| 5774 | SAMSUNG AUDIO (ASoC) DRIVERS | 5793 | SAMSUNG AUDIO (ASoC) DRIVERS |
| 5775 | M: Sangbeom Kim <sbkim73@samsung.com> | 5794 | M: Sangbeom Kim <sbkim73@samsung.com> |
| 5776 | L: alsa-devel@alsa-project.org (moderated for non-subscribers) | 5795 | L: alsa-devel@alsa-project.org (moderated for non-subscribers) |
| @@ -5822,7 +5841,7 @@ S: Maintained · 45 unmodified lines | |||
| 5822 | F: drivers/watchdog/sc1200wdt.c | 5841 | F: drivers/watchdog/sc1200wdt.c |
| 5823 | 5842 | ||
| 5824 | SCHEDULER | 5843 | SCHEDULER |
| 5825 | M: Ingo Molnar <mingo@elte.hu> | 5844 | M: Ingo Molnar <mingo@redhat.com> |
| 5826 | M: Peter Zijlstra <peterz@infradead.org> | 5845 | M: Peter Zijlstra <peterz@infradead.org> |
| 5827 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core | 5846 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core |
| 5828 | S: Maintained | 5847 | S: Maintained |
| @@ -6069,7 +6088,8 @@ F: arch/arm/mach-s3c2410/bast-irq.c · 240 unmodified lines | |||
| 6069 | TI DAVINCI MACHINE SUPPORT | 6088 | TI DAVINCI MACHINE SUPPORT |
| 6070 | M: Sekhar Nori <nsekhar@ti.com> | 6089 | M: Sekhar Nori <nsekhar@ti.com> |
| 6071 | M: Kevin Hilman <khilman@ti.com> | 6090 | M: Kevin Hilman <khilman@ti.com> |
| 6072 | L: davinci-linux-open-source@linux.davincidsp.com (subscribers-only) | 6091 | L: davinci-linux-open-source@linux.davincidsp.com (moderated for non-subscribers) |
| 6092 | T: git git://gitorious.org/linux-davinci/linux-davinci.git | ||
| 6073 | Q: http://patchwork.kernel.org/project/linux-davinci/list/ | 6093 | Q: http://patchwork.kernel.org/project/linux-davinci/list/ |
| 6074 | S: Supported | 6094 | S: Supported |
| 6075 | F: arch/arm/mach-davinci | 6095 | F: arch/arm/mach-davinci |
| @@ -6109,12 +6129,6 @@ W: http://www.winischhofer.at/linuxsisusbvga.shtml · 33 unmodified lines | |||
| 6109 | S: Maintained | 6129 | S: Maintained |
| 6110 | F: drivers/usb/misc/sisusbvga/ | 6130 | F: drivers/usb/misc/sisusbvga/ |
| 6111 | 6131 | ||
| 6112 | SKGE, SKY2 10/100/1000 GIGABIT ETHERNET DRIVERS | ||
| 6113 | M: Stephen Hemminger <shemminger@vyatta.com> | ||
| 6114 | L: netdev@vger.kernel.org | ||
| 6115 | S: Maintained | ||
| 6116 | F: drivers/net/ethernet/marvell/sk* | ||
| 6117 | |||
| 6118 | SLAB ALLOCATOR | 6132 | SLAB ALLOCATOR |
| 6119 | M: Christoph Lameter <cl@linux-foundation.org> | 6133 | M: Christoph Lameter <cl@linux-foundation.org> |
| 6120 | M: Pekka Enberg <penberg@kernel.org> | 6134 | M: Pekka Enberg <penberg@kernel.org> |
| @@ -6280,6 +6294,15 @@ F: drivers/tty/serial/sunsu.c · 159 unmodified lines | |||
| 6280 | F: drivers/tty/serial/sunzilog.c | 6294 | F: drivers/tty/serial/sunzilog.c |
| 6281 | F: drivers/tty/serial/sunzilog.h | 6295 | F: drivers/tty/serial/sunzilog.h |
| 6282 | 6296 | ||
| 6297 | SPARSE CHECKER | ||
| 6298 | M: "Christopher Li" <sparse@chrisli.org> | ||
| 6299 | L: linux-sparse@vger.kernel.org | ||
| 6300 | W: https://sparse.wiki.kernel.org/ | ||
| 6301 | T: git git://git.kernel.org/pub/scm/devel/sparse/sparse.git | ||
| 6302 | T: git git://git.kernel.org/pub/scm/devel/sparse/chrisl/sparse.git | ||
| 6303 | S: Maintained | ||
| 6304 | F: include/linux/compiler.h | ||
| 6305 | |||
| 6283 | SPEAR PLATFORM SUPPORT | 6306 | SPEAR PLATFORM SUPPORT |
| 6284 | M: Viresh Kumar <viresh.kumar@st.com> | 6307 | M: Viresh Kumar <viresh.kumar@st.com> |
| 6285 | L: spear-devel@list.st.com | 6308 | L: spear-devel@list.st.com |
| @@ -6455,6 +6478,7 @@ S: Odd Fixes · 169 unmodified lines | |||
| 6455 | F: drivers/staging/olpc_dcon/ | 6478 | F: drivers/staging/olpc_dcon/ |
| 6456 | 6479 | ||
| 6457 | STAGING - OZMO DEVICES USB OVER WIFI DRIVER | 6480 | STAGING - OZMO DEVICES USB OVER WIFI DRIVER |
| 6481 | M: Rupesh Gujare <rgujare@ozmodevices.com> | ||
| 6458 | M: Chris Kelly <ckelly@ozmodevices.com> | 6482 | M: Chris Kelly <ckelly@ozmodevices.com> |
| 6459 | S: Maintained | 6483 | S: Maintained |
| 6460 | F: drivers/staging/ozwpan/ | 6484 | F: drivers/staging/ozwpan/ |
| @@ -6612,9 +6636,10 @@ F: include/linux/if_team.h · 151 unmodified lines | |||
| 6612 | TEGRA SUPPORT | 6636 | TEGRA SUPPORT |
| 6613 | M: Colin Cross <ccross@android.com> | 6637 | M: Colin Cross <ccross@android.com> |
| 6614 | M: Olof Johansson <olof@lixom.net> | 6638 | M: Olof Johansson <olof@lixom.net> |
| 6615 | M: Stephen Warren <swarren@nvidia.com> | 6639 | M: Stephen Warren <swarren@wwwdotorg.org> |
| 6616 | L: linux-tegra@vger.kernel.org | 6640 | L: linux-tegra@vger.kernel.org |
| 6617 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/olof/tegra.git | 6641 | Q: http://patchwork.ozlabs.org/project/linux-tegra/list/ |
| 6642 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/swarren/linux-tegra.git | ||
| 6618 | S: Supported | 6643 | S: Supported |
| 6619 | F: arch/arm/mach-tegra | 6644 | F: arch/arm/mach-tegra |
| 6620 | 6645 | ||
| @@ -7449,8 +7474,7 @@ F: include/linux/wm97xx.h · 828 unmodified lines | |||
| 7449 | 7474 | ||
| 7450 | WOLFSON MICROELECTRONICS DRIVERS | 7475 | WOLFSON MICROELECTRONICS DRIVERS |
| 7451 | M: Mark Brown <broonie@opensource.wolfsonmicro.com> | 7476 | M: Mark Brown <broonie@opensource.wolfsonmicro.com> |
| 7452 | M: Ian Lartey <ian@opensource.wolfsonmicro.com> | 7477 | L: patches@opensource.wolfsonmicro.com |
| 7453 | M: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> | ||
| 7454 | T: git git://opensource.wolfsonmicro.com/linux-2.6-asoc | 7478 | T: git git://opensource.wolfsonmicro.com/linux-2.6-asoc |
| 7455 | T: git git://opensource.wolfsonmicro.com/linux-2.6-audioplus | 7479 | T: git git://opensource.wolfsonmicro.com/linux-2.6-audioplus |
| 7456 | W: http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices | 7480 | W: http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices |
| @@ -1,7 +1,7 @@ | |||
| 1 | VERSION = 3 | 1 | VERSION = 3 |
| 2 | PATCHLEVEL = 3 | 2 | PATCHLEVEL = 4 |
| 3 | SUBLEVEL = 0 | 3 | SUBLEVEL = 0 |
| 4 | EXTRAVERSION = | 4 | EXTRAVERSION = -rc3 |
| 5 | NAME = Saber-toothed Squirrel | 5 | NAME = Saber-toothed Squirrel |
| 6 | 6 | ||
| 7 | # *DOCUMENTATION* | 7 | # *DOCUMENTATION* |
| @@ -1170,7 +1170,7 @@ MRPROPER_FILES += .config .config.old .version .old_version \ · 1162 unmodified lines | |||
| 1170 | # | 1170 | # |
| 1171 | clean: rm-dirs := $(CLEAN_DIRS) | 1171 | clean: rm-dirs := $(CLEAN_DIRS) |
| 1172 | clean: rm-files := $(CLEAN_FILES) | 1172 | clean: rm-files := $(CLEAN_FILES) |
| 1173 | clean-dirs := $(addprefix _clean_, . $(vmlinux-alldirs) Documentation) | 1173 | clean-dirs := $(addprefix _clean_, . $(vmlinux-alldirs) Documentation samples) |
| 1174 | 1174 | ||
| 1175 | PHONY += $(clean-dirs) clean archclean | 1175 | PHONY += $(clean-dirs) clean archclean |
| 1176 | $(clean-dirs): | 1176 | $(clean-dirs): |
| @@ -213,4 +213,7 @@ config HAVE_CMPXCHG_LOCAL · 212 unmodified lines | |||
| 213 | config HAVE_CMPXCHG_DOUBLE | 213 | config HAVE_CMPXCHG_DOUBLE |
| 214 | bool | 214 | bool |
| 215 | 215 | ||
| 216 | config ARCH_WANT_OLD_COMPAT_IPC | ||
| 217 | bool | ||
| 218 | |||
| 216 | source "kernel/gcov/Kconfig" | 219 | source "kernel/gcov/Kconfig" |
| @@ -13,7 +13,6 @@ · 12 unmodified lines | |||
| 13 | #include <generated/utsrelease.h> | 13 | #include <generated/utsrelease.h> |
| 14 | #include <linux/mm.h> | 14 | #include <linux/mm.h> |
| 15 | 15 | ||
| 16 | #include <asm/system.h> | ||
| 17 | #include <asm/console.h> | 16 | #include <asm/console.h> |
| 18 | #include <asm/hwrpb.h> | 17 | #include <asm/hwrpb.h> |
| 19 | #include <asm/pgtable.h> | 18 | #include <asm/pgtable.h> |
| @@ -15,7 +15,6 @@ · 14 unmodified lines | |||
| 15 | #include <generated/utsrelease.h> | 15 | #include <generated/utsrelease.h> |
| 16 | #include <linux/mm.h> | 16 | #include <linux/mm.h> |
| 17 | 17 | ||
| 18 | #include <asm/system.h> | ||
| 19 | #include <asm/console.h> | 18 | #include <asm/console.h> |
| 20 | #include <asm/hwrpb.h> | 19 | #include <asm/hwrpb.h> |
| 21 | #include <asm/pgtable.h> | 20 | #include <asm/pgtable.h> |
| @@ -4,7 +4,6 @@ · 3 unmodified lines | |||
| 4 | * initial bootloader stuff.. | 4 | * initial bootloader stuff.. |
| 5 | */ | 5 | */ |
| 6 | 6 | ||
| 7 | #include <asm/system.h> | ||
| 8 | 7 | ||
| 9 | .set noreorder | 8 | .set noreorder |
| 10 | .globl __start | 9 | .globl __start |
| @@ -11,7 +11,6 @@ · 10 unmodified lines | |||
| 11 | #include <generated/utsrelease.h> | 11 | #include <generated/utsrelease.h> |
| 12 | #include <linux/mm.h> | 12 | #include <linux/mm.h> |
| 13 | 13 | ||
| 14 | #include <asm/system.h> | ||
| 15 | #include <asm/console.h> | 14 | #include <asm/console.h> |
| 16 | #include <asm/hwrpb.h> | 15 | #include <asm/hwrpb.h> |
| 17 | #include <asm/pgtable.h> | 16 | #include <asm/pgtable.h> |
| @@ -3,7 +3,7 @@ · 2 unmodified lines | |||
| 3 | 3 | ||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | #include <asm/barrier.h> | 5 | #include <asm/barrier.h> |
| 6 | #include <asm/system.h> | 6 | #include <asm/cmpxchg.h> |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Atomic operations that C can't guarantee us. Useful for | 9 | * Atomic operations that C can't guarantee us. Useful for |
| @@ -21,4 +21,6 @@ · 20 unmodified lines | |||
| 21 | #define AT_L2_CACHESHAPE 36 | 21 | #define AT_L2_CACHESHAPE 36 |
| 22 | #define AT_L3_CACHESHAPE 37 | 22 | #define AT_L3_CACHESHAPE 37 |
| 23 | 23 | ||
| 24 | #define AT_VECTOR_SIZE_ARCH 4 /* entries in ARCH_DLINFO */ | ||
| 25 | |||
| 24 | #endif /* __ASM_ALPHA_AUXVEC_H */ | 26 | #endif /* __ASM_ALPHA_AUXVEC_H */ |
| @@ -0,0 +1,71 @@ | |||
| 1 | #ifndef _ALPHA_CMPXCHG_H | ||
| 2 | #define _ALPHA_CMPXCHG_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * Atomic exchange routines. | ||
| 6 | */ | ||
| 7 | |||
| 8 | #define __ASM__MB | ||
| 9 | #define ____xchg(type, args...) __xchg ## type ## _local(args) | ||
| 10 | #define ____cmpxchg(type, args...) __cmpxchg ## type ## _local(args) | ||
| 11 | #include <asm/xchg.h> | ||
| 12 | |||
| 13 | #define xchg_local(ptr, x) \ | ||
| 14 | ({ \ | ||
| 15 | __typeof__(*(ptr)) _x_ = (x); \ | ||
| 16 | (__typeof__(*(ptr))) __xchg_local((ptr), (unsigned long)_x_, \ | ||
| 17 | sizeof(*(ptr))); \ | ||
| 18 | }) | ||
| 19 | |||
| 20 | #define cmpxchg_local(ptr, o, n) \ | ||
| 21 | ({ \ | ||
| 22 | __typeof__(*(ptr)) _o_ = (o); \ | ||
| 23 | __typeof__(*(ptr)) _n_ = (n); \ | ||
| 24 | (__typeof__(*(ptr))) __cmpxchg_local((ptr), (unsigned long)_o_, \ | ||
| 25 | (unsigned long)_n_, \ | ||
| 26 | sizeof(*(ptr))); \ | ||
| 27 | }) | ||
| 28 | |||
| 29 | #define cmpxchg64_local(ptr, o, n) \ | ||
| 30 | ({ \ | ||
| 31 | BUILD_BUG_ON(sizeof(*(ptr)) != 8); \ | ||
| 32 | cmpxchg_local((ptr), (o), (n)); \ | ||
| 33 | }) | ||
| 34 | |||
| 35 | #ifdef CONFIG_SMP | ||
| 36 | #undef __ASM__MB | ||
| 37 | #define __ASM__MB "\tmb\n" | ||
| 38 | #endif | ||
| 39 | #undef ____xchg | ||
| 40 | #undef ____cmpxchg | ||
| 41 | #define ____xchg(type, args...) __xchg ##type(args) | ||
| 42 | #define ____cmpxchg(type, args...) __cmpxchg ##type(args) | ||
| 43 | #include <asm/xchg.h> | ||
| 44 | |||
| 45 | #define xchg(ptr, x) \ | ||
| 46 | ({ \ | ||
| 47 | __typeof__(*(ptr)) _x_ = (x); \ | ||
| 48 | (__typeof__(*(ptr))) __xchg((ptr), (unsigned long)_x_, \ | ||
| 49 | sizeof(*(ptr))); \ | ||
| 50 | }) | ||
| 51 | |||
| 52 | #define cmpxchg(ptr, o, n) \ | ||
| 53 | ({ \ | ||
| 54 | __typeof__(*(ptr)) _o_ = (o); \ | ||
| 55 | __typeof__(*(ptr)) _n_ = (n); \ | ||
| 56 | (__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_, \ | ||
| 57 | (unsigned long)_n_, sizeof(*(ptr)));\ | ||
| 58 | }) | ||
| 59 | |||
| 60 | #define cmpxchg64(ptr, o, n) \ | ||
| 61 | ({ \ | ||
| 62 | BUILD_BUG_ON(sizeof(*(ptr)) != 8); \ | ||
| 63 | cmpxchg((ptr), (o), (n)); \ | ||
| 64 | }) | ||
| 65 | |||
| 66 | #undef __ASM__MB | ||
| 67 | #undef ____cmpxchg | ||
| 68 | |||
| 69 | #define __HAVE_ARCH_CMPXCHG 1 | ||
| 70 | |||
| 71 | #endif /* _ALPHA_CMPXCHG_H */ | ||
| @@ -1,8 +1,8 @@ | |||
| 1 | #ifndef __ALPHA_LCA__H__ | 1 | #ifndef __ALPHA_LCA__H__ |
| 2 | #define __ALPHA_LCA__H__ | 2 | #define __ALPHA_LCA__H__ |
| 3 | 3 | ||
| 4 | #include <asm/system.h> | ||
| 5 | #include <asm/compiler.h> | 4 | #include <asm/compiler.h> |
| 5 | #include <asm/mce.h> | ||
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Low Cost Alpha (LCA) definitions (these apply to 21066 and 21068, | 8 | * Low Cost Alpha (LCA) definitions (these apply to 21066 and 21068, |
| @@ -7,6 +7,7 @@ · 6 unmodified lines | |||
| 7 | 7 | ||
| 8 | #include <linux/types.h> | 8 | #include <linux/types.h> |
| 9 | #include <asm/compiler.h> | 9 | #include <asm/compiler.h> |
| 10 | #include <asm/mce.h> | ||
| 10 | 11 | ||
| 11 | /* | 12 | /* |
| 12 | * MCPCIA is the internal name for a core logic chipset which provides | 13 | * MCPCIA is the internal name for a core logic chipset which provides |
| @@ -7,7 +7,6 @@ · 6 unmodified lines | |||
| 7 | #include <linux/types.h> | 7 | #include <linux/types.h> |
| 8 | #include <linux/spinlock.h> | 8 | #include <linux/spinlock.h> |
| 9 | #include <asm/compiler.h> | 9 | #include <asm/compiler.h> |
| 10 | #include <asm/system.h> | ||
| 11 | 10 | ||
| 12 | /* | 11 | /* |
| 13 | * T2 is the internal name for the core logic chipset which provides | 12 | * T2 is the internal name for the core logic chipset which provides |
| @@ -12,16 +12,22 @@ static inline struct dma_map_ops *get_dma_ops(struct device *dev) · 11 unmodified lines | |||
| 12 | 12 | ||
| 13 | #include <asm-generic/dma-mapping-common.h> | 13 | #include <asm-generic/dma-mapping-common.h> |
| 14 | 14 | ||
| 15 | static inline void *dma_alloc_coherent(struct device *dev, size_t size, | 15 | #define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL) |
| 16 | dma_addr_t *dma_handle, gfp_t gfp) | 16 | |
| 17 | static inline void *dma_alloc_attrs(struct device *dev, size_t size, | ||
| 18 | dma_addr_t *dma_handle, gfp_t gfp, | ||
| 19 | struct dma_attrs *attrs) | ||
| 17 | { | 20 | { |
| 18 | return get_dma_ops(dev)->alloc_coherent(dev, size, dma_handle, gfp); | 21 | return get_dma_ops(dev)->alloc(dev, size, dma_handle, gfp, attrs); |
| 19 | } | 22 | } |
| 20 | 23 | ||
| 21 | static inline void dma_free_coherent(struct device *dev, size_t size, | 24 | #define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL) |
| 22 | void *vaddr, dma_addr_t dma_handle) | 25 | |
| 26 | static inline void dma_free_attrs(struct device *dev, size_t size, | ||
| 27 | void *vaddr, dma_addr_t dma_handle, | ||
| 28 | struct dma_attrs *attrs) | ||
| 23 | { | 29 | { |
| 24 | get_dma_ops(dev)->free_coherent(dev, size, vaddr, dma_handle); | 30 | get_dma_ops(dev)->free(dev, size, vaddr, dma_handle, attrs); |
| 25 | } | 31 | } |
| 26 | 32 | ||
| 27 | static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) | 33 | static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) |
| @@ -2,6 +2,7 @@ · 1 unmodified line | |||
| 2 | #define __ASM_ALPHA_ELF_H | 2 | #define __ASM_ALPHA_ELF_H |
| 3 | 3 | ||
| 4 | #include <asm/auxvec.h> | 4 | #include <asm/auxvec.h> |
| 5 | #include <asm/special_insns.h> | ||
| 5 | 6 | ||
| 6 | /* Special values for the st_other field in the symbol table. */ | 7 | /* Special values for the st_other field in the symbol table. */ |
| 7 | 8 | ||
| @@ -0,0 +1,6 @@ | |||
| 1 | #ifndef __ALPHA_EXEC_H | ||
| 2 | #define __ALPHA_EXEC_H | ||
| 3 | |||
| 4 | #define arch_align_stack(x) (x) | ||
| 5 | |||
| 6 | #endif /* __ALPHA_EXEC_H */ | ||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef __ASM_ALPHA_FPU_H | 1 | #ifndef __ASM_ALPHA_FPU_H |
| 2 | #define __ASM_ALPHA_FPU_H | 2 | #define __ASM_ALPHA_FPU_H |
| 3 | 3 | ||
| 4 | #include <asm/special_insns.h> | ||
| 5 | |||
| 4 | /* | 6 | /* |
| 5 | * Alpha floating-point control register defines: | 7 | * Alpha floating-point control register defines: |
| 6 | */ | 8 | */ |
| @@ -6,7 +6,6 @@ · 5 unmodified lines | |||
| 6 | #include <linux/kernel.h> | 6 | #include <linux/kernel.h> |
| 7 | #include <linux/mm.h> | 7 | #include <linux/mm.h> |
| 8 | #include <asm/compiler.h> | 8 | #include <asm/compiler.h> |
| 9 | #include <asm/system.h> | ||
| 10 | #include <asm/pgtable.h> | 9 | #include <asm/pgtable.h> |
| 11 | #include <asm/machvec.h> | 10 | #include <asm/machvec.h> |
| 12 | #include <asm/hwrpb.h> | 11 | #include <asm/hwrpb.h> |
| @@ -1,7 +1,7 @@ | |||
| 1 | #ifndef __ALPHA_IRQFLAGS_H | 1 | #ifndef __ALPHA_IRQFLAGS_H |
| 2 | #define __ALPHA_IRQFLAGS_H | 2 | #define __ALPHA_IRQFLAGS_H |
| 3 | 3 | ||
| 4 | #include <asm/system.h> | 4 | #include <asm/pal.h> |
| 5 | 5 | ||
| 6 | #define IPL_MIN 0 | 6 | #define IPL_MIN 0 |
| 7 | #define IPL_SW0 1 | 7 | #define IPL_SW0 1 |
| @@ -0,0 +1,83 @@ | |||
| 1 | #ifndef __ALPHA_MCE_H | ||
| 2 | #define __ALPHA_MCE_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * This is the logout header that should be common to all platforms | ||
| 6 | * (assuming they are running OSF/1 PALcode, I guess). | ||
| 7 | */ | ||
| 8 | struct el_common { | ||
| 9 | unsigned int size; /* size in bytes of logout area */ | ||
| 10 | unsigned int sbz1 : 30; /* should be zero */ | ||
| 11 | unsigned int err2 : 1; /* second error */ | ||
| 12 | unsigned int retry : 1; /* retry flag */ | ||
| 13 | unsigned int proc_offset; /* processor-specific offset */ | ||
| 14 | unsigned int sys_offset; /* system-specific offset */ | ||
| 15 | unsigned int code; /* machine check code */ | ||
| 16 | unsigned int frame_rev; /* frame revision */ | ||
| 17 | }; | ||
| 18 | |||
| 19 | /* Machine Check Frame for uncorrectable errors (Large format) | ||
| 20 | * --- This is used to log uncorrectable errors such as | ||
| 21 | * double bit ECC errors. | ||
| 22 | * --- These errors are detected by both processor and systems. | ||
| 23 | */ | ||
| 24 | struct el_common_EV5_uncorrectable_mcheck { | ||
| 25 | unsigned long shadow[8]; /* Shadow reg. 8-14, 25 */ | ||
| 26 | unsigned long paltemp[24]; /* PAL TEMP REGS. */ | ||
| 27 | unsigned long exc_addr; /* Address of excepting instruction*/ | ||
| 28 | unsigned long exc_sum; /* Summary of arithmetic traps. */ | ||
| 29 | unsigned long exc_mask; /* Exception mask (from exc_sum). */ | ||
| 30 | unsigned long pal_base; /* Base address for PALcode. */ | ||
| 31 | unsigned long isr; /* Interrupt Status Reg. */ | ||
| 32 | unsigned long icsr; /* CURRENT SETUP OF EV5 IBOX */ | ||
| 33 | unsigned long ic_perr_stat; /* I-CACHE Reg. <11> set Data parity | ||
| 34 | <12> set TAG parity*/ | ||
| 35 | unsigned long dc_perr_stat; /* D-CACHE error Reg. Bits set to 1: | ||
| 36 | <2> Data error in bank 0 | ||
| 37 | <3> Data error in bank 1 | ||
| 38 | <4> Tag error in bank 0 | ||
| 39 | <5> Tag error in bank 1 */ | ||
| 40 | unsigned long va; /* Effective VA of fault or miss. */ | ||
| 41 | unsigned long mm_stat; /* Holds the reason for D-stream | ||
| 42 | fault or D-cache parity errors */ | ||
| 43 | unsigned long sc_addr; /* Address that was being accessed | ||
| 44 | when EV5 detected Secondary cache | ||
| 45 | failure. */ | ||
| 46 | unsigned long sc_stat; /* Helps determine if the error was | ||
| 47 | TAG/Data parity(Secondary Cache)*/ | ||
| 48 | unsigned long bc_tag_addr; /* Contents of EV5 BC_TAG_ADDR */ | ||
| 49 | unsigned long ei_addr; /* Physical address of any transfer | ||
| 50 | that is logged in EV5 EI_STAT */ | ||
| 51 | unsigned long fill_syndrome; /* For correcting ECC errors. */ | ||
| 52 | unsigned long ei_stat; /* Helps identify reason of any | ||
| 53 | processor uncorrectable error | ||
| 54 | at its external interface. */ | ||
| 55 | unsigned long ld_lock; /* Contents of EV5 LD_LOCK register*/ | ||
| 56 | }; | ||
| 57 | |||
| 58 | struct el_common_EV6_mcheck { | ||
| 59 | unsigned int FrameSize; /* Bytes, including this field */ | ||
| 60 | unsigned int FrameFlags; /* <31> = Retry, <30> = Second Error */ | ||
| 61 | unsigned int CpuOffset; /* Offset to CPU-specific info */ | ||
| 62 | unsigned int SystemOffset; /* Offset to system-specific info */ | ||
| 63 | unsigned int MCHK_Code; | ||
| 64 | unsigned int MCHK_Frame_Rev; | ||
| 65 | unsigned long I_STAT; /* EV6 Internal Processor Registers */ | ||
| 66 | unsigned long DC_STAT; /* (See the 21264 Spec) */ | ||
| 67 | unsigned long C_ADDR; | ||
| 68 | unsigned long DC1_SYNDROME; | ||
| 69 | unsigned long DC0_SYNDROME; | ||
| 70 | unsigned long C_STAT; | ||
| 71 | unsigned long C_STS; | ||
| 72 | unsigned long MM_STAT; | ||
| 73 | unsigned long EXC_ADDR; | ||
| 74 | unsigned long IER_CM; | ||
| 75 | unsigned long ISUM; | ||
| 76 | unsigned long RESERVED0; | ||
| 77 | unsigned long PAL_BASE; | ||
| 78 | unsigned long I_CTL; | ||
| 79 | unsigned long PCTX; | ||
| 80 | }; | ||
| 81 | |||
| 82 | |||
| 83 | #endif /* __ALPHA_MCE_H */ | ||
| @@ -56,6 +56,10 @@ · 55 unmodified lines | |||
| 56 | #define MADV_HUGEPAGE 14 /* Worth backing with hugepages */ | 56 | #define MADV_HUGEPAGE 14 /* Worth backing with hugepages */ |
| 57 | #define MADV_NOHUGEPAGE 15 /* Not worth backing with hugepages */ | 57 | #define MADV_NOHUGEPAGE 15 /* Not worth backing with hugepages */ |
| 58 | 58 | ||
| 59 | #define MADV_DONTDUMP 16 /* Explicity exclude from the core dump, | ||
| 60 | overrides the coredump filter bits */ | ||
| 61 | #define MADV_DODUMP 17 /* Clear the MADV_NODUMP flag */ | ||
| 62 | |||
| 59 | /* compatibility flags */ | 63 | /* compatibility flags */ |
| 60 | #define MAP_FILE 0 | 64 | #define MAP_FILE 0 |
| 61 | 65 | ||
| @@ -7,7 +7,6 @@ · 6 unmodified lines | |||
| 7 | * Copyright (C) 1996, Linus Torvalds | 7 | * Copyright (C) 1996, Linus Torvalds |
| 8 | */ | 8 | */ |
| 9 | 9 | ||
| 10 | #include <asm/system.h> | ||
| 11 | #include <asm/machvec.h> | 10 | #include <asm/machvec.h> |
| 12 | #include <asm/compiler.h> | 11 | #include <asm/compiler.h> |
| 13 | #include <asm-generic/mm_hooks.h> | 12 | #include <asm-generic/mm_hooks.h> |
| @@ -48,4 +48,116 @@ · 47 unmodified lines | |||
| 48 | #define PAL_retsys 61 | 48 | #define PAL_retsys 61 |
| 49 | #define PAL_rti 63 | 49 | #define PAL_rti 63 |
| 50 | 50 | ||
| 51 | #ifdef __KERNEL__ | ||
| 52 | #ifndef __ASSEMBLY__ | ||
| 53 | |||
| 54 | extern void halt(void) __attribute__((noreturn)); | ||
| 55 | #define __halt() __asm__ __volatile__ ("call_pal %0 #halt" : : "i" (PAL_halt)) | ||
| 56 | |||
| 57 | #define imb() \ | ||
| 58 | __asm__ __volatile__ ("call_pal %0 #imb" : : "i" (PAL_imb) : "memory") | ||
| 59 | |||
| 60 | #define draina() \ | ||
| 61 | __asm__ __volatile__ ("call_pal %0 #draina" : : "i" (PAL_draina) : "memory") | ||
| 62 | |||
| 63 | #define __CALL_PAL_R0(NAME, TYPE) \ | ||
| 64 | extern inline TYPE NAME(void) \ | ||
| 65 | { \ | ||
| 66 | register TYPE __r0 __asm__("$0"); \ | ||
| 67 | __asm__ __volatile__( \ | ||
| 68 | "call_pal %1 # " #NAME \ | ||
| 69 | :"=r" (__r0) \ | ||
| 70 | :"i" (PAL_ ## NAME) \ | ||
| 71 | :"$1", "$16", "$22", "$23", "$24", "$25"); \ | ||
| 72 | return __r0; \ | ||
| 73 | } | ||
| 74 | |||
| 75 | #define __CALL_PAL_W1(NAME, TYPE0) \ | ||
| 76 | extern inline void NAME(TYPE0 arg0) \ | ||
| 77 | { \ | ||
| 78 | register TYPE0 __r16 __asm__("$16") = arg0; \ | ||
| 79 | __asm__ __volatile__( \ | ||
| 80 | "call_pal %1 # "#NAME \ | ||
| 81 | : "=r"(__r16) \ | ||
| 82 | : "i"(PAL_ ## NAME), "0"(__r16) \ | ||
| 83 | : "$1", "$22", "$23", "$24", "$25"); \ | ||
| 84 | } | ||
| 85 | |||
| 86 | #define __CALL_PAL_W2(NAME, TYPE0, TYPE1) \ | ||
| 87 | extern inline void NAME(TYPE0 arg0, TYPE1 arg1) \ | ||
| 88 | { \ | ||
| 89 | register TYPE0 __r16 __asm__("$16") = arg0; \ | ||
| 90 | register TYPE1 __r17 __asm__("$17") = arg1; \ | ||
| 91 | __asm__ __volatile__( \ | ||
| 92 | "call_pal %2 # "#NAME \ | ||
| 93 | : "=r"(__r16), "=r"(__r17) \ | ||
| 94 | : "i"(PAL_ ## NAME), "0"(__r16), "1"(__r17) \ | ||
| 95 | : "$1", "$22", "$23", "$24", "$25"); \ | ||
| 96 | } | ||
| 97 | |||
| 98 | #define __CALL_PAL_RW1(NAME, RTYPE, TYPE0) \ | ||
| 99 | extern inline RTYPE NAME(TYPE0 arg0) \ | ||
| 100 | { \ | ||
| 101 | register RTYPE __r0 __asm__("$0"); \ | ||
| 102 | register TYPE0 __r16 __asm__("$16") = arg0; \ | ||
| 103 | __asm__ __volatile__( \ | ||
| 104 | "call_pal %2 # "#NAME \ | ||
| 105 | : "=r"(__r16), "=r"(__r0) \ | ||
| 106 | : "i"(PAL_ ## NAME), "0"(__r16) \ | ||
| 107 | : "$1", "$22", "$23", "$24", "$25"); \ | ||
| 108 | return __r0; \ | ||
| 109 | } | ||
| 110 | |||
| 111 | #define __CALL_PAL_RW2(NAME, RTYPE, TYPE0, TYPE1) \ | ||
| 112 | extern inline RTYPE NAME(TYPE0 arg0, TYPE1 arg1) \ | ||
| 113 | { \ | ||
| 114 | register RTYPE __r0 __asm__("$0"); \ | ||
| 115 | register TYPE0 __r16 __asm__("$16") = arg0; \ | ||
| 116 | register TYPE1 __r17 __asm__("$17") = arg1; \ | ||
| 117 | __asm__ __volatile__( \ | ||
| 118 | "call_pal %3 # "#NAME \ | ||
| 119 | : "=r"(__r16), "=r"(__r17), "=r"(__r0) \ | ||
| 120 | : "i"(PAL_ ## NAME), "0"(__r16), "1"(__r17) \ | ||
| 121 | : "$1", "$22", "$23", "$24", "$25"); \ | ||
| 122 | return __r0; \ | ||
| 123 | } | ||
| 124 | |||
| 125 | __CALL_PAL_W1(cflush, unsigned long); | ||
| 126 | __CALL_PAL_R0(rdmces, unsigned long); | ||
| 127 | __CALL_PAL_R0(rdps, unsigned long); | ||
| 128 | __CALL_PAL_R0(rdusp, unsigned long); | ||
| 129 | __CALL_PAL_RW1(swpipl, unsigned long, unsigned long); | ||
| 130 | __CALL_PAL_R0(whami, unsigned long); | ||
| 131 | __CALL_PAL_W2(wrent, void*, unsigned long); | ||
| 132 | __CALL_PAL_W1(wripir, unsigned long); | ||
| 133 | __CALL_PAL_W1(wrkgp, unsigned long); | ||
| 134 | __CALL_PAL_W1(wrmces, unsigned long); | ||
| 135 | __CALL_PAL_RW2(wrperfmon, unsigned long, unsigned long, unsigned long); | ||
| 136 | __CALL_PAL_W1(wrusp, unsigned long); | ||
| 137 | __CALL_PAL_W1(wrvptptr, unsigned long); | ||
| 138 | |||
| 139 | /* | ||
| 140 | * TB routines.. | ||
| 141 | */ | ||
| 142 | #define __tbi(nr,arg,arg1...) \ | ||
| 143 | ({ \ | ||
| 144 | register unsigned long __r16 __asm__("$16") = (nr); \ | ||
| 145 | register unsigned long __r17 __asm__("$17"); arg; \ | ||
| 146 | __asm__ __volatile__( \ | ||
| 147 | "call_pal %3 #__tbi" \ | ||
| 148 | :"=r" (__r16),"=r" (__r17) \ | ||
| 149 | :"0" (__r16),"i" (PAL_tbi) ,##arg1 \ | ||
| 150 | :"$0", "$1", "$22", "$23", "$24", "$25"); \ | ||
| 151 | }) | ||
| 152 | |||
| 153 | #define tbi(x,y) __tbi(x,__r17=(y),"1" (__r17)) | ||
| 154 | #define tbisi(x) __tbi(1,__r17=(x),"1" (__r17)) | ||
| 155 | #define tbisd(x) __tbi(2,__r17=(x),"1" (__r17)) | ||
| 156 | #define tbis(x) __tbi(3,__r17=(x),"1" (__r17)) | ||
| 157 | #define tbiap() __tbi(-1, /* no second argument */) | ||
| 158 | #define tbia() __tbi(-2, /* no second argument */) | ||
| 159 | |||
| 160 | #endif /* !__ASSEMBLY__ */ | ||
| 161 | #endif /* __KERNEL__ */ | ||
| 162 | |||
| 51 | #endif /* __ALPHA_PAL_H */ | 163 | #endif /* __ALPHA_PAL_H */ |
| @@ -7,6 +7,7 @@ · 6 unmodified lines | |||
| 7 | #include <linux/dma-mapping.h> | 7 | #include <linux/dma-mapping.h> |
| 8 | #include <asm/scatterlist.h> | 8 | #include <asm/scatterlist.h> |
| 9 | #include <asm/machvec.h> | 9 | #include <asm/machvec.h> |
| 10 | #include <asm-generic/pci-bridge.h> | ||
| 10 | 11 | ||
| 11 | /* | 12 | /* |
| 12 | * The following structure is used to manage multiple PCI busses. | 13 | * The following structure is used to manage multiple PCI busses. |
| @@ -99,12 +100,6 @@ static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel) · 86 unmodified lines | |||
| 99 | return channel ? 15 : 14; | 100 | return channel ? 15 : 14; |
| 100 | } | 101 | } |
| 101 | 102 | ||
| 102 | extern void pcibios_resource_to_bus(struct pci_dev *, struct pci_bus_region *, | ||
| 103 | struct resource *); | ||
| 104 | |||
| 105 | extern void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, | ||
| 106 | struct pci_bus_region *region); | ||
| 107 | |||
| 108 | #define pci_domain_nr(bus) ((struct pci_controller *)(bus)->sysdata)->index | 103 | #define pci_domain_nr(bus) ((struct pci_controller *)(bus)->sysdata)->index |
| 109 | 104 | ||
| 110 | static inline int pci_proc_domain(struct pci_bus *bus) | 105 | static inline int pci_proc_domain(struct pci_bus *bus) |
| @@ -15,6 +15,7 @@ · 14 unmodified lines | |||
| 15 | #include <asm/page.h> | 15 | #include <asm/page.h> |
| 16 | #include <asm/processor.h> /* For TASK_SIZE */ | 16 | #include <asm/processor.h> /* For TASK_SIZE */ |
| 17 | #include <asm/machvec.h> | 17 | #include <asm/machvec.h> |
| 18 | #include <asm/setup.h> | ||
| 18 | 19 | ||
| 19 | struct mm_struct; | 20 | struct mm_struct; |
| 20 | struct vm_area_struct; | 21 | struct vm_area_struct; |
| @@ -8,116 +8,13 @@ · 7 unmodified lines | |||
| 8 | */ | 8 | */ |
| 9 | 9 | ||
| 10 | typedef unsigned int __kernel_ino_t; | 10 | typedef unsigned int __kernel_ino_t; |
| 11 | typedef unsigned int __kernel_mode_t; | 11 | #define __kernel_ino_t __kernel_ino_t |
| 12 | typedef unsigned int __kernel_nlink_t; | ||
| 13 | typedef long __kernel_off_t; | ||
| 14 | typedef long long __kernel_loff_t; | ||
| 15 | typedef int __kernel_pid_t; | ||
| 16 | typedef int __kernel_ipc_pid_t; | ||
| 17 | typedef unsigned int __kernel_uid_t; | ||
| 18 | typedef unsigned int __kernel_gid_t; | ||
| 19 | typedef unsigned long __kernel_size_t; | ||
| 20 | typedef long __kernel_ssize_t; | ||
| 21 | typedef long __kernel_ptrdiff_t; | ||
| 22 | typedef long __kernel_time_t; | ||
| 23 | typedef long __kernel_suseconds_t; | ||
| 24 | typedef long __kernel_clock_t; | ||
| 25 | typedef int __kernel_daddr_t; | ||
| 26 | typedef char * __kernel_caddr_t; | ||
| 27 | typedef unsigned long __kernel_sigset_t; /* at least 32 bits */ | ||
| 28 | typedef unsigned short __kernel_uid16_t; | ||
| 29 | typedef unsigned short __kernel_gid16_t; | ||
| 30 | typedef int __kernel_clockid_t; | ||
| 31 | typedef int __kernel_timer_t; | ||
| 32 | |||
| 33 | typedef struct { | ||
| 34 | int val[2]; | ||
| 35 | } __kernel_fsid_t; | ||
| 36 | |||
| 37 | typedef __kernel_uid_t __kernel_old_uid_t; | ||
| 38 | typedef __kernel_gid_t __kernel_old_gid_t; | ||
| 39 | typedef __kernel_uid_t __kernel_uid32_t; | ||
| 40 | typedef __kernel_gid_t __kernel_gid32_t; | ||
| 41 | |||
| 42 | typedef unsigned int __kernel_old_dev_t; | ||
| 43 | |||
| 44 | #ifdef __KERNEL__ | ||
| 45 | |||
| 46 | #ifndef __GNUC__ | ||
| 47 | |||
| 48 | #define __FD_SET(d, set) ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d)) | ||
| 49 | #define __FD_CLR(d, set) ((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d)) | ||
| 50 | #define __FD_ISSET(d, set) (((set)->fds_bits[__FDELT(d)] & __FDMASK(d)) != 0) | ||
| 51 | #define __FD_ZERO(set) \ | ||
| 52 | ((void) memset ((void *) (set), 0, sizeof (__kernel_fd_set))) | ||
| 53 | |||
| 54 | #else /* __GNUC__ */ | ||
| 55 | |||
| 56 | /* With GNU C, use inline functions instead so args are evaluated only once: */ | ||
| 57 | 12 | ||
| 58 | #undef __FD_SET | 13 | typedef unsigned int __kernel_nlink_t; |
| 59 | static __inline__ void __FD_SET(unsigned long fd, __kernel_fd_set *fdsetp) | 14 | #define __kernel_nlink_t __kernel_nlink_t |
| 60 | { | ||
| 61 | unsigned long _tmp = fd / __NFDBITS; | ||
| 62 | unsigned long _rem = fd % __NFDBITS; | ||
| 63 | fdsetp->fds_bits[_tmp] |= (1UL<<_rem); | ||
| 64 | } | ||
| 65 | |||
| 66 | #undef __FD_CLR | ||
| 67 | static __inline__ void __FD_CLR(unsigned long fd, __kernel_fd_set *fdsetp) | ||
| 68 | { | ||
| 69 | unsigned long _tmp = fd / __NFDBITS; | ||
| 70 | unsigned long _rem = fd % __NFDBITS; | ||
| 71 | fdsetp->fds_bits[_tmp] &= ~(1UL<<_rem); | ||
| 72 | } | ||
| 73 | |||
| 74 | #undef __FD_ISSET | ||
| 75 | static __inline__ int __FD_ISSET(unsigned long fd, const __kernel_fd_set *p) | ||
| 76 | { | ||
| 77 | unsigned long _tmp = fd / __NFDBITS; | ||
| 78 | unsigned long _rem = fd % __NFDBITS; | ||
| 79 | return (p->fds_bits[_tmp] & (1UL<<_rem)) != 0; | ||
| 80 | } | ||
| 81 | |||
| 82 | /* | ||
| 83 | * This will unroll the loop for the normal constant case (8 ints, | ||
| 84 | * for a 256-bit fd_set) | ||
| 85 | */ | ||
| 86 | #undef __FD_ZERO | ||
| 87 | static __inline__ void __FD_ZERO(__kernel_fd_set *p) | ||
| 88 | { | ||
| 89 | unsigned long *tmp = p->fds_bits; | ||
| 90 | int i; | ||
| 91 | |||
| 92 | if (__builtin_constant_p(__FDSET_LONGS)) { | ||
| 93 | switch (__FDSET_LONGS) { | ||
| 94 | case 16: | ||
| 95 | tmp[ 0] = 0; tmp[ 1] = 0; tmp[ 2] = 0; tmp[ 3] = 0; | ||
| 96 | tmp[ 4] = 0; tmp[ 5] = 0; tmp[ 6] = 0; tmp[ 7] = 0; | ||
| 97 | tmp[ 8] = 0; tmp[ 9] = 0; tmp[10] = 0; tmp[11] = 0; | ||
| 98 | tmp[12] = 0; tmp[13] = 0; tmp[14] = 0; tmp[15] = 0; | ||
| 99 | return; | ||
| 100 | |||
| 101 | case 8: | ||
| 102 | tmp[ 0] = 0; tmp[ 1] = 0; tmp[ 2] = 0; tmp[ 3] = 0; | ||
| 103 | tmp[ 4] = 0; tmp[ 5] = 0; tmp[ 6] = 0; tmp[ 7] = 0; | ||
| 104 | return; | ||
| 105 | |||
| 106 | case 4: | ||
| 107 | tmp[ 0] = 0; tmp[ 1] = 0; tmp[ 2] = 0; tmp[ 3] = 0; | ||
| 108 | return; | ||
| 109 | } | ||
| 110 | } | ||
| 111 | i = __FDSET_LONGS; | ||
| 112 | while (i) { | ||
| 113 | i--; | ||
| 114 | *tmp = 0; | ||
| 115 | tmp++; | ||
| 116 | } | ||
| 117 | } | ||
| 118 | 15 | ||
| 119 | #endif /* __GNUC__ */ | 16 | typedef unsigned long __kernel_sigset_t; /* at least 32 bits */ |
| 120 | 17 | ||
| 121 | #endif /* __KERNEL__ */ | 18 | #include <asm-generic/posix_types.h> |
| 122 | 19 | ||
| 123 | #endif /* _ALPHA_POSIX_TYPES_H */ | 20 | #endif /* _ALPHA_POSIX_TYPES_H */ |
| @@ -3,4 +3,40 @@ · 2 unmodified lines | |||
| 3 | 3 | ||
| 4 | #define COMMAND_LINE_SIZE 256 | 4 | #define COMMAND_LINE_SIZE 256 |
| 5 | 5 | ||
| 6 | /* | ||
| 7 | * We leave one page for the initial stack page, and one page for | ||
| 8 | * the initial process structure. Also, the console eats 3 MB for | ||
| 9 | * the initial bootloader (one of which we can reclaim later). | ||
| 10 | */ | ||
| 11 | #define BOOT_PCB 0x20000000 | ||
| 12 | #define BOOT_ADDR 0x20000000 | ||
| 13 | /* Remove when official MILO sources have ELF support: */ | ||
| 14 | #define BOOT_SIZE (16*1024) | ||
| 15 | |||
| 16 | #ifdef CONFIG_ALPHA_LEGACY_START_ADDRESS | ||
| 17 | #define KERNEL_START_PHYS 0x300000 /* Old bootloaders hardcoded this. */ | ||
| 18 | #else | ||
| 19 | #define KERNEL_START_PHYS 0x1000000 /* required: Wildfire/Titan/Marvel */ | ||
| 20 | #endif | ||
| 21 | |||
| 22 | #define KERNEL_START (PAGE_OFFSET+KERNEL_START_PHYS) | ||
| 23 | #define SWAPPER_PGD KERNEL_START | ||
| 24 | #define INIT_STACK (PAGE_OFFSET+KERNEL_START_PHYS+0x02000) | ||
| 25 | #define EMPTY_PGT (PAGE_OFFSET+KERNEL_START_PHYS+0x04000) | ||
| 26 | #define EMPTY_PGE (PAGE_OFFSET+KERNEL_START_PHYS+0x08000) | ||
| 27 | #define ZERO_PGE (PAGE_OFFSET+KERNEL_START_PHYS+0x0A000) | ||
| 28 | |||
| 29 | #define START_ADDR (PAGE_OFFSET+KERNEL_START_PHYS+0x10000) | ||
| 30 | |||
| 31 | /* | ||
| 32 | * This is setup by the secondary bootstrap loader. Because | ||
| 33 | * the zero page is zeroed out as soon as the vm system is | ||
| 34 | * initialized, we need to copy things out into a more permanent | ||
| 35 | * place. | ||
| 36 | */ | ||
| 37 | #define PARAM ZERO_PGE | ||
| 38 | #define COMMAND_LINE ((char*)(PARAM + 0x0000)) | ||
| 39 | #define INITRD_START (*(unsigned long *) (PARAM+0x100)) | ||
| 40 | #define INITRD_SIZE (*(unsigned long *) (PARAM+0x108)) | ||
| 41 | |||
| 6 | #endif | 42 | #endif |
| @@ -0,0 +1,41 @@ | |||
| 1 | #ifndef __ALPHA_SPECIAL_INSNS_H | ||
| 2 | #define __ALPHA_SPECIAL_INSNS_H | ||
| 3 | |||
| 4 | enum implver_enum { | ||
| 5 | IMPLVER_EV4, | ||
| 6 | IMPLVER_EV5, | ||
| 7 | IMPLVER_EV6 | ||
| 8 | }; | ||
| 9 | |||
| 10 | #ifdef CONFIG_ALPHA_GENERIC | ||
| 11 | #define implver() \ | ||
| 12 | ({ unsigned long __implver; \ | ||
| 13 | __asm__ ("implver %0" : "=r"(__implver)); \ | ||
| 14 | (enum implver_enum) __implver; }) | ||
| 15 | #else | ||
| 16 | /* Try to eliminate some dead code. */ | ||
| 17 | #ifdef CONFIG_ALPHA_EV4 | ||
| 18 | #define implver() IMPLVER_EV4 | ||
| 19 | #endif | ||
| 20 | #ifdef CONFIG_ALPHA_EV5 | ||
| 21 | #define implver() IMPLVER_EV5 | ||
| 22 | #endif | ||
| 23 | #if defined(CONFIG_ALPHA_EV6) | ||
| 24 | #define implver() IMPLVER_EV6 | ||
| 25 | #endif | ||
| 26 | #endif | ||
| 27 | |||
| 28 | enum amask_enum { | ||
| 29 | AMASK_BWX = (1UL << 0), | ||
| 30 | AMASK_FIX = (1UL << 1), | ||
| 31 | AMASK_CIX = (1UL << 2), | ||
| 32 | AMASK_MAX = (1UL << 8), | ||
| 33 | AMASK_PRECISE_TRAP = (1UL << 9), | ||
| 34 | }; | ||
| 35 | |||
| 36 | #define amask(mask) \ | ||
| 37 | ({ unsigned long __amask, __input = (mask); \ | ||
| 38 | __asm__ ("amask %1,%0" : "=r"(__amask) : "rI"(__input)); \ | ||
| 39 | __amask; }) | ||
| 40 | |||
| 41 | #endif /* __ALPHA_SPECIAL_INSNS_H */ | ||
| @@ -1,7 +1,6 @@ | |||
| 1 | #ifndef _ALPHA_SPINLOCK_H | 1 | #ifndef _ALPHA_SPINLOCK_H |
| 2 | #define _ALPHA_SPINLOCK_H | 2 | #define _ALPHA_SPINLOCK_H |
| 3 | 3 | ||
| 4 | #include <asm/system.h> | ||
| 5 | #include <linux/kernel.h> | 4 | #include <linux/kernel.h> |
| 6 | #include <asm/current.h> | 5 | #include <asm/current.h> |
| 7 | 6 | ||
| @@ -0,0 +1,14 @@ | |||
| 1 | #ifndef __ALPHA_SWITCH_TO_H | ||
| 2 | #define __ALPHA_SWITCH_TO_H | ||
| 3 | |||
| 4 | |||
| 5 | struct task_struct; | ||
| 6 | extern struct task_struct *alpha_switch_to(unsigned long, struct task_struct *); | ||
| 7 | |||
| 8 | #define switch_to(P,N,L) \ | ||
| 9 | do { \ | ||
| 10 | (L) = alpha_switch_to(virt_to_phys(&task_thread_info(N)->pcb), (P)); \ | ||
| 11 | check_mmu_context(); \ | ||
| 12 | } while (0) | ||
| 13 | |||
| 14 | #endif /* __ALPHA_SWITCH_TO_H */ | ||
| @@ -1,354 +0,0 @@ | |||
| 1 | #ifndef __ALPHA_SYSTEM_H | ||
| 2 | #define __ALPHA_SYSTEM_H | ||
| 3 | |||
| 4 | #include <asm/pal.h> | ||
| 5 | #include <asm/page.h> | ||
| 6 | #include <asm/barrier.h> | ||
| 7 | |||
| 8 | /* | ||
| 9 | * System defines.. Note that this is included both from .c and .S | ||
| 10 | * files, so it does only defines, not any C code. | ||
| 11 | */ | ||
| 12 | |||
| 13 | /* | ||
| 14 | * We leave one page for the initial stack page, and one page for | ||
| 15 | * the initial process structure. Also, the console eats 3 MB for | ||
| 16 | * the initial bootloader (one of which we can reclaim later). | ||
| 17 | */ | ||
| 18 | #define BOOT_PCB 0x20000000 | ||
| 19 | #define BOOT_ADDR 0x20000000 | ||
| 20 | /* Remove when official MILO sources have ELF support: */ | ||
| 21 | #define BOOT_SIZE (16*1024) | ||
| 22 | |||
| 23 | #ifdef CONFIG_ALPHA_LEGACY_START_ADDRESS | ||
| 24 | #define KERNEL_START_PHYS 0x300000 /* Old bootloaders hardcoded this. */ | ||
| 25 | #else | ||
| 26 | #define KERNEL_START_PHYS 0x1000000 /* required: Wildfire/Titan/Marvel */ | ||
| 27 | #endif | ||
| 28 | |||
| 29 | #define KERNEL_START (PAGE_OFFSET+KERNEL_START_PHYS) | ||
| 30 | #define SWAPPER_PGD KERNEL_START | ||
| 31 | #define INIT_STACK (PAGE_OFFSET+KERNEL_START_PHYS+0x02000) | ||
| 32 | #define EMPTY_PGT (PAGE_OFFSET+KERNEL_START_PHYS+0x04000) | ||
| 33 | #define EMPTY_PGE (PAGE_OFFSET+KERNEL_START_PHYS+0x08000) | ||
| 34 | #define ZERO_PGE (PAGE_OFFSET+KERNEL_START_PHYS+0x0A000) | ||
| 35 | |||
| 36 | #define START_ADDR (PAGE_OFFSET+KERNEL_START_PHYS+0x10000) | ||
| 37 | |||
| 38 | /* | ||
| 39 | * This is setup by the secondary bootstrap loader. Because | ||
| 40 | * the zero page is zeroed out as soon as the vm system is | ||
| 41 | * initialized, we need to copy things out into a more permanent | ||
| 42 | * place. | ||
| 43 | */ | ||
| 44 | #define PARAM ZERO_PGE | ||
| 45 | #define COMMAND_LINE ((char*)(PARAM + 0x0000)) | ||
| 46 | #define INITRD_START (*(unsigned long *) (PARAM+0x100)) | ||
| 47 | #define INITRD_SIZE (*(unsigned long *) (PARAM+0x108)) | ||
| 48 | |||
| 49 | #ifndef __ASSEMBLY__ | ||
| 50 | #include <linux/kernel.h> | ||
| 51 | #define AT_VECTOR_SIZE_ARCH 4 /* entries in ARCH_DLINFO */ | ||
| 52 | |||
| 53 | /* | ||
| 54 | * This is the logout header that should be common to all platforms | ||
| 55 | * (assuming they are running OSF/1 PALcode, I guess). | ||
| 56 | */ | ||
| 57 | struct el_common { | ||
| 58 | unsigned int size; /* size in bytes of logout area */ | ||
| 59 | unsigned int sbz1 : 30; /* should be zero */ | ||
| 60 | unsigned int err2 : 1; /* second error */ | ||
| 61 | unsigned int retry : 1; /* retry flag */ | ||
| 62 | unsigned int proc_offset; /* processor-specific offset */ | ||
| 63 | unsigned int sys_offset; /* system-specific offset */ | ||
| 64 | unsigned int code; /* machine check code */ | ||
| 65 | unsigned int frame_rev; /* frame revision */ | ||
| 66 | }; | ||
| 67 | |||
| 68 | /* Machine Check Frame for uncorrectable errors (Large format) | ||
| 69 | * --- This is used to log uncorrectable errors such as | ||
| 70 | * double bit ECC errors. | ||
| 71 | * --- These errors are detected by both processor and systems. | ||
| 72 | */ | ||
| 73 | struct el_common_EV5_uncorrectable_mcheck { | ||
| 74 | unsigned long shadow[8]; /* Shadow reg. 8-14, 25 */ | ||
| 75 | unsigned long paltemp[24]; /* PAL TEMP REGS. */ | ||
| 76 | unsigned long exc_addr; /* Address of excepting instruction*/ | ||
| 77 | unsigned long exc_sum; /* Summary of arithmetic traps. */ | ||
| 78 | unsigned long exc_mask; /* Exception mask (from exc_sum). */ | ||
| 79 | unsigned long pal_base; /* Base address for PALcode. */ | ||
| 80 | unsigned long isr; /* Interrupt Status Reg. */ | ||
| 81 | unsigned long icsr; /* CURRENT SETUP OF EV5 IBOX */ | ||
| 82 | unsigned long ic_perr_stat; /* I-CACHE Reg. <11> set Data parity | ||
| 83 | <12> set TAG parity*/ | ||
| 84 | unsigned long dc_perr_stat; /* D-CACHE error Reg. Bits set to 1: | ||
| 85 | <2> Data error in bank 0 | ||
| 86 | <3> Data error in bank 1 | ||
| 87 | <4> Tag error in bank 0 | ||
| 88 | <5> Tag error in bank 1 */ | ||
| 89 | unsigned long va; /* Effective VA of fault or miss. */ | ||
| 90 | unsigned long mm_stat; /* Holds the reason for D-stream | ||
| 91 | fault or D-cache parity errors */ | ||
| 92 | unsigned long sc_addr; /* Address that was being accessed | ||
| 93 | when EV5 detected Secondary cache | ||
| 94 | failure. */ | ||
| 95 | unsigned long sc_stat; /* Helps determine if the error was | ||
| 96 | TAG/Data parity(Secondary Cache)*/ | ||
| 97 | unsigned long bc_tag_addr; /* Contents of EV5 BC_TAG_ADDR */ | ||
| 98 | unsigned long ei_addr; /* Physical address of any transfer | ||
| 99 | that is logged in EV5 EI_STAT */ | ||
| 100 | unsigned long fill_syndrome; /* For correcting ECC errors. */ | ||
| 101 | unsigned long ei_stat; /* Helps identify reason of any | ||
| 102 | processor uncorrectable error | ||
| 103 | at its external interface. */ | ||
| 104 | unsigned long ld_lock; /* Contents of EV5 LD_LOCK register*/ | ||
| 105 | }; | ||
| 106 | |||
| 107 | struct el_common_EV6_mcheck { | ||
| 108 | unsigned int FrameSize; /* Bytes, including this field */ | ||
| 109 | unsigned int FrameFlags; /* <31> = Retry, <30> = Second Error */ | ||
| 110 | unsigned int CpuOffset; /* Offset to CPU-specific info */ | ||
| 111 | unsigned int SystemOffset; /* Offset to system-specific info */ | ||
| 112 | unsigned int MCHK_Code; | ||
| 113 | unsigned int MCHK_Frame_Rev; | ||
| 114 | unsigned long I_STAT; /* EV6 Internal Processor Registers */ | ||
| 115 | unsigned long DC_STAT; /* (See the 21264 Spec) */ | ||
| 116 | unsigned long C_ADDR; | ||
| 117 | unsigned long DC1_SYNDROME; | ||
| 118 | unsigned long DC0_SYNDROME; | ||
| 119 | unsigned long C_STAT; | ||
| 120 | unsigned long C_STS; | ||
| 121 | unsigned long MM_STAT; | ||
| 122 | unsigned long EXC_ADDR; | ||
| 123 | unsigned long IER_CM; | ||
| 124 | unsigned long ISUM; | ||
| 125 | unsigned long RESERVED0; | ||
| 126 | unsigned long PAL_BASE; | ||
| 127 | unsigned long I_CTL; | ||
| 128 | unsigned long PCTX; | ||
| 129 | }; | ||
| 130 | |||
| 131 | extern void halt(void) __attribute__((noreturn)); | ||
| 132 | #define __halt() __asm__ __volatile__ ("call_pal %0 #halt" : : "i" (PAL_halt)) | ||
| 133 | |||
| 134 | #define switch_to(P,N,L) \ | ||
| 135 | do { \ | ||
| 136 | (L) = alpha_switch_to(virt_to_phys(&task_thread_info(N)->pcb), (P)); \ | ||
| 137 | check_mmu_context(); \ | ||
| 138 | } while (0) | ||
| 139 | |||
| 140 | struct task_struct; | ||
| 141 | extern struct task_struct *alpha_switch_to(unsigned long, struct task_struct*); | ||
| 142 | |||
| 143 | #define imb() \ | ||
| 144 | __asm__ __volatile__ ("call_pal %0 #imb" : : "i" (PAL_imb) : "memory") | ||
| 145 | |||
| 146 | #define draina() \ | ||
| 147 | __asm__ __volatile__ ("call_pal %0 #draina" : : "i" (PAL_draina) : "memory") | ||
| 148 | |||
| 149 | enum implver_enum { | ||
| 150 | IMPLVER_EV4, | ||
| 151 | IMPLVER_EV5, | ||
| 152 | IMPLVER_EV6 | ||
| 153 | }; | ||
| 154 | |||
| 155 | #ifdef CONFIG_ALPHA_GENERIC | ||
| 156 | #define implver() \ | ||
| 157 | ({ unsigned long __implver; \ | ||
| 158 | __asm__ ("implver %0" : "=r"(__implver)); \ | ||
| 159 | (enum implver_enum) __implver; }) | ||
| 160 | #else | ||
| 161 | /* Try to eliminate some dead code. */ | ||
| 162 | #ifdef CONFIG_ALPHA_EV4 | ||
| 163 | #define implver() IMPLVER_EV4 | ||
| 164 | #endif | ||
| 165 | #ifdef CONFIG_ALPHA_EV5 | ||
| 166 | #define implver() IMPLVER_EV5 | ||
| 167 | #endif | ||
| 168 | #if defined(CONFIG_ALPHA_EV6) | ||
| 169 | #define implver() IMPLVER_EV6 | ||
| 170 | #endif | ||
| 171 | #endif | ||
| 172 | |||
| 173 | enum amask_enum { | ||
| 174 | AMASK_BWX = (1UL << 0), | ||
| 175 | AMASK_FIX = (1UL << 1), | ||
| 176 | AMASK_CIX = (1UL << 2), | ||
| 177 | AMASK_MAX = (1UL << 8), | ||
| 178 | AMASK_PRECISE_TRAP = (1UL << 9), | ||
| 179 | }; | ||
| 180 | |||
| 181 | #define amask(mask) \ | ||
| 182 | ({ unsigned long __amask, __input = (mask); \ | ||
| 183 | __asm__ ("amask %1,%0" : "=r"(__amask) : "rI"(__input)); \ | ||
| 184 | __amask; }) | ||
| 185 | |||
| 186 | #define __CALL_PAL_R0(NAME, TYPE) \ | ||
| 187 | extern inline TYPE NAME(void) \ | ||
| 188 | { \ | ||
| 189 | register TYPE __r0 __asm__("$0"); \ | ||
| 190 | __asm__ __volatile__( \ | ||
| 191 | "call_pal %1 # " #NAME \ | ||
| 192 | :"=r" (__r0) \ | ||
| 193 | :"i" (PAL_ ## NAME) \ | ||
| 194 | :"$1", "$16", "$22", "$23", "$24", "$25"); \ | ||
| 195 | return __r0; \ | ||
| 196 | } | ||
| 197 | |||
| 198 | #define __CALL_PAL_W1(NAME, TYPE0) \ | ||
| 199 | extern inline void NAME(TYPE0 arg0) \ | ||
| 200 | { \ | ||
| 201 | register TYPE0 __r16 __asm__("$16") = arg0; \ | ||
| 202 | __asm__ __volatile__( \ | ||
| 203 | "call_pal %1 # "#NAME \ | ||
| 204 | : "=r"(__r16) \ | ||
| 205 | : "i"(PAL_ ## NAME), "0"(__r16) \ | ||
| 206 | : "$1", "$22", "$23", "$24", "$25"); \ | ||
| 207 | } | ||
| 208 | |||
| 209 | #define __CALL_PAL_W2(NAME, TYPE0, TYPE1) \ | ||
| 210 | extern inline void NAME(TYPE0 arg0, TYPE1 arg1) \ | ||
| 211 | { \ | ||
| 212 | register TYPE0 __r16 __asm__("$16") = arg0; \ | ||
| 213 | register TYPE1 __r17 __asm__("$17") = arg1; \ | ||
| 214 | __asm__ __volatile__( \ | ||
| 215 | "call_pal %2 # "#NAME \ | ||
| 216 | : "=r"(__r16), "=r"(__r17) \ | ||
| 217 | : "i"(PAL_ ## NAME), "0"(__r16), "1"(__r17) \ | ||
| 218 | : "$1", "$22", "$23", "$24", "$25"); \ | ||
| 219 | } | ||
| 220 | |||
| 221 | #define __CALL_PAL_RW1(NAME, RTYPE, TYPE0) \ | ||
| 222 | extern inline RTYPE NAME(TYPE0 arg0) \ | ||
| 223 | { \ | ||
| 224 | register RTYPE __r0 __asm__("$0"); \ | ||
| 225 | register TYPE0 __r16 __asm__("$16") = arg0; \ | ||
| 226 | __asm__ __volatile__( \ | ||
| 227 | "call_pal %2 # "#NAME \ | ||
| 228 | : "=r"(__r16), "=r"(__r0) \ | ||
| 229 | : "i"(PAL_ ## NAME), "0"(__r16) \ | ||
| 230 | : "$1", "$22", "$23", "$24", "$25"); \ | ||
| 231 | return __r0; \ | ||
| 232 | } | ||
| 233 | |||
| 234 | #define __CALL_PAL_RW2(NAME, RTYPE, TYPE0, TYPE1) \ | ||
| 235 | extern inline RTYPE NAME(TYPE0 arg0, TYPE1 arg1) \ | ||
| 236 | { \ | ||
| 237 | register RTYPE __r0 __asm__("$0"); \ | ||
| 238 | register TYPE0 __r16 __asm__("$16") = arg0; \ | ||
| 239 | register TYPE1 __r17 __asm__("$17") = arg1; \ | ||
| 240 | __asm__ __volatile__( \ | ||
| 241 | "call_pal %3 # "#NAME \ | ||
| 242 | : "=r"(__r16), "=r"(__r17), "=r"(__r0) \ | ||
| 243 | : "i"(PAL_ ## NAME), "0"(__r16), "1"(__r17) \ | ||
| 244 | : "$1", "$22", "$23", "$24", "$25"); \ | ||
| 245 | return __r0; \ | ||
| 246 | } | ||
| 247 | |||
| 248 | __CALL_PAL_W1(cflush, unsigned long); | ||
| 249 | __CALL_PAL_R0(rdmces, unsigned long); | ||
| 250 | __CALL_PAL_R0(rdps, unsigned long); | ||
| 251 | __CALL_PAL_R0(rdusp, unsigned long); | ||
| 252 | __CALL_PAL_RW1(swpipl, unsigned long, unsigned long); | ||
| 253 | __CALL_PAL_R0(whami, unsigned long); | ||
| 254 | __CALL_PAL_W2(wrent, void*, unsigned long); | ||
| 255 | __CALL_PAL_W1(wripir, unsigned long); | ||
| 256 | __CALL_PAL_W1(wrkgp, unsigned long); | ||
| 257 | __CALL_PAL_W1(wrmces, unsigned long); | ||
| 258 | __CALL_PAL_RW2(wrperfmon, unsigned long, unsigned long, unsigned long); | ||
| 259 | __CALL_PAL_W1(wrusp, unsigned long); | ||
| 260 | __CALL_PAL_W1(wrvptptr, unsigned long); | ||
| 261 | |||
| 262 | /* | ||
| 263 | * TB routines.. | ||
| 264 | */ | ||
| 265 | #define __tbi(nr,arg,arg1...) \ | ||
| 266 | ({ \ | ||
| 267 | register unsigned long __r16 __asm__("$16") = (nr); \ | ||
| 268 | register unsigned long __r17 __asm__("$17"); arg; \ | ||
| 269 | __asm__ __volatile__( \ | ||
| 270 | "call_pal %3 #__tbi" \ | ||
| 271 | :"=r" (__r16),"=r" (__r17) \ | ||
| 272 | :"0" (__r16),"i" (PAL_tbi) ,##arg1 \ | ||
| 273 | :"$0", "$1", "$22", "$23", "$24", "$25"); \ | ||
| 274 | }) | ||
| 275 | |||
| 276 | #define tbi(x,y) __tbi(x,__r17=(y),"1" (__r17)) | ||
| 277 | #define tbisi(x) __tbi(1,__r17=(x),"1" (__r17)) | ||
| 278 | #define tbisd(x) __tbi(2,__r17=(x),"1" (__r17)) | ||
| 279 | #define tbis(x) __tbi(3,__r17=(x),"1" (__r17)) | ||
| 280 | #define tbiap() __tbi(-1, /* no second argument */) | ||
| 281 | #define tbia() __tbi(-2, /* no second argument */) | ||
| 282 | |||
| 283 | /* | ||
| 284 | * Atomic exchange routines. | ||
| 285 | */ | ||
| 286 | |||
| 287 | #define __ASM__MB | ||
| 288 | #define ____xchg(type, args...) __xchg ## type ## _local(args) | ||
| 289 | #define ____cmpxchg(type, args...) __cmpxchg ## type ## _local(args) | ||
| 290 | #include <asm/xchg.h> | ||
| 291 | |||
| 292 | #define xchg_local(ptr,x) \ | ||
| 293 | ({ \ | ||
| 294 | __typeof__(*(ptr)) _x_ = (x); \ | ||
| 295 | (__typeof__(*(ptr))) __xchg_local((ptr), (unsigned long)_x_, \ | ||
| 296 | sizeof(*(ptr))); \ | ||
| 297 | }) | ||
| 298 | |||
| 299 | #define cmpxchg_local(ptr, o, n) \ | ||
| 300 | ({ \ | ||
| 301 | __typeof__(*(ptr)) _o_ = (o); \ | ||
| 302 | __typeof__(*(ptr)) _n_ = (n); \ | ||
| 303 | (__typeof__(*(ptr))) __cmpxchg_local((ptr), (unsigned long)_o_, \ | ||
| 304 | (unsigned long)_n_, \ | ||
| 305 | sizeof(*(ptr))); \ | ||
| 306 | }) | ||
| 307 | |||
| 308 | #define cmpxchg64_local(ptr, o, n) \ | ||
| 309 | ({ \ | ||
| 310 | BUILD_BUG_ON(sizeof(*(ptr)) != 8); \ | ||
| 311 | cmpxchg_local((ptr), (o), (n)); \ | ||
| 312 | }) | ||
| 313 | |||
| 314 | #ifdef CONFIG_SMP | ||
| 315 | #undef __ASM__MB | ||
| 316 | #define __ASM__MB "\tmb\n" | ||
| 317 | #endif | ||
| 318 | #undef ____xchg | ||
| 319 | #undef ____cmpxchg | ||
| 320 | #define ____xchg(type, args...) __xchg ##type(args) | ||
| 321 | #define ____cmpxchg(type, args...) __cmpxchg ##type(args) | ||
| 322 | #include <asm/xchg.h> | ||
| 323 | |||
| 324 | #define xchg(ptr,x) \ | ||
| 325 | ({ \ | ||
| 326 | __typeof__(*(ptr)) _x_ = (x); \ | ||
| 327 | (__typeof__(*(ptr))) __xchg((ptr), (unsigned long)_x_, \ | ||
| 328 | sizeof(*(ptr))); \ | ||
| 329 | }) | ||
| 330 | |||
| 331 | #define cmpxchg(ptr, o, n) \ | ||
| 332 | ({ \ | ||
| 333 | __typeof__(*(ptr)) _o_ = (o); \ | ||
| 334 | __typeof__(*(ptr)) _n_ = (n); \ | ||
| 335 | (__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_, \ | ||
| 336 | (unsigned long)_n_, sizeof(*(ptr)));\ | ||
| 337 | }) | ||
| 338 | |||
| 339 | #define cmpxchg64(ptr, o, n) \ | ||
| 340 | ({ \ | ||
| 341 | BUILD_BUG_ON(sizeof(*(ptr)) != 8); \ | ||
| 342 | cmpxchg((ptr), (o), (n)); \ | ||
| 343 | }) | ||
| 344 | |||
| 345 | #undef __ASM__MB | ||
| 346 | #undef ____cmpxchg | ||
| 347 | |||
| 348 | #define __HAVE_ARCH_CMPXCHG 1 | ||
| 349 | |||
| 350 | #endif /* __ASSEMBLY__ */ | ||
| 351 | |||
| 352 | #define arch_align_stack(x) (x) | ||
| 353 | |||
| 354 | #endif | ||
| @@ -1,10 +1,10 @@ | |||
| 1 | #ifndef __ALPHA_SYSTEM_H | 1 | #ifndef _ALPHA_CMPXCHG_H |
| 2 | #error Do not include xchg.h directly! | 2 | #error Do not include xchg.h directly! |
| 3 | #else | 3 | #else |
| 4 | /* | 4 | /* |
| 5 | * xchg/xchg_local and cmpxchg/cmpxchg_local share the same code | 5 | * xchg/xchg_local and cmpxchg/cmpxchg_local share the same code |
| 6 | * except that local version do not have the expensive memory barrier. | 6 | * except that local version do not have the expensive memory barrier. |
| 7 | * So this file is included twice from asm/system.h. | 7 | * So this file is included twice from asm/cmpxchg.h. |
| 8 | */ | 8 | */ |
| 9 | 9 | ||
| 10 | /* | 10 | /* |
| @@ -21,6 +21,7 @@ · 20 unmodified lines | |||
| 21 | 21 | ||
| 22 | #include <asm/ptrace.h> | 22 | #include <asm/ptrace.h> |
| 23 | #include <asm/smp.h> | 23 | #include <asm/smp.h> |
| 24 | #include <asm/mce.h> | ||
| 24 | 25 | ||
| 25 | #include "proto.h" | 26 | #include "proto.h" |
| 26 | #include "pci_impl.h" | 27 | #include "pci_impl.h" |
| @@ -23,6 +23,7 @@ · 22 unmodified lines | |||
| 23 | #include <linux/bootmem.h> | 23 | #include <linux/bootmem.h> |
| 24 | 24 | ||
| 25 | #include <asm/ptrace.h> | 25 | #include <asm/ptrace.h> |
| 26 | #include <asm/mce.h> | ||
| 26 | 27 | ||
| 27 | #include "proto.h" | 28 | #include "proto.h" |
| 28 | #include "pci_impl.h" | 29 | #include "pci_impl.h" |
| @@ -21,6 +21,7 @@ · 20 unmodified lines | |||
| 21 | 21 | ||
| 22 | #include <asm/ptrace.h> | 22 | #include <asm/ptrace.h> |
| 23 | #include <asm/delay.h> | 23 | #include <asm/delay.h> |
| 24 | #include <asm/mce.h> | ||
| 24 | 25 | ||
| 25 | #include "proto.h" | 26 | #include "proto.h" |
| 26 | #include "pci_impl.h" | 27 | #include "pci_impl.h" |
| @@ -7,6 +7,8 @@ · 6 unmodified lines | |||
| 7 | * implementations. | 7 | * implementations. |
| 8 | */ | 8 | */ |
| 9 | 9 | ||
| 10 | #include <asm/mce.h> | ||
| 11 | |||
| 10 | union el_timestamp; | 12 | union el_timestamp; |
| 11 | struct el_subpacket; | 13 | struct el_subpacket; |
| 12 | struct ev7_lf_subpackets; | 14 | struct ev7_lf_subpackets; |
| @@ -8,14 +8,12 @@ · 7 unmodified lines | |||
| 8 | */ | 8 | */ |
| 9 | 9 | ||
| 10 | #include <linux/init.h> | 10 | #include <linux/init.h> |
| 11 | #include <asm/system.h> | ||
| 12 | #include <asm/asm-offsets.h> | 11 | #include <asm/asm-offsets.h> |
| 12 | #include <asm/pal.h> | ||
| 13 | #include <asm/setup.h> | ||
| 13 | 14 | ||
| 14 | __HEAD | 15 | __HEAD |
| 15 | .globl swapper_pg_dir | ||
| 16 | .globl _stext | 16 | .globl _stext |
| 17 | swapper_pg_dir=SWAPPER_PGD | ||
| 18 | |||
| 19 | .set noreorder | 17 | .set noreorder |
| 20 | .globl __start | 18 | .globl __start |
| 21 | .ent __start | 19 | .ent __start |
| @@ -26,7 +26,6 @@ · 25 unmodified lines | |||
| 26 | #include <linux/profile.h> | 26 | #include <linux/profile.h> |
| 27 | #include <linux/bitops.h> | 27 | #include <linux/bitops.h> |
| 28 | 28 | ||
| 29 | #include <asm/system.h> | ||
| 30 | #include <asm/io.h> | 29 | #include <asm/io.h> |
| 31 | #include <asm/uaccess.h> | 30 | #include <asm/uaccess.h> |
| 32 | 31 | ||
| @@ -11,6 +11,7 @@ · 10 unmodified lines | |||
| 11 | #include <asm/machvec.h> | 11 | #include <asm/machvec.h> |
| 12 | #include <asm/dma.h> | 12 | #include <asm/dma.h> |
| 13 | #include <asm/perf_event.h> | 13 | #include <asm/perf_event.h> |
| 14 | #include <asm/mce.h> | ||
| 14 | 15 | ||
| 15 | #include "proto.h" | 16 | #include "proto.h" |
| 16 | #include "irq_impl.h" | 17 | #include "irq_impl.h" |
| @@ -40,7 +40,6 @@ · 39 unmodified lines | |||
| 40 | #include <asm/fpu.h> | 40 | #include <asm/fpu.h> |
| 41 | #include <asm/io.h> | 41 | #include <asm/io.h> |
| 42 | #include <asm/uaccess.h> | 42 | #include <asm/uaccess.h> |
| 43 | #include <asm/system.h> | ||
| 44 | #include <asm/sysinfo.h> | 43 | #include <asm/sysinfo.h> |
| 45 | #include <asm/thread_info.h> | 44 | #include <asm/thread_info.h> |
| 46 | #include <asm/hwrpb.h> | 45 | #include <asm/hwrpb.h> |
| @@ -108,7 +108,8 @@ sys_pciconfig_write(unsigned long bus, unsigned long dfn, · 107 unmodified lines | |||
| 108 | } | 108 | } |
| 109 | 109 | ||
| 110 | static void *alpha_noop_alloc_coherent(struct device *dev, size_t size, | 110 | static void *alpha_noop_alloc_coherent(struct device *dev, size_t size, |
| 111 | dma_addr_t *dma_handle, gfp_t gfp) | 111 | dma_addr_t *dma_handle, gfp_t gfp, |
| 112 | struct dma_attrs *attrs) | ||
| 112 | { | 113 | { |
| 113 | void *ret; | 114 | void *ret; |
| 114 | 115 | ||
| @@ -123,7 +124,8 @@ static void *alpha_noop_alloc_coherent(struct device *dev, size_t size, · 8 unmodified lines | |||
| 123 | } | 124 | } |
| 124 | 125 | ||
| 125 | static void alpha_noop_free_coherent(struct device *dev, size_t size, | 126 | static void alpha_noop_free_coherent(struct device *dev, size_t size, |
| 126 | void *cpu_addr, dma_addr_t dma_addr) | 127 | void *cpu_addr, dma_addr_t dma_addr, |
| 128 | struct dma_attrs *attrs) | ||
| 127 | { | 129 | { |
| 128 | free_pages((unsigned long)cpu_addr, get_order(size)); | 130 | free_pages((unsigned long)cpu_addr, get_order(size)); |
| 129 | } | 131 | } |
| @@ -174,8 +176,8 @@ static int alpha_noop_set_mask(struct device *dev, u64 mask) · 44 unmodified lines | |||
| 174 | } | 176 | } |
| 175 | 177 | ||
| 176 | struct dma_map_ops alpha_noop_ops = { | 178 | struct dma_map_ops alpha_noop_ops = { |
| 177 | .alloc_coherent = alpha_noop_alloc_coherent, | 179 | .alloc = alpha_noop_alloc_coherent, |
| 178 | .free_coherent = alpha_noop_free_coherent, | 180 | .free = alpha_noop_free_coherent, |
| 179 | .map_page = alpha_noop_map_page, | 181 | .map_page = alpha_noop_map_page, |
| 180 | .map_sg = alpha_noop_map_sg, | 182 | .map_sg = alpha_noop_map_sg, |
| 181 | .mapping_error = alpha_noop_mapping_error, | 183 | .mapping_error = alpha_noop_mapping_error, |
| @@ -43,12 +43,10 @@ const char *const pci_mem_names[] = { · 42 unmodified lines | |||
| 43 | 43 | ||
| 44 | const char pci_hae0_name[] = "HAE0"; | 44 | const char pci_hae0_name[] = "HAE0"; |
| 45 | 45 | ||
| 46 | /* Indicate whether we respect the PCI setup left by console. */ | ||
| 47 | /* | 46 | /* |
| 48 | * Make this long-lived so that we know when shutting down | 47 | * If PCI_PROBE_ONLY in pci_flags is set, we don't change any PCI resource |
| 49 | * whether we probed only or not. | 48 | * assignments. |
| 50 | */ | 49 | */ |
| 51 | int pci_probe_only; | ||
| 52 | 50 | ||
| 53 | /* | 51 | /* |
| 54 | * The PCI controller list. | 52 | * The PCI controller list. |
| @@ -215,7 +213,7 @@ pdev_save_srm_config(struct pci_dev *dev) · 160 unmodified lines | |||
| 215 | struct pdev_srm_saved_conf *tmp; | 213 | struct pdev_srm_saved_conf *tmp; |
| 216 | static int printed = 0; | 214 | static int printed = 0; |
| 217 | 215 | ||
| 218 | if (!alpha_using_srm || pci_probe_only) | 216 | if (!alpha_using_srm || pci_has_flag(PCI_PROBE_ONLY)) |
| 219 | return; | 217 | return; |
| 220 | 218 | ||
| 221 | if (!printed) { | 219 | if (!printed) { |
| @@ -242,7 +240,7 @@ pci_restore_srm_config(void) · 20 unmodified lines | |||
| 242 | struct pdev_srm_saved_conf *tmp; | 240 | struct pdev_srm_saved_conf *tmp; |
| 243 | 241 | ||
| 244 | /* No need to restore if probed only. */ | 242 | /* No need to restore if probed only. */ |
| 245 | if (pci_probe_only) | 243 | if (pci_has_flag(PCI_PROBE_ONLY)) |
| 246 | return; | 244 | return; |
| 247 | 245 | ||
| 248 | /* Restore SRM config. */ | 246 | /* Restore SRM config. */ |
| @@ -252,47 +250,18 @@ pci_restore_srm_config(void) · 3 unmodified lines | |||
| 252 | } | 250 | } |
| 253 | #endif | 251 | #endif |
| 254 | 252 | ||
| 255 | void __devinit | ||
| 256 | pcibios_fixup_resource(struct resource *res, struct resource *root) | ||
| 257 | { | ||
| 258 | res->start += root->start; | ||
| 259 | res->end += root->start; | ||
| 260 | } | ||
| 261 | |||
| 262 | void __devinit | ||
| 263 | pcibios_fixup_device_resources(struct pci_dev *dev, struct pci_bus *bus) | ||
| 264 | { | ||
| 265 | /* Update device resources. */ | ||
| 266 | struct pci_controller *hose = (struct pci_controller *)bus->sysdata; | ||
| 267 | int i; | ||
| 268 | |||
| 269 | for (i = 0; i < PCI_NUM_RESOURCES; i++) { | ||
| 270 | if (!dev->resource[i].start) | ||
| 271 | continue; | ||
| 272 | if (dev->resource[i].flags & IORESOURCE_IO) | ||
| 273 | pcibios_fixup_resource(&dev->resource[i], | ||
| 274 | hose->io_space); | ||
| 275 | else if (dev->resource[i].flags & IORESOURCE_MEM) | ||
| 276 | pcibios_fixup_resource(&dev->resource[i], | ||
| 277 | hose->mem_space); | ||
| 278 | } | ||
| 279 | } | ||
| 280 | |||
| 281 | void __devinit | 253 | void __devinit |
| 282 | pcibios_fixup_bus(struct pci_bus *bus) | 254 | pcibios_fixup_bus(struct pci_bus *bus) |
| 283 | { | 255 | { |
| 284 | struct pci_dev *dev = bus->self; | 256 | struct pci_dev *dev = bus->self; |
| 285 | 257 | ||
| 286 | if (pci_probe_only && dev && | 258 | if (pci_has_flag(PCI_PROBE_ONLY) && dev && |
| 287 | (dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) { | 259 | (dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) { |
| 288 | pci_read_bridge_bases(bus); | 260 | pci_read_bridge_bases(bus); |
| 289 | pcibios_fixup_device_resources(dev, bus); | ||
| 290 | } | 261 | } |
| 291 | 262 | ||
| 292 | list_for_each_entry(dev, &bus->devices, bus_list) { | 263 | list_for_each_entry(dev, &bus->devices, bus_list) { |
| 293 | pdev_save_srm_config(dev); | 264 | pdev_save_srm_config(dev); |
| 294 | if ((dev->class >> 8) != PCI_CLASS_BRIDGE_PCI) | ||
| 295 | pcibios_fixup_device_resources(dev, bus); | ||
| 296 | } | 265 | } |
| 297 | } | 266 | } |
| 298 | 267 | ||
| @@ -302,42 +271,6 @@ pcibios_update_irq(struct pci_dev *dev, int irq) · 3 unmodified lines | |||
| 302 | pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq); | 271 | pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq); |
| 303 | } | 272 | } |
| 304 | 273 | ||
| 305 | void | ||
| 306 | pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, | ||
| 307 | struct resource *res) | ||
| 308 | { | ||
| 309 | struct pci_controller *hose = (struct pci_controller *)dev->sysdata; | ||
| 310 | unsigned long offset = 0; | ||
| 311 | |||
| 312 | if (res->flags & IORESOURCE_IO) | ||
| 313 | offset = hose->io_space->start; | ||
| 314 | else if (res->flags & IORESOURCE_MEM) | ||
| 315 | offset = hose->mem_space->start; | ||
| 316 | |||
| 317 | region->start = res->start - offset; | ||
| 318 | region->end = res->end - offset; | ||
| 319 | } | ||
| 320 | |||
| 321 | void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, | ||
| 322 | struct pci_bus_region *region) | ||
| 323 | { | ||
| 324 | struct pci_controller *hose = (struct pci_controller *)dev->sysdata; | ||
| 325 | unsigned long offset = 0; | ||
| 326 | |||
| 327 | if (res->flags & IORESOURCE_IO) | ||
| 328 | offset = hose->io_space->start; | ||
| 329 | else if (res->flags & IORESOURCE_MEM) | ||
| 330 | offset = hose->mem_space->start; | ||
| 331 | |||
| 332 | res->start = region->start + offset; | ||
| 333 | res->end = region->end + offset; | ||
| 334 | } | ||
| 335 | |||
| 336 | #ifdef CONFIG_HOTPLUG | ||
| 337 | EXPORT_SYMBOL(pcibios_resource_to_bus); | ||
| 338 | EXPORT_SYMBOL(pcibios_bus_to_resource); | ||
| 339 | #endif | ||
| 340 | |||
| 341 | int | 274 | int |
| 342 | pcibios_enable_device(struct pci_dev *dev, int mask) | 275 | pcibios_enable_device(struct pci_dev *dev, int mask) |
| 343 | { | 276 | { |
| @@ -374,7 +307,8 @@ pcibios_claim_one_bus(struct pci_bus *b) · 30 unmodified lines | |||
| 374 | 307 | ||
| 375 | if (r->parent || !r->start || !r->flags) | 308 | if (r->parent || !r->start || !r->flags) |
| 376 | continue; | 309 | continue; |
| 377 | if (pci_probe_only || (r->flags & IORESOURCE_PCI_FIXED)) | 310 | if (pci_has_flag(PCI_PROBE_ONLY) || |
| 311 | (r->flags & IORESOURCE_PCI_FIXED)) | ||
| 378 | pci_claim_resource(dev, i); | 312 | pci_claim_resource(dev, i); |
| 379 | } | 313 | } |
| 380 | } | 314 | } |
| @@ -416,8 +350,10 @@ common_init_pci(void) · 35 unmodified lines | |||
| 416 | hose->mem_space->end = end; | 350 | hose->mem_space->end = end; |
| 417 | 351 | ||
| 418 | INIT_LIST_HEAD(&resources); | 352 | INIT_LIST_HEAD(&resources); |
| 419 | pci_add_resource(&resources, hose->io_space); | 353 | pci_add_resource_offset(&resources, hose->io_space, |
| 420 | pci_add_resource(&resources, hose->mem_space); | 354 | hose->io_space->start); |
| 355 | pci_add_resource_offset(&resources, hose->mem_space, | ||
| 356 | hose->mem_space->start); | ||
| 421 | 357 | ||
| 422 | bus = pci_scan_root_bus(NULL, next_busno, alpha_mv.pci_ops, | 358 | bus = pci_scan_root_bus(NULL, next_busno, alpha_mv.pci_ops, |
| 423 | hose, &resources); | 359 | hose, &resources); |
| @@ -173,9 +173,6 @@ extern void pci_restore_srm_config(void); · 172 unmodified lines | |||
| 173 | extern struct pci_controller *hose_head, **hose_tail; | 173 | extern struct pci_controller *hose_head, **hose_tail; |
| 174 | extern struct pci_controller *pci_isa_hose; | 174 | extern struct pci_controller *pci_isa_hose; |
| 175 | 175 | ||
| 176 | /* Indicate that we trust the console to configure things properly. */ | ||
| 177 | extern int pci_probe_only; | ||
| 178 | |||
| 179 | extern unsigned long alpha_agpgart_size; | 176 | extern unsigned long alpha_agpgart_size; |
| 180 | 177 | ||
| 181 | extern void common_init_pci(void); | 178 | extern void common_init_pci(void); |
| @@ -434,7 +434,8 @@ static void alpha_pci_unmap_page(struct device *dev, dma_addr_t dma_addr, · 433 unmodified lines | |||
| 434 | else DMA_ADDRP is undefined. */ | 434 | else DMA_ADDRP is undefined. */ |
| 435 | 435 | ||
| 436 | static void *alpha_pci_alloc_coherent(struct device *dev, size_t size, | 436 | static void *alpha_pci_alloc_coherent(struct device *dev, size_t size, |
| 437 | dma_addr_t *dma_addrp, gfp_t gfp) | 437 | dma_addr_t *dma_addrp, gfp_t gfp, |
| 438 | struct dma_attrs *attrs) | ||
| 438 | { | 439 | { |
| 439 | struct pci_dev *pdev = alpha_gendev_to_pci(dev); | 440 | struct pci_dev *pdev = alpha_gendev_to_pci(dev); |
| 440 | void *cpu_addr; | 441 | void *cpu_addr; |
| @@ -478,7 +479,8 @@ try_again: · 37 unmodified lines | |||
| 478 | DMA_ADDR past this call are illegal. */ | 479 | DMA_ADDR past this call are illegal. */ |
| 479 | 480 | ||
| 480 | static void alpha_pci_free_coherent(struct device *dev, size_t size, | 481 | static void alpha_pci_free_coherent(struct device *dev, size_t size, |
| 481 | void *cpu_addr, dma_addr_t dma_addr) | 482 | void *cpu_addr, dma_addr_t dma_addr, |
| 483 | struct dma_attrs *attrs) | ||
| 482 | { | 484 | { |
| 483 | struct pci_dev *pdev = alpha_gendev_to_pci(dev); | 485 | struct pci_dev *pdev = alpha_gendev_to_pci(dev); |
| 484 | pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL); | 486 | pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL); |
| @@ -952,8 +954,8 @@ static int alpha_pci_set_mask(struct device *dev, u64 mask) · 467 unmodified lines | |||
| 952 | } | 954 | } |
| 953 | 955 | ||
| 954 | struct dma_map_ops alpha_pci_ops = { | 956 | struct dma_map_ops alpha_pci_ops = { |
| 955 | .alloc_coherent = alpha_pci_alloc_coherent, | 957 | .alloc = alpha_pci_alloc_coherent, |
| 956 | .free_coherent = alpha_pci_free_coherent, | 958 | .free = alpha_pci_free_coherent, |
| 957 | .map_page = alpha_pci_map_page, | 959 | .map_page = alpha_pci_map_page, |
| 958 | .unmap_page = alpha_pci_unmap_page, | 960 | .unmap_page = alpha_pci_unmap_page, |
| 959 | .map_sg = alpha_pci_map_sg, | 961 | .map_sg = alpha_pci_map_sg, |
| @@ -31,7 +31,6 @@ · 30 unmodified lines | |||
| 31 | 31 | ||
| 32 | #include <asm/reg.h> | 32 | #include <asm/reg.h> |
| 33 | #include <asm/uaccess.h> | 33 | #include <asm/uaccess.h> |
| 34 | #include <asm/system.h> | ||
| 35 | #include <asm/io.h> | 34 | #include <asm/io.h> |
| 36 | #include <asm/pgtable.h> | 35 | #include <asm/pgtable.h> |
| 37 | #include <asm/hwrpb.h> | 36 | #include <asm/hwrpb.h> |
| @@ -16,7 +16,6 @@ · 15 unmodified lines | |||
| 16 | 16 | ||
| 17 | #include <asm/uaccess.h> | 17 | #include <asm/uaccess.h> |
| 18 | #include <asm/pgtable.h> | 18 | #include <asm/pgtable.h> |
| 19 | #include <asm/system.h> | ||
| 20 | #include <asm/fpu.h> | 19 | #include <asm/fpu.h> |
| 21 | 20 | ||
| 22 | #include "proto.h" | 21 | #include "proto.h" |
| @@ -55,7 +55,6 @@ static struct notifier_block alpha_panic_block = { · 54 unmodified lines | |||
| 55 | 55 | ||
| 56 | #include <asm/uaccess.h> | 56 | #include <asm/uaccess.h> |
| 57 | #include <asm/pgtable.h> | 57 | #include <asm/pgtable.h> |
| 58 | #include <asm/system.h> | ||
| 59 | #include <asm/hwrpb.h> | 58 | #include <asm/hwrpb.h> |
| 60 | #include <asm/dma.h> | 59 | #include <asm/dma.h> |
| 61 | #include <asm/mmu_context.h> | 60 | #include <asm/mmu_context.h> |
| @@ -120,12 +120,13 @@ SYSCALL_DEFINE5(rt_sigaction, int, sig, const struct sigaction __user *, act, · 119 unmodified lines | |||
| 120 | */ | 120 | */ |
| 121 | SYSCALL_DEFINE1(sigsuspend, old_sigset_t, mask) | 121 | SYSCALL_DEFINE1(sigsuspend, old_sigset_t, mask) |
| 122 | { | 122 | { |
| 123 | mask &= _BLOCKABLE; | 123 | sigset_t blocked; |
| 124 | spin_lock_irq(¤t->sighand->siglock); | 124 | |
| 125 | current->saved_sigmask = current->blocked; | 125 | current->saved_sigmask = current->blocked; |
| 126 | siginitset(¤t->blocked, mask); | 126 | |
| 127 | recalc_sigpending(); | 127 | mask &= _BLOCKABLE; |
| 128 | spin_unlock_irq(¤t->sighand->siglock); | 128 | siginitset(&blocked, mask); |
| 129 | set_current_blocked(&blocked); | ||
| 129 | 130 | ||
| 130 | current->state = TASK_INTERRUPTIBLE; | 131 | current->state = TASK_INTERRUPTIBLE; |
| 131 | schedule(); | 132 | schedule(); |
| @@ -238,10 +239,7 @@ do_sigreturn(struct sigcontext __user *sc, struct pt_regs *regs, · 106 unmodified lines | |||
| 238 | goto give_sigsegv; | 239 | goto give_sigsegv; |
| 239 | 240 | ||
| 240 | sigdelsetmask(&set, ~_BLOCKABLE); | 241 | sigdelsetmask(&set, ~_BLOCKABLE); |
| 241 | spin_lock_irq(¤t->sighand->siglock); | 242 | set_current_blocked(&set); |
| 242 | current->blocked = set; | ||
| 243 | recalc_sigpending(); | ||
| 244 | spin_unlock_irq(¤t->sighand->siglock); | ||
| 245 | 243 | ||
| 246 | if (restore_sigcontext(sc, regs, sw)) | 244 | if (restore_sigcontext(sc, regs, sw)) |
| 247 | goto give_sigsegv; | 245 | goto give_sigsegv; |
| @@ -276,10 +274,7 @@ do_rt_sigreturn(struct rt_sigframe __user *frame, struct pt_regs *regs, · 28 unmodified lines | |||
| 276 | goto give_sigsegv; | 274 | goto give_sigsegv; |
| 277 | 275 | ||
| 278 | sigdelsetmask(&set, ~_BLOCKABLE); | 276 | sigdelsetmask(&set, ~_BLOCKABLE); |
| 279 | spin_lock_irq(¤t->sighand->siglock); | 277 | set_current_blocked(&set); |
| 280 | current->blocked = set; | ||
| 281 | recalc_sigpending(); | ||
| 282 | spin_unlock_irq(¤t->sighand->siglock); | ||
| 283 | 278 | ||
| 284 | if (restore_sigcontext(&frame->uc.uc_mcontext, regs, sw)) | 279 | if (restore_sigcontext(&frame->uc.uc_mcontext, regs, sw)) |
| 285 | goto give_sigsegv; | 280 | goto give_sigsegv; |
| @@ -501,14 +496,8 @@ handle_signal(int sig, struct k_sigaction *ka, siginfo_t *info, · 215 unmodified lines | |||
| 501 | else | 496 | else |
| 502 | ret = setup_frame(sig, ka, oldset, regs, sw); | 497 | ret = setup_frame(sig, ka, oldset, regs, sw); |
| 503 | 498 | ||
| 504 | if (ret == 0) { | 499 | if (ret == 0) |
| 505 | spin_lock_irq(¤t->sighand->siglock); | 500 | block_sigmask(ka, sig); |
| 506 | sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); | ||
| 507 | if (!(ka->sa.sa_flags & SA_NODEFER)) | ||
| 508 | sigaddset(¤t->blocked,sig); | ||
| 509 | recalc_sigpending(); | ||
| 510 | spin_unlock_irq(¤t->sighand->siglock); | ||
| 511 | } | ||
| 512 | 501 | ||
| 513 | return ret; | 502 | return ret; |
| 514 | } | 503 | } |
| @@ -450,7 +450,7 @@ setup_smp(void) · 449 unmodified lines | |||
| 450 | smp_num_probed = 1; | 450 | smp_num_probed = 1; |
| 451 | } | 451 | } |
| 452 | 452 | ||
| 453 | printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_map = %lx\n", | 453 | printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_mask = %lx\n", |
| 454 | smp_num_probed, cpumask_bits(cpu_present_mask)[0]); | 454 | smp_num_probed, cpumask_bits(cpu_present_mask)[0]); |
| 455 | } | 455 | } |
| 456 | 456 | ||
| @@ -18,7 +18,6 @@ · 17 unmodified lines | |||
| 18 | #include <linux/bitops.h> | 18 | #include <linux/bitops.h> |
| 19 | 19 | ||
| 20 | #include <asm/ptrace.h> | 20 | #include <asm/ptrace.h> |
| 21 | #include <asm/system.h> | ||
| 22 | #include <asm/io.h> | 21 | #include <asm/io.h> |
| 23 | #include <asm/dma.h> | 22 | #include <asm/dma.h> |
| 24 | #include <asm/mmu_context.h> | 23 | #include <asm/mmu_context.h> |
| @@ -18,7 +18,6 @@ · 17 unmodified lines | |||
| 18 | #include <linux/bitops.h> | 18 | #include <linux/bitops.h> |
| 19 | 19 | ||
| 20 | #include <asm/ptrace.h> | 20 | #include <asm/ptrace.h> |
| 21 | #include <asm/system.h> | ||
| 22 | #include <asm/dma.h> | 21 | #include <asm/dma.h> |
| 23 | #include <asm/irq.h> | 22 | #include <asm/irq.h> |
| 24 | #include <asm/mmu_context.h> | 23 | #include <asm/mmu_context.h> |
| @@ -21,7 +21,6 @@ · 20 unmodified lines | |||
| 21 | #include <linux/bitops.h> | 21 | #include <linux/bitops.h> |
| 22 | 22 | ||
| 23 | #include <asm/ptrace.h> | 23 | #include <asm/ptrace.h> |
| 24 | #include <asm/system.h> | ||
| 25 | #include <asm/dma.h> | 24 | #include <asm/dma.h> |
| 26 | #include <asm/irq.h> | 25 | #include <asm/irq.h> |
| 27 | #include <asm/mmu_context.h> | 26 | #include <asm/mmu_context.h> |
| @@ -17,7 +17,6 @@ · 16 unmodified lines | |||
| 17 | #include <linux/bitops.h> | 17 | #include <linux/bitops.h> |
| 18 | 18 | ||
| 19 | #include <asm/ptrace.h> | 19 | #include <asm/ptrace.h> |
| 20 | #include <asm/system.h> | ||
| 21 | #include <asm/dma.h> | 20 | #include <asm/dma.h> |
| 22 | #include <asm/irq.h> | 21 | #include <asm/irq.h> |
| 23 | #include <asm/mmu_context.h> | 22 | #include <asm/mmu_context.h> |
| @@ -18,7 +18,6 @@ · 17 unmodified lines | |||
| 18 | #include <linux/bitops.h> | 18 | #include <linux/bitops.h> |
| 19 | 19 | ||
| 20 | #include <asm/ptrace.h> | 20 | #include <asm/ptrace.h> |
| 21 | #include <asm/system.h> | ||
| 22 | #include <asm/dma.h> | 21 | #include <asm/dma.h> |
| 23 | #include <asm/irq.h> | 22 | #include <asm/irq.h> |
| 24 | #include <asm/mmu_context.h> | 23 | #include <asm/mmu_context.h> |
| @@ -15,7 +15,6 @@ · 14 unmodified lines | |||
| 15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
| 16 | 16 | ||
| 17 | #include <asm/ptrace.h> | 17 | #include <asm/ptrace.h> |
| 18 | #include <asm/system.h> | ||
| 19 | 18 | ||
| 20 | #define __EXTERN_INLINE inline | 19 | #define __EXTERN_INLINE inline |
| 21 | #include <asm/io.h> | 20 | #include <asm/io.h> |
| @@ -13,7 +13,6 @@ · 12 unmodified lines | |||
| 13 | #include <linux/bitops.h> | 13 | #include <linux/bitops.h> |
| 14 | 14 | ||
| 15 | #include <asm/ptrace.h> | 15 | #include <asm/ptrace.h> |
| 16 | #include <asm/system.h> | ||
| 17 | #include <asm/dma.h> | 16 | #include <asm/dma.h> |
| 18 | #include <asm/irq.h> | 17 | #include <asm/irq.h> |
| 19 | #include <asm/mmu_context.h> | 18 | #include <asm/mmu_context.h> |
| @@ -384,7 +383,8 @@ marvel_init_pci(void) · 364 unmodified lines | |||
| 384 | 383 | ||
| 385 | marvel_register_error_handlers(); | 384 | marvel_register_error_handlers(); |
| 386 | 385 | ||
| 387 | pci_probe_only = 1; | 386 | /* Indicate that we trust the console to configure things properly */ |
| 387 | pci_set_flags(PCI_PROBE_ONLY); | ||
| 388 | common_init_pci(); | 388 | common_init_pci(); |
| 389 | locate_and_init_vga(NULL); | 389 | locate_and_init_vga(NULL); |
| 390 | 390 | ||
| @@ -17,7 +17,6 @@ · 16 unmodified lines | |||
| 17 | #include <linux/reboot.h> | 17 | #include <linux/reboot.h> |
| 18 | 18 | ||
| 19 | #include <asm/ptrace.h> | 19 | #include <asm/ptrace.h> |
| 20 | #include <asm/system.h> | ||
| 21 | #include <asm/dma.h> | 20 | #include <asm/dma.h> |
| 22 | #include <asm/irq.h> | 21 | #include <asm/irq.h> |
| 23 | #include <asm/mmu_context.h> | 22 | #include <asm/mmu_context.h> |
| @@ -17,7 +17,7 @@ · 16 unmodified lines | |||
| 17 | #include <linux/bitops.h> | 17 | #include <linux/bitops.h> |
| 18 | 18 | ||
| 19 | #include <asm/ptrace.h> | 19 | #include <asm/ptrace.h> |
| 20 | #include <asm/system.h> | 20 | #include <asm/mce.h> |
| 21 | #include <asm/dma.h> | 21 | #include <asm/dma.h> |
| 22 | #include <asm/irq.h> | 22 | #include <asm/irq.h> |
| 23 | #include <asm/mmu_context.h> | 23 | #include <asm/mmu_context.h> |
| @@ -35,7 +35,6 @@ · 34 unmodified lines | |||
| 35 | #include <linux/bitops.h> | 35 | #include <linux/bitops.h> |
| 36 | 36 | ||
| 37 | #include <asm/ptrace.h> | 37 | #include <asm/ptrace.h> |
| 38 | #include <asm/system.h> | ||
| 39 | #include <asm/dma.h> | 38 | #include <asm/dma.h> |
| 40 | #include <asm/irq.h> | 39 | #include <asm/irq.h> |
| 41 | #include <asm/mmu_context.h> | 40 | #include <asm/mmu_context.h> |
| @@ -18,7 +18,7 @@ · 17 unmodified lines | |||
| 18 | #include <linux/bitops.h> | 18 | #include <linux/bitops.h> |
| 19 | 19 | ||
| 20 | #include <asm/ptrace.h> | 20 | #include <asm/ptrace.h> |
| 21 | #include <asm/system.h> | 21 | #include <asm/mce.h> |
| 22 | #include <asm/dma.h> | 22 | #include <asm/dma.h> |
| 23 | #include <asm/irq.h> | 23 | #include <asm/irq.h> |
| 24 | #include <asm/mmu_context.h> | 24 | #include <asm/mmu_context.h> |
| @@ -16,7 +16,6 @@ · 15 unmodified lines | |||
| 16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
| 17 | 17 | ||
| 18 | #include <asm/ptrace.h> | 18 | #include <asm/ptrace.h> |
| 19 | #include <asm/system.h> | ||
| 20 | #include <asm/dma.h> | 19 | #include <asm/dma.h> |
| 21 | #include <asm/irq.h> | 20 | #include <asm/irq.h> |
| 22 | #include <asm/mmu_context.h> | 21 | #include <asm/mmu_context.h> |
| @@ -18,7 +18,6 @@ · 17 unmodified lines | |||
| 18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
| 19 | 19 | ||
| 20 | #include <asm/ptrace.h> | 20 | #include <asm/ptrace.h> |
| 21 | #include <asm/system.h> | ||
| 22 | #include <asm/dma.h> | 21 | #include <asm/dma.h> |
| 23 | #include <asm/irq.h> | 22 | #include <asm/irq.h> |
| 24 | #include <asm/mmu_context.h> | 23 | #include <asm/mmu_context.h> |
| @@ -17,7 +17,6 @@ · 16 unmodified lines | |||
| 17 | #include <linux/bitops.h> | 17 | #include <linux/bitops.h> |
| 18 | 18 | ||
| 19 | #include <asm/ptrace.h> | 19 | #include <asm/ptrace.h> |
| 20 | #include <asm/system.h> | ||
| 21 | #include <asm/dma.h> | 20 | #include <asm/dma.h> |
| 22 | #include <asm/irq.h> | 21 | #include <asm/irq.h> |
| 23 | #include <asm/mmu_context.h> | 22 | #include <asm/mmu_context.h> |
| @@ -16,7 +16,6 @@ · 15 unmodified lines | |||
| 16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
| 17 | 17 | ||
| 18 | #include <asm/ptrace.h> | 18 | #include <asm/ptrace.h> |
| 19 | #include <asm/system.h> | ||
| 20 | #include <asm/dma.h> | 19 | #include <asm/dma.h> |
| 21 | #include <asm/irq.h> | 20 | #include <asm/irq.h> |
| 22 | #include <asm/mmu_context.h> | 21 | #include <asm/mmu_context.h> |
| @@ -20,7 +20,6 @@ · 19 unmodified lines | |||
| 20 | 20 | ||
| 21 | #include <asm/compiler.h> | 21 | #include <asm/compiler.h> |
| 22 | #include <asm/ptrace.h> | 22 | #include <asm/ptrace.h> |
| 23 | #include <asm/system.h> | ||
| 24 | #include <asm/dma.h> | 23 | #include <asm/dma.h> |
| 25 | #include <asm/irq.h> | 24 | #include <asm/irq.h> |
| 26 | #include <asm/mmu_context.h> | 25 | #include <asm/mmu_context.h> |
| @@ -17,7 +17,6 @@ · 16 unmodified lines | |||
| 17 | #include <linux/bitops.h> | 17 | #include <linux/bitops.h> |
| 18 | 18 | ||
| 19 | #include <asm/ptrace.h> | 19 | #include <asm/ptrace.h> |
| 20 | #include <asm/system.h> | ||
| 21 | #include <asm/dma.h> | 20 | #include <asm/dma.h> |
| 22 | #include <asm/irq.h> | 21 | #include <asm/irq.h> |
| 23 | #include <asm/mmu_context.h> | 22 | #include <asm/mmu_context.h> |
| @@ -26,6 +25,7 @@ · 2 unmodified lines | |||
| 26 | #include <asm/core_cia.h> | 25 | #include <asm/core_cia.h> |
| 27 | #include <asm/hwrpb.h> | 26 | #include <asm/hwrpb.h> |
| 28 | #include <asm/tlbflush.h> | 27 | #include <asm/tlbflush.h> |
| 28 | #include <asm/special_insns.h> | ||
| 29 | 29 | ||
| 30 | #include "proto.h" | 30 | #include "proto.h" |
| 31 | #include "irq_impl.h" | 31 | #include "irq_impl.h" |
| @@ -16,7 +16,6 @@ · 15 unmodified lines | |||
| 16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
| 17 | 17 | ||
| 18 | #include <asm/ptrace.h> | 18 | #include <asm/ptrace.h> |
| 19 | #include <asm/system.h> | ||
| 20 | #include <asm/dma.h> | 19 | #include <asm/dma.h> |
| 21 | #include <asm/irq.h> | 20 | #include <asm/irq.h> |
| 22 | #include <asm/mmu_context.h> | 21 | #include <asm/mmu_context.h> |
| @@ -21,7 +21,6 @@ · 20 unmodified lines | |||
| 21 | #include <linux/bitops.h> | 21 | #include <linux/bitops.h> |
| 22 | 22 | ||
| 23 | #include <asm/ptrace.h> | 23 | #include <asm/ptrace.h> |
| 24 | #include <asm/system.h> | ||
| 25 | #include <asm/dma.h> | 24 | #include <asm/dma.h> |
| 26 | #include <asm/irq.h> | 25 | #include <asm/irq.h> |
| 27 | #include <asm/mmu_context.h> | 26 | #include <asm/mmu_context.h> |
| @@ -331,7 +330,8 @@ titan_init_pci(void) · 303 unmodified lines | |||
| 331 | */ | 330 | */ |
| 332 | titan_late_init(); | 331 | titan_late_init(); |
| 333 | 332 | ||
| 334 | pci_probe_only = 1; | 333 | /* Indicate that we trust the console to configure things properly */ |
| 334 | pci_set_flags(PCI_PROBE_ONLY); | ||
| 335 | common_init_pci(); | 335 | common_init_pci(); |
| 336 | SMC669_Init(0); | 336 | SMC669_Init(0); |
| 337 | locate_and_init_vga(NULL); | 337 | locate_and_init_vga(NULL); |
| @@ -15,7 +15,6 @@ · 14 unmodified lines | |||
| 15 | #include <linux/bitops.h> | 15 | #include <linux/bitops.h> |
| 16 | 16 | ||
| 17 | #include <asm/ptrace.h> | 17 | #include <asm/ptrace.h> |
| 18 | #include <asm/system.h> | ||
| 19 | #include <asm/dma.h> | 18 | #include <asm/dma.h> |
| 20 | #include <asm/irq.h> | 19 | #include <asm/irq.h> |
| 21 | #include <asm/mmu_context.h> | 20 | #include <asm/mmu_context.h> |
| @@ -24,6 +24,7 @@ · 23 unmodified lines | |||
| 24 | #include <asm/sysinfo.h> | 24 | #include <asm/sysinfo.h> |
| 25 | #include <asm/hwrpb.h> | 25 | #include <asm/hwrpb.h> |
| 26 | #include <asm/mmu_context.h> | 26 | #include <asm/mmu_context.h> |
| 27 | #include <asm/special_insns.h> | ||
| 27 | 28 | ||
| 28 | #include "proto.h" | 29 | #include "proto.h" |
| 29 | 30 | ||
| @@ -2,6 +2,7 @@ · 1 unmodified line | |||
| 2 | #include <asm/thread_info.h> | 2 | #include <asm/thread_info.h> |
| 3 | #include <asm/cache.h> | 3 | #include <asm/cache.h> |
| 4 | #include <asm/page.h> | 4 | #include <asm/page.h> |
| 5 | #include <asm/setup.h> | ||
| 5 | 6 | ||
| 6 | OUTPUT_FORMAT("elf64-alpha") | 7 | OUTPUT_FORMAT("elf64-alpha") |
| 7 | OUTPUT_ARCH(alpha) | 8 | OUTPUT_ARCH(alpha) |
| @@ -25,6 +26,7 @@ SECTIONS · 17 unmodified lines | |||
| 25 | *(.fixup) | 26 | *(.fixup) |
| 26 | *(.gnu.warning) | 27 | *(.gnu.warning) |
| 27 | } :kernel | 28 | } :kernel |
| 29 | swapper_pg_dir = SWAPPER_PGD; | ||
| 28 | _etext = .; /* End of text section */ | 30 | _etext = .; /* End of text section */ |
| 29 | 31 | ||
| 30 | NOTES :kernel :note | 32 | NOTES :kernel :note |
| @@ -1,5 +1,4 @@ | |||
| 1 | #include <linux/kernel.h> | 1 | #include <linux/kernel.h> |
| 2 | #include <asm/system.h> | ||
| 3 | 2 | ||
| 4 | typedef unsigned int instr; | 3 | typedef unsigned int instr; |
| 5 | 4 | ||
| @@ -24,7 +24,6 @@ · 23 unmodified lines | |||
| 24 | #include <linux/interrupt.h> | 24 | #include <linux/interrupt.h> |
| 25 | #include <linux/module.h> | 25 | #include <linux/module.h> |
| 26 | 26 | ||
| 27 | #include <asm/system.h> | ||
| 28 | #include <asm/uaccess.h> | 27 | #include <asm/uaccess.h> |
| 29 | 28 | ||
| 30 | extern void die_if_kernel(char *,struct pt_regs *,long, unsigned long *); | 29 | extern void die_if_kernel(char *,struct pt_regs *,long, unsigned long *); |
| @@ -22,7 +22,6 @@ · 21 unmodified lines | |||
| 22 | #include <linux/vmalloc.h> | 22 | #include <linux/vmalloc.h> |
| 23 | #include <linux/gfp.h> | 23 | #include <linux/gfp.h> |
| 24 | 24 | ||
| 25 | #include <asm/system.h> | ||
| 26 | #include <asm/uaccess.h> | 25 | #include <asm/uaccess.h> |
| 27 | #include <asm/pgtable.h> | 26 | #include <asm/pgtable.h> |
| 28 | #include <asm/pgalloc.h> | 27 | #include <asm/pgalloc.h> |
| @@ -31,6 +30,7 @@ · 2 unmodified lines | |||
| 31 | #include <asm/mmu_context.h> | 30 | #include <asm/mmu_context.h> |
| 32 | #include <asm/console.h> | 31 | #include <asm/console.h> |
| 33 | #include <asm/tlb.h> | 32 | #include <asm/tlb.h> |
| 33 | #include <asm/setup.h> | ||
| 34 | 34 | ||
| 35 | extern void die_if_kernel(char *,struct pt_regs *,long); | 35 | extern void die_if_kernel(char *,struct pt_regs *,long); |
| 36 | 36 | ||
| @@ -12,7 +12,6 @@ · 11 unmodified lines | |||
| 12 | #include <linux/smp.h> | 12 | #include <linux/smp.h> |
| 13 | #include <linux/errno.h> | 13 | #include <linux/errno.h> |
| 14 | #include <asm/ptrace.h> | 14 | #include <asm/ptrace.h> |
| 15 | #include <asm/system.h> | ||
| 16 | 15 | ||
| 17 | #include "op_impl.h" | 16 | #include "op_impl.h" |
| 18 | 17 | ||
| @@ -11,7 +11,6 @@ · 10 unmodified lines | |||
| 11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
| 12 | #include <linux/smp.h> | 12 | #include <linux/smp.h> |
| 13 | #include <asm/ptrace.h> | 13 | #include <asm/ptrace.h> |
| 14 | #include <asm/system.h> | ||
| 15 | 14 | ||
| 16 | #include "op_impl.h" | 15 | #include "op_impl.h" |
| 17 | 16 | ||
| @@ -11,7 +11,6 @@ · 10 unmodified lines | |||
| 11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
| 12 | #include <linux/smp.h> | 12 | #include <linux/smp.h> |
| 13 | #include <asm/ptrace.h> | 13 | #include <asm/ptrace.h> |
| 14 | #include <asm/system.h> | ||
| 15 | 14 | ||
| 16 | #include "op_impl.h" | 15 | #include "op_impl.h" |
| 17 | 16 | ||
| @@ -11,7 +11,6 @@ · 10 unmodified lines | |||
| 11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
| 12 | #include <linux/smp.h> | 12 | #include <linux/smp.h> |
| 13 | #include <asm/ptrace.h> | 13 | #include <asm/ptrace.h> |
| 14 | #include <asm/system.h> | ||
| 15 | 14 | ||
| 16 | #include "op_impl.h" | 15 | #include "op_impl.h" |
| 17 | 16 | ||
| @@ -12,7 +12,6 @@ · 11 unmodified lines | |||
| 12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
| 13 | #include <linux/smp.h> | 13 | #include <linux/smp.h> |
| 14 | #include <asm/ptrace.h> | 14 | #include <asm/ptrace.h> |
| 15 | #include <asm/system.h> | ||
| 16 | 15 | ||
| 17 | #include "op_impl.h" | 16 | #include "op_impl.h" |
| 18 | 17 | ||
| @@ -9,6 +9,7 @@ config ARM · 8 unmodified lines | |||
| 9 | select SYS_SUPPORTS_APM_EMULATION | 9 | select SYS_SUPPORTS_APM_EMULATION |
| 10 | select GENERIC_ATOMIC64 if (CPU_V6 || !CPU_32v6K || !AEABI) | 10 | select GENERIC_ATOMIC64 if (CPU_V6 || !CPU_32v6K || !AEABI) |
| 11 | select HAVE_OPROFILE if (HAVE_PERF_EVENTS) | 11 | select HAVE_OPROFILE if (HAVE_PERF_EVENTS) |
| 12 | select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL | ||
| 12 | select HAVE_ARCH_KGDB | 13 | select HAVE_ARCH_KGDB |
| 13 | select HAVE_KPROBES if !XIP_KERNEL | 14 | select HAVE_KPROBES if !XIP_KERNEL |
| 14 | select HAVE_KRETPROBES if (HAVE_KPROBES) | 15 | select HAVE_KRETPROBES if (HAVE_KPROBES) |
| @@ -21,6 +22,7 @@ config ARM · 6 unmodified lines | |||
| 21 | select HAVE_KERNEL_GZIP | 22 | select HAVE_KERNEL_GZIP |
| 22 | select HAVE_KERNEL_LZO | 23 | select HAVE_KERNEL_LZO |
| 23 | select HAVE_KERNEL_LZMA | 24 | select HAVE_KERNEL_LZMA |
| 25 | select HAVE_KERNEL_XZ | ||
| 24 | select HAVE_IRQ_WORK | 26 | select HAVE_IRQ_WORK |
| 25 | select HAVE_PERF_EVENTS | 27 | select HAVE_PERF_EVENTS |
| 26 | select PERF_USE_VMALLOC | 28 | select PERF_USE_VMALLOC |
| @@ -28,10 +30,10 @@ config ARM · 1 unmodified line | |||
| 28 | select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7)) | 30 | select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7)) |
| 29 | select HAVE_C_RECORDMCOUNT | 31 | select HAVE_C_RECORDMCOUNT |
| 30 | select HAVE_GENERIC_HARDIRQS | 32 | select HAVE_GENERIC_HARDIRQS |
| 31 | select HAVE_SPARSE_IRQ | ||
| 32 | select GENERIC_IRQ_SHOW | 33 | select GENERIC_IRQ_SHOW |
| 33 | select CPU_PM if (SUSPEND || CPU_IDLE) | 34 | select CPU_PM if (SUSPEND || CPU_IDLE) |
| 34 | select GENERIC_PCI_IOMAP | 35 | select GENERIC_PCI_IOMAP |
| 36 | select HAVE_BPF_JIT if NET | ||
| 35 | help | 37 | help |
| 36 | The ARM series is a line of low-power-consumption RISC chip designs | 38 | The ARM series is a line of low-power-consumption RISC chip designs |
| 37 | licensed by ARM Ltd and targeted at embedded applications and | 39 | licensed by ARM Ltd and targeted at embedded applications and |
| @@ -52,9 +54,6 @@ config MIGHT_HAVE_PCI · 14 unmodified lines | |||
| 52 | config SYS_SUPPORTS_APM_EMULATION | 54 | config SYS_SUPPORTS_APM_EMULATION |
| 53 | bool | 55 | bool |
| 54 | 56 | ||
| 55 | config HAVE_SCHED_CLOCK | ||
| 56 | bool | ||
| 57 | |||
| 58 | config GENERIC_GPIO | 57 | config GENERIC_GPIO |
| 59 | bool | 58 | bool |
| 60 | 59 | ||
| @@ -180,12 +179,18 @@ config ZONE_DMA · 119 unmodified lines | |||
| 180 | config NEED_DMA_MAP_STATE | 179 | config NEED_DMA_MAP_STATE |
| 181 | def_bool y | 180 | def_bool y |
| 182 | 181 | ||
| 182 | config ARCH_HAS_DMA_SET_COHERENT_MASK | ||
| 183 | bool | ||
| 184 | |||
| 183 | config GENERIC_ISA_DMA | 185 | config GENERIC_ISA_DMA |
| 184 | bool | 186 | bool |
| 185 | 187 | ||
| 186 | config FIQ | 188 | config FIQ |
| 187 | bool | 189 | bool |
| 188 | 190 | ||
| 191 | config NEED_RET_TO_USER | ||
| 192 | bool | ||
| 193 | |||
| 189 | config ARCH_MTD_XIP | 194 | config ARCH_MTD_XIP |
| 190 | bool | 195 | bool |
| 191 | 196 | ||
| @@ -214,6 +219,13 @@ config ARM_PATCH_PHYS_VIRT · 22 unmodified lines | |||
| 214 | this feature (eg, building a kernel for a single machine) and | 219 | this feature (eg, building a kernel for a single machine) and |
| 215 | you need to shrink the kernel to the minimal size. | 220 | you need to shrink the kernel to the minimal size. |
| 216 | 221 | ||
| 222 | config NEED_MACH_IO_H | ||
| 223 | bool | ||
| 224 | help | ||
| 225 | Select this when mach/io.h is required to provide special | ||
| 226 | definitions for this platform. The need for mach/io.h should | ||
| 227 | be avoided when possible. | ||
| 228 | |||
| 217 | config NEED_MACH_MEMORY_H | 229 | config NEED_MACH_MEMORY_H |
| 218 | bool | 230 | bool |
| 219 | help | 231 | help |
| @@ -265,7 +277,9 @@ config ARCH_INTEGRATOR · 45 unmodified lines | |||
| 265 | select GENERIC_CLOCKEVENTS | 277 | select GENERIC_CLOCKEVENTS |
| 266 | select PLAT_VERSATILE | 278 | select PLAT_VERSATILE |
| 267 | select PLAT_VERSATILE_FPGA_IRQ | 279 | select PLAT_VERSATILE_FPGA_IRQ |
| 280 | select NEED_MACH_IO_H | ||
| 268 | select NEED_MACH_MEMORY_H | 281 | select NEED_MACH_MEMORY_H |
| 282 | select SPARSE_IRQ | ||
| 269 | help | 283 | help |
| 270 | Support for ARM's Integrator platform. | 284 | Support for ARM's Integrator platform. |
| 271 | 285 | ||
| @@ -312,6 +326,7 @@ config ARCH_VEXPRESS · 40 unmodified lines | |||
| 312 | select HAVE_CLK | 326 | select HAVE_CLK |
| 313 | select HAVE_PATA_PLATFORM | 327 | select HAVE_PATA_PLATFORM |
| 314 | select ICST | 328 | select ICST |
| 329 | select NO_IOPORT | ||
| 315 | select PLAT_VERSATILE | 330 | select PLAT_VERSATILE |
| 316 | select PLAT_VERSATILE_CLCD | 331 | select PLAT_VERSATILE_CLCD |
| 317 | help | 332 | help |
| @@ -322,9 +337,11 @@ config ARCH_AT91 · 4 unmodified lines | |||
| 322 | select ARCH_REQUIRE_GPIOLIB | 337 | select ARCH_REQUIRE_GPIOLIB |
| 323 | select HAVE_CLK | 338 | select HAVE_CLK |
| 324 | select CLKDEV_LOOKUP | 339 | select CLKDEV_LOOKUP |
| 340 | select IRQ_DOMAIN | ||
| 341 | select NEED_MACH_IO_H if PCCARD | ||
| 325 | help | 342 | help |
| 326 | This enables support for systems based on the Atmel AT91RM9200, | 343 | This enables support for systems based on the Atmel AT91RM9200, |
| 327 | AT91SAM9 and AT91CAP9 processors. | 344 | AT91SAM9 processors. |
| 328 | 345 | ||
| 329 | config ARCH_BCMRING | 346 | config ARCH_BCMRING |
| 330 | bool "Broadcom BCMRING" | 347 | bool "Broadcom BCMRING" |
| @@ -350,6 +367,7 @@ config ARCH_HIGHBANK · 19 unmodified lines | |||
| 350 | select GENERIC_CLOCKEVENTS | 367 | select GENERIC_CLOCKEVENTS |
| 351 | select HAVE_ARM_SCU | 368 | select HAVE_ARM_SCU |
| 352 | select HAVE_SMP | 369 | select HAVE_SMP |
| 370 | select SPARSE_IRQ | ||
| 353 | select USE_OF | 371 | select USE_OF |
| 354 | help | 372 | help |
| 355 | Support for the Calxeda Highbank SoC based boards. | 373 | Support for the Calxeda Highbank SoC based boards. |
| @@ -400,6 +418,7 @@ config ARCH_EBSA110 · 44 unmodified lines | |||
| 400 | select ISA | 418 | select ISA |
| 401 | select NO_IOPORT | 419 | select NO_IOPORT |
| 402 | select ARCH_USES_GETTIMEOFFSET | 420 | select ARCH_USES_GETTIMEOFFSET |
| 421 | select NEED_MACH_IO_H | ||
| 403 | select NEED_MACH_MEMORY_H | 422 | select NEED_MACH_MEMORY_H |
| 404 | help | 423 | help |
| 405 | This is an evaluation board for the StrongARM processor available | 424 | This is an evaluation board for the StrongARM processor available |
| @@ -426,6 +445,7 @@ config ARCH_FOOTBRIDGE · 20 unmodified lines | |||
| 426 | select FOOTBRIDGE | 445 | select FOOTBRIDGE |
| 427 | select GENERIC_CLOCKEVENTS | 446 | select GENERIC_CLOCKEVENTS |
| 428 | select HAVE_IDE | 447 | select HAVE_IDE |
| 448 | select NEED_MACH_IO_H | ||
| 429 | select NEED_MACH_MEMORY_H | 449 | select NEED_MACH_MEMORY_H |
| 430 | help | 450 | help |
| 431 | Support for systems based on the DC21285 companion chip | 451 | Support for systems based on the DC21285 companion chip |
| @@ -438,7 +458,6 @@ config ARCH_MXC · 6 unmodified lines | |||
| 438 | select CLKDEV_LOOKUP | 458 | select CLKDEV_LOOKUP |
| 439 | select CLKSRC_MMIO | 459 | select CLKSRC_MMIO |
| 440 | select GENERIC_IRQ_CHIP | 460 | select GENERIC_IRQ_CHIP |
| 441 | select HAVE_SCHED_CLOCK | ||
| 442 | select MULTI_IRQ_HANDLER | 461 | select MULTI_IRQ_HANDLER |
| 443 | help | 462 | help |
| 444 | Support for Freescale MXC/iMX-based family of processors | 463 | Support for Freescale MXC/iMX-based family of processors |
| @@ -478,7 +497,9 @@ config ARCH_IOP13XX · 33 unmodified lines | |||
| 478 | select PCI | 497 | select PCI |
| 479 | select ARCH_SUPPORTS_MSI | 498 | select ARCH_SUPPORTS_MSI |
| 480 | select VMSPLIT_1G | 499 | select VMSPLIT_1G |
| 500 | select NEED_MACH_IO_H | ||
| 481 | select NEED_MACH_MEMORY_H | 501 | select NEED_MACH_MEMORY_H |
| 502 | select NEED_RET_TO_USER | ||
| 482 | help | 503 | help |
| 483 | Support for Intel's IOP13XX (XScale) family of processors. | 504 | Support for Intel's IOP13XX (XScale) family of processors. |
| 484 | 505 | ||
| @@ -486,6 +507,8 @@ config ARCH_IOP32X · 1 unmodified line | |||
| 486 | bool "IOP32x-based" | 507 | bool "IOP32x-based" |
| 487 | depends on MMU | 508 | depends on MMU |
| 488 | select CPU_XSCALE | 509 | select CPU_XSCALE |
| 510 | select NEED_MACH_IO_H | ||
| 511 | select NEED_RET_TO_USER | ||
| 489 | select PLAT_IOP | 512 | select PLAT_IOP |
| 490 | select PCI | 513 | select PCI |
| 491 | select ARCH_REQUIRE_GPIOLIB | 514 | select ARCH_REQUIRE_GPIOLIB |
| @@ -497,6 +520,8 @@ config ARCH_IOP33X · 5 unmodified lines | |||
| 497 | bool "IOP33x-based" | 520 | bool "IOP33x-based" |
| 498 | depends on MMU | 521 | depends on MMU |
| 499 | select CPU_XSCALE | 522 | select CPU_XSCALE |
| 523 | select NEED_MACH_IO_H | ||
| 524 | select NEED_RET_TO_USER | ||
| 500 | select PLAT_IOP | 525 | select PLAT_IOP |
| 501 | select PCI | 526 | select PCI |
| 502 | select ARCH_REQUIRE_GPIOLIB | 527 | select ARCH_REQUIRE_GPIOLIB |
| @@ -509,6 +534,7 @@ config ARCH_IXP23XX · 6 unmodified lines | |||
| 509 | select CPU_XSC3 | 534 | select CPU_XSC3 |
| 510 | select PCI | 535 | select PCI |
| 511 | select ARCH_USES_GETTIMEOFFSET | 536 | select ARCH_USES_GETTIMEOFFSET |
| 537 | select NEED_MACH_IO_H | ||
| 512 | select NEED_MACH_MEMORY_H | 538 | select NEED_MACH_MEMORY_H |
| 513 | help | 539 | help |
| 514 | Support for Intel's IXP23xx (XScale) family of processors. | 540 | Support for Intel's IXP23xx (XScale) family of processors. |
| @@ -519,6 +545,7 @@ config ARCH_IXP2000 · 4 unmodified lines | |||
| 519 | select CPU_XSCALE | 545 | select CPU_XSCALE |
| 520 | select PCI | 546 | select PCI |
| 521 | select ARCH_USES_GETTIMEOFFSET | 547 | select ARCH_USES_GETTIMEOFFSET |
| 548 | select NEED_MACH_IO_H | ||
| 522 | select NEED_MACH_MEMORY_H | 549 | select NEED_MACH_MEMORY_H |
| 523 | help | 550 | help |
| 524 | Support for Intel's IXP2400/2800 (XScale) family of processors. | 551 | Support for Intel's IXP2400/2800 (XScale) family of processors. |
| @@ -526,12 +553,13 @@ config ARCH_IXP2000 · 1 unmodified line | |||
| 526 | config ARCH_IXP4XX | 553 | config ARCH_IXP4XX |
| 527 | bool "IXP4xx-based" | 554 | bool "IXP4xx-based" |
| 528 | depends on MMU | 555 | depends on MMU |
| 556 | select ARCH_HAS_DMA_SET_COHERENT_MASK | ||
| 529 | select CLKSRC_MMIO | 557 | select CLKSRC_MMIO |
| 530 | select CPU_XSCALE | 558 | select CPU_XSCALE |
| 531 | select GENERIC_GPIO | 559 | select GENERIC_GPIO |
| 532 | select GENERIC_CLOCKEVENTS | 560 | select GENERIC_CLOCKEVENTS |
| 533 | select HAVE_SCHED_CLOCK | ||
| 534 | select MIGHT_HAVE_PCI | 561 | select MIGHT_HAVE_PCI |
| 562 | select NEED_MACH_IO_H | ||
| 535 | select DMABOUNCE if PCI | 563 | select DMABOUNCE if PCI |
| 536 | help | 564 | help |
| 537 | Support for Intel's IXP4XX (XScale) family of processors. | 565 | Support for Intel's IXP4XX (XScale) family of processors. |
| @@ -542,6 +570,7 @@ config ARCH_DOVE · 4 unmodified lines | |||
| 542 | select PCI | 570 | select PCI |
| 543 | select ARCH_REQUIRE_GPIOLIB | 571 | select ARCH_REQUIRE_GPIOLIB |
| 544 | select GENERIC_CLOCKEVENTS | 572 | select GENERIC_CLOCKEVENTS |
| 573 | select NEED_MACH_IO_H | ||
| 545 | select PLAT_ORION | 574 | select PLAT_ORION |
| 546 | help | 575 | help |
| 547 | Support for the Marvell Dove SoC 88AP510 | 576 | Support for the Marvell Dove SoC 88AP510 |
| @@ -552,6 +581,7 @@ config ARCH_KIRKWOOD · 4 unmodified lines | |||
| 552 | select PCI | 581 | select PCI |
| 553 | select ARCH_REQUIRE_GPIOLIB | 582 | select ARCH_REQUIRE_GPIOLIB |
| 554 | select GENERIC_CLOCKEVENTS | 583 | select GENERIC_CLOCKEVENTS |
| 584 | select NEED_MACH_IO_H | ||
| 555 | select PLAT_ORION | 585 | select PLAT_ORION |
| 556 | help | 586 | help |
| 557 | Support for the following Marvell Kirkwood series SoCs: | 587 | Support for the following Marvell Kirkwood series SoCs: |
| @@ -576,6 +606,7 @@ config ARCH_MV78XX0 · 18 unmodified lines | |||
| 576 | select PCI | 606 | select PCI |
| 577 | select ARCH_REQUIRE_GPIOLIB | 607 | select ARCH_REQUIRE_GPIOLIB |
| 578 | select GENERIC_CLOCKEVENTS | 608 | select GENERIC_CLOCKEVENTS |
| 609 | select NEED_MACH_IO_H | ||
| 579 | select PLAT_ORION | 610 | select PLAT_ORION |
| 580 | help | 611 | help |
| 581 | Support for the following Marvell MV78xx0 series SoCs: | 612 | Support for the following Marvell MV78xx0 series SoCs: |
| @@ -601,7 +632,6 @@ config ARCH_MMP · 19 unmodified lines | |||
| 601 | select CLKDEV_LOOKUP | 632 | select CLKDEV_LOOKUP |
| 602 | select GENERIC_CLOCKEVENTS | 633 | select GENERIC_CLOCKEVENTS |
| 603 | select GPIO_PXA | 634 | select GPIO_PXA |
| 604 | select HAVE_SCHED_CLOCK | ||
| 605 | select TICK_ONESHOT | 635 | select TICK_ONESHOT |
| 606 | select PLAT_PXA | 636 | select PLAT_PXA |
| 607 | select SPARSE_IRQ | 637 | select SPARSE_IRQ |
| @@ -642,9 +672,9 @@ config ARCH_TEGRA · 34 unmodified lines | |||
| 642 | select GENERIC_CLOCKEVENTS | 672 | select GENERIC_CLOCKEVENTS |
| 643 | select GENERIC_GPIO | 673 | select GENERIC_GPIO |
| 644 | select HAVE_CLK | 674 | select HAVE_CLK |
| 645 | select HAVE_SCHED_CLOCK | ||
| 646 | select HAVE_SMP | 675 | select HAVE_SMP |
| 647 | select MIGHT_HAVE_CACHE_L2X0 | 676 | select MIGHT_HAVE_CACHE_L2X0 |
| 677 | select NEED_MACH_IO_H if PCI | ||
| 648 | select ARCH_HAS_CPUFREQ | 678 | select ARCH_HAS_CPUFREQ |
| 649 | help | 679 | help |
| 650 | This enables support for NVIDIA Tegra based systems (Tegra APX, | 680 | This enables support for NVIDIA Tegra based systems (Tegra APX, |
| @@ -659,7 +689,6 @@ config ARCH_PICOXCELL · 8 unmodified lines | |||
| 659 | select DW_APB_TIMER | 689 | select DW_APB_TIMER |
| 660 | select GENERIC_CLOCKEVENTS | 690 | select GENERIC_CLOCKEVENTS |
| 661 | select GENERIC_GPIO | 691 | select GENERIC_GPIO |
| 662 | select HAVE_SCHED_CLOCK | ||
| 663 | select HAVE_TCM | 692 | select HAVE_TCM |
| 664 | select NO_IOPORT | 693 | select NO_IOPORT |
| 665 | select SPARSE_IRQ | 694 | select SPARSE_IRQ |
| @@ -687,7 +716,6 @@ config ARCH_PXA · 21 unmodified lines | |||
| 687 | select ARCH_REQUIRE_GPIOLIB | 716 | select ARCH_REQUIRE_GPIOLIB |
| 688 | select GENERIC_CLOCKEVENTS | 717 | select GENERIC_CLOCKEVENTS |
| 689 | select GPIO_PXA | 718 | select GPIO_PXA |
| 690 | select HAVE_SCHED_CLOCK | ||
| 691 | select TICK_ONESHOT | 719 | select TICK_ONESHOT |
| 692 | select PLAT_PXA | 720 | select PLAT_PXA |
| 693 | select SPARSE_IRQ | 721 | select SPARSE_IRQ |
| @@ -731,7 +759,6 @@ config ARCH_RPC · 37 unmodified lines | |||
| 731 | bool "RiscPC" | 759 | bool "RiscPC" |
| 732 | select ARCH_ACORN | 760 | select ARCH_ACORN |
| 733 | select FIQ | 761 | select FIQ |
| 734 | select TIMER_ACORN | ||
| 735 | select ARCH_MAY_HAVE_PC_FDC | 762 | select ARCH_MAY_HAVE_PC_FDC |
| 736 | select HAVE_PATA_PLATFORM | 763 | select HAVE_PATA_PLATFORM |
| 737 | select ISA_DMA_API | 764 | select ISA_DMA_API |
| @@ -739,6 +766,7 @@ config ARCH_RPC · 1 unmodified line | |||
| 739 | select ARCH_SPARSEMEM_ENABLE | 766 | select ARCH_SPARSEMEM_ENABLE |
| 740 | select ARCH_USES_GETTIMEOFFSET | 767 | select ARCH_USES_GETTIMEOFFSET |
| 741 | select HAVE_IDE | 768 | select HAVE_IDE |
| 769 | select NEED_MACH_IO_H | ||
| 742 | select NEED_MACH_MEMORY_H | 770 | select NEED_MACH_MEMORY_H |
| 743 | help | 771 | help |
| 744 | On the Acorn Risc-PC, Linux can support the internal IDE disk and | 772 | On the Acorn Risc-PC, Linux can support the internal IDE disk and |
| @@ -754,31 +782,31 @@ config ARCH_SA1100 · 9 unmodified lines | |||
| 754 | select ARCH_HAS_CPUFREQ | 782 | select ARCH_HAS_CPUFREQ |
| 755 | select CPU_FREQ | 783 | select CPU_FREQ |
| 756 | select GENERIC_CLOCKEVENTS | 784 | select GENERIC_CLOCKEVENTS |
| 757 | select HAVE_CLK | 785 | select CLKDEV_LOOKUP |
| 758 | select HAVE_SCHED_CLOCK | ||
| 759 | select TICK_ONESHOT | 786 | select TICK_ONESHOT |
| 760 | select ARCH_REQUIRE_GPIOLIB | 787 | select ARCH_REQUIRE_GPIOLIB |
| 761 | select HAVE_IDE | 788 | select HAVE_IDE |
| 762 | select NEED_MACH_MEMORY_H | 789 | select NEED_MACH_MEMORY_H |
| 790 | select SPARSE_IRQ | ||
| 763 | help | 791 | help |
| 764 | Support for StrongARM 11x0 based boards. | 792 | Support for StrongARM 11x0 based boards. |
| 765 | 793 | ||
| 766 | config ARCH_S3C2410 | 794 | config ARCH_S3C24XX |
| 767 | bool "Samsung S3C2410, S3C2412, S3C2413, S3C2416, S3C2440, S3C2442, S3C2443, S3C2450" | 795 | bool "Samsung S3C24XX SoCs" |
| 768 | select GENERIC_GPIO | 796 | select GENERIC_GPIO |
| 769 | select ARCH_HAS_CPUFREQ | 797 | select ARCH_HAS_CPUFREQ |
| 770 | select HAVE_CLK | 798 | select HAVE_CLK |
| 771 | select CLKDEV_LOOKUP | 799 | select CLKDEV_LOOKUP |
| 772 | select ARCH_USES_GETTIMEOFFSET | 800 | select ARCH_USES_GETTIMEOFFSET |
| 773 | select HAVE_S3C2410_I2C if I2C | 801 | select HAVE_S3C2410_I2C if I2C |
| 802 | select HAVE_S3C_RTC if RTC_CLASS | ||
| 803 | select HAVE_S3C2410_WATCHDOG if WATCHDOG | ||
| 804 | select NEED_MACH_IO_H | ||
| 774 | help | 805 | help |
| 775 | Samsung S3C2410X CPU based systems, such as the Simtec Electronics | 806 | Samsung S3C2410, S3C2412, S3C2413, S3C2416, S3C2440, S3C2442, S3C2443 |
| 776 | BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or | 807 | and S3C2450 SoCs based systems, such as the Simtec Electronics BAST |
| 777 | the Samsung SMDK2410 development board (and derivatives). | 808 | (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or the |
| 778 | 809 | Samsung SMDK2410 development board (and derivatives). | |
| 779 | Note, the S3C2416 and the S3C2450 are so close that they even share | ||
| 780 | the same SoC ID code. This means that there is no separate machine | ||
| 781 | directory (no arch/arm/mach-s3c2450) as the S3C2416 was first. | ||
| 782 | 810 | ||
| 783 | config ARCH_S3C64XX | 811 | config ARCH_S3C64XX |
| 784 | bool "Samsung S3C64XX" | 812 | bool "Samsung S3C64XX" |
| @@ -812,7 +840,6 @@ config ARCH_S5P64X0 · 27 unmodified lines | |||
| 812 | select CLKSRC_MMIO | 840 | select CLKSRC_MMIO |
| 813 | select HAVE_S3C2410_WATCHDOG if WATCHDOG | 841 | select HAVE_S3C2410_WATCHDOG if WATCHDOG |
| 814 | select GENERIC_CLOCKEVENTS | 842 | select GENERIC_CLOCKEVENTS |
| 815 | select HAVE_SCHED_CLOCK | ||
| 816 | select HAVE_S3C2410_I2C if I2C | 843 | select HAVE_S3C2410_I2C if I2C |
| 817 | select HAVE_S3C_RTC if RTC_CLASS | 844 | select HAVE_S3C_RTC if RTC_CLASS |
| 818 | help | 845 | help |
| @@ -843,7 +870,6 @@ config ARCH_S5PV210 · 24 unmodified lines | |||
| 843 | select CLKSRC_MMIO | 870 | select CLKSRC_MMIO |
| 844 | select ARCH_HAS_CPUFREQ | 871 | select ARCH_HAS_CPUFREQ |
| 845 | select GENERIC_CLOCKEVENTS | 872 | select GENERIC_CLOCKEVENTS |
| 846 | select HAVE_SCHED_CLOCK | ||
| 847 | select HAVE_S3C2410_I2C if I2C | 873 | select HAVE_S3C2410_I2C if I2C |
| 848 | select HAVE_S3C_RTC if RTC_CLASS | 874 | select HAVE_S3C_RTC if RTC_CLASS |
| 849 | select HAVE_S3C2410_WATCHDOG if WATCHDOG | 875 | select HAVE_S3C2410_WATCHDOG if WATCHDOG |
| @@ -877,6 +903,7 @@ config ARCH_SHARK · 27 unmodified lines | |||
| 877 | select PCI | 903 | select PCI |
| 878 | select ARCH_USES_GETTIMEOFFSET | 904 | select ARCH_USES_GETTIMEOFFSET |
| 879 | select NEED_MACH_MEMORY_H | 905 | select NEED_MACH_MEMORY_H |
| 906 | select NEED_MACH_IO_H | ||
| 880 | help | 907 | help |
| 881 | Support for the StrongARM based Digital DNARD machine, also known | 908 | Support for the StrongARM based Digital DNARD machine, also known |
| 882 | as "Shark" (<http://www.shark-linux.de/shark.html>). | 909 | as "Shark" (<http://www.shark-linux.de/shark.html>). |
| @@ -886,7 +913,6 @@ config ARCH_U300 · 3 unmodified lines | |||
| 886 | depends on MMU | 913 | depends on MMU |
| 887 | select CLKSRC_MMIO | 914 | select CLKSRC_MMIO |
| 888 | select CPU_ARM926T | 915 | select CPU_ARM926T |
| 889 | select HAVE_SCHED_CLOCK | ||
| 890 | select HAVE_TCM | 916 | select HAVE_TCM |
| 891 | select ARM_AMBA | 917 | select ARM_AMBA |
| 892 | select ARM_PATCH_PHYS_VIRT | 918 | select ARM_PATCH_PHYS_VIRT |
| @@ -901,6 +927,7 @@ config ARCH_U300 · 8 unmodified lines | |||
| 901 | 927 | ||
| 902 | config ARCH_U8500 | 928 | config ARCH_U8500 |
| 903 | bool "ST-Ericsson U8500 Series" | 929 | bool "ST-Ericsson U8500 Series" |
| 930 | depends on MMU | ||
| 904 | select CPU_V7 | 931 | select CPU_V7 |
| 905 | select ARM_AMBA | 932 | select ARM_AMBA |
| 906 | select GENERIC_CLOCKEVENTS | 933 | select GENERIC_CLOCKEVENTS |
| @@ -944,7 +971,6 @@ config ARCH_OMAP · 37 unmodified lines | |||
| 944 | select ARCH_HAS_CPUFREQ | 971 | select ARCH_HAS_CPUFREQ |
| 945 | select CLKSRC_MMIO | 972 | select CLKSRC_MMIO |
| 946 | select GENERIC_CLOCKEVENTS | 973 | select GENERIC_CLOCKEVENTS |
| 947 | select HAVE_SCHED_CLOCK | ||
| 948 | select ARCH_HAS_HOLES_MEMORYMODEL | 974 | select ARCH_HAS_HOLES_MEMORYMODEL |
| 949 | help | 975 | help |
| 950 | Support for TI's OMAP platform (OMAP1/2/3/4). | 976 | Support for TI's OMAP platform (OMAP1/2/3/4). |
| @@ -1066,12 +1092,10 @@ source "arch/arm/plat-s5p/Kconfig" · 115 unmodified lines | |||
| 1066 | 1092 | ||
| 1067 | source "arch/arm/plat-spear/Kconfig" | 1093 | source "arch/arm/plat-spear/Kconfig" |
| 1068 | 1094 | ||
| 1069 | if ARCH_S3C2410 | 1095 | source "arch/arm/mach-s3c24xx/Kconfig" |
| 1070 | source "arch/arm/mach-s3c2410/Kconfig" | 1096 | if ARCH_S3C24XX |
| 1071 | source "arch/arm/mach-s3c2412/Kconfig" | 1097 | source "arch/arm/mach-s3c2412/Kconfig" |
| 1072 | source "arch/arm/mach-s3c2416/Kconfig" | ||
| 1073 | source "arch/arm/mach-s3c2440/Kconfig" | 1098 | source "arch/arm/mach-s3c2440/Kconfig" |
| 1074 | source "arch/arm/mach-s3c2443/Kconfig" | ||
| 1075 | endif | 1099 | endif |
| 1076 | 1100 | ||
| 1077 | if ARCH_S3C64XX | 1101 | if ARCH_S3C64XX |
| @@ -1110,13 +1134,11 @@ config ARCH_ACORN · 32 unmodified lines | |||
| 1110 | config PLAT_IOP | 1134 | config PLAT_IOP |
| 1111 | bool | 1135 | bool |
| 1112 | select GENERIC_CLOCKEVENTS | 1136 | select GENERIC_CLOCKEVENTS |
| 1113 | select HAVE_SCHED_CLOCK | ||
| 1114 | 1137 | ||
| 1115 | config PLAT_ORION | 1138 | config PLAT_ORION |
| 1116 | bool | 1139 | bool |
| 1117 | select CLKSRC_MMIO | 1140 | select CLKSRC_MMIO |
| 1118 | select GENERIC_IRQ_CHIP | 1141 | select GENERIC_IRQ_CHIP |
| 1119 | select HAVE_SCHED_CLOCK | ||
| 1120 | 1142 | ||
| 1121 | config PLAT_PXA | 1143 | config PLAT_PXA |
| 1122 | bool | 1144 | bool |
| @@ -1127,6 +1149,7 @@ config PLAT_VERSATILE · 4 unmodified lines | |||
| 1127 | config ARM_TIMER_SP804 | 1149 | config ARM_TIMER_SP804 |
| 1128 | bool | 1150 | bool |
| 1129 | select CLKSRC_MMIO | 1151 | select CLKSRC_MMIO |
| 1152 | select HAVE_SCHED_CLOCK | ||
| 1130 | 1153 | ||
| 1131 | source arch/arm/mm/Kconfig | 1154 | source arch/arm/mm/Kconfig |
| 1132 | 1155 | ||
| @@ -1577,7 +1600,8 @@ config LOCAL_TIMERS · 444 unmodified lines | |||
| 1577 | config ARCH_NR_GPIO | 1600 | config ARCH_NR_GPIO |
| 1578 | int | 1601 | int |
| 1579 | default 1024 if ARCH_SHMOBILE || ARCH_TEGRA | 1602 | default 1024 if ARCH_SHMOBILE || ARCH_TEGRA |
| 1580 | default 350 if ARCH_U8500 | 1603 | default 355 if ARCH_U8500 |
| 1604 | default 264 if MACH_H4700 | ||
| 1581 | default 0 | 1605 | default 0 |
| 1582 | help | 1606 | help |
| 1583 | Maximum number of GPIOs in the system. | 1607 | Maximum number of GPIOs in the system. |
| @@ -1588,7 +1612,7 @@ source kernel/Kconfig.preempt · 4 unmodified lines | |||
| 1588 | 1612 | ||
| 1589 | config HZ | 1613 | config HZ |
| 1590 | int | 1614 | int |
| 1591 | default 200 if ARCH_EBSA110 || ARCH_S3C2410 || ARCH_S5P64X0 || \ | 1615 | default 200 if ARCH_EBSA110 || ARCH_S3C24XX || ARCH_S5P64X0 || \ |
| 1592 | ARCH_S5PV210 || ARCH_EXYNOS4 | 1616 | ARCH_S5PV210 || ARCH_EXYNOS4 |
| 1593 | default OMAP_32K_TIMER_HZ if ARCH_OMAP && OMAP_32K_TIMER | 1617 | default OMAP_32K_TIMER_HZ if ARCH_OMAP && OMAP_32K_TIMER |
| 1594 | default AT91_TIMER_HZ if ARCH_AT91 | 1618 | default AT91_TIMER_HZ if ARCH_AT91 |
| @@ -2114,7 +2138,7 @@ config CPU_FREQ_S3C · 519 unmodified lines | |||
| 2114 | 2138 | ||
| 2115 | config CPU_FREQ_S3C24XX | 2139 | config CPU_FREQ_S3C24XX |
| 2116 | bool "CPUfreq driver for Samsung S3C24XX series CPUs (EXPERIMENTAL)" | 2140 | bool "CPUfreq driver for Samsung S3C24XX series CPUs (EXPERIMENTAL)" |
| 2117 | depends on ARCH_S3C2410 && CPU_FREQ && EXPERIMENTAL | 2141 | depends on ARCH_S3C24XX && CPU_FREQ && EXPERIMENTAL |
| 2118 | select CPU_FREQ_S3C | 2142 | select CPU_FREQ_S3C |
| 2119 | help | 2143 | help |
| 2120 | This enables the CPUfreq driver for the Samsung S3C24XX family | 2144 | This enables the CPUfreq driver for the Samsung S3C24XX family |
| @@ -81,47 +81,14 @@ choice · 80 unmodified lines | |||
| 81 | prompt "Kernel low-level debugging port" | 81 | prompt "Kernel low-level debugging port" |
| 82 | depends on DEBUG_LL | 82 | depends on DEBUG_LL |
| 83 | 83 | ||
| 84 | config DEBUG_LL_UART_NONE | ||
| 85 | bool "No low-level debugging UART" | ||
| 86 | help | ||
| 87 | Say Y here if your platform doesn't provide a UART option | ||
| 88 | below. This relies on your platform choosing the right UART | ||
| 89 | definition internally in order for low-level debugging to | ||
| 90 | work. | ||
| 91 | |||
| 92 | config DEBUG_ICEDCC | ||
| 93 | bool "Kernel low-level debugging via EmbeddedICE DCC channel" | ||
| 94 | help | ||
| 95 | Say Y here if you want the debug print routines to direct | ||
| 96 | their output to the EmbeddedICE macrocell's DCC channel using | ||
| 97 | co-processor 14. This is known to work on the ARM9 style ICE | ||
| 98 | channel and on the XScale with the PEEDI. | ||
| 99 | |||
| 100 | Note that the system will appear to hang during boot if there | ||
| 101 | is nothing connected to read from the DCC. | ||
| 102 | |||
| 103 | config AT91_DEBUG_LL_DBGU0 | 84 | config AT91_DEBUG_LL_DBGU0 |
| 104 | bool "Kernel low-level debugging on rm9200, 9260/9g20, 9261/9g10 and 9rl" | 85 | bool "Kernel low-level debugging on rm9200, 9260/9g20, 9261/9g10 and 9rl" |
| 105 | depends on HAVE_AT91_DBGU0 | 86 | depends on HAVE_AT91_DBGU0 |
| 106 | 87 | ||
| 107 | config AT91_DEBUG_LL_DBGU1 | 88 | config AT91_DEBUG_LL_DBGU1 |
| 108 | bool "Kernel low-level debugging on 9263, 9g45 and cap9" | 89 | bool "Kernel low-level debugging on 9263 and 9g45" |
| 109 | depends on HAVE_AT91_DBGU1 | 90 | depends on HAVE_AT91_DBGU1 |
| 110 | 91 | ||
| 111 | config DEBUG_FOOTBRIDGE_COM1 | ||
| 112 | bool "Kernel low-level debugging messages via footbridge 8250 at PCI COM1" | ||
| 113 | depends on FOOTBRIDGE | ||
| 114 | help | ||
| 115 | Say Y here if you want the debug print routines to direct | ||
| 116 | their output to the 8250 at PCI COM1. | ||
| 117 | |||
| 118 | config DEBUG_DC21285_PORT | ||
| 119 | bool "Kernel low-level debugging messages via footbridge serial port" | ||
| 120 | depends on FOOTBRIDGE | ||
| 121 | help | ||
| 122 | Say Y here if you want the debug print routines to direct | ||
| 123 | their output to the serial port in the DC21285 (Footbridge). | ||
| 124 | |||
| 125 | config DEBUG_CLPS711X_UART1 | 92 | config DEBUG_CLPS711X_UART1 |
| 126 | bool "Kernel low-level debugging messages via UART1" | 93 | bool "Kernel low-level debugging messages via UART1" |
| 127 | depends on ARCH_CLPS711X | 94 | depends on ARCH_CLPS711X |
| @@ -136,6 +103,20 @@ choice · 8 unmodified lines | |||
| 136 | Say Y here if you want the debug print routines to direct | 103 | Say Y here if you want the debug print routines to direct |
| 137 | their output to the second serial port on these devices. | 104 | their output to the second serial port on these devices. |
| 138 | 105 | ||
| 106 | config DEBUG_DC21285_PORT | ||
| 107 | bool "Kernel low-level debugging messages via footbridge serial port" | ||
| 108 | depends on FOOTBRIDGE | ||
| 109 | help | ||
| 110 | Say Y here if you want the debug print routines to direct | ||
| 111 | their output to the serial port in the DC21285 (Footbridge). | ||
| 112 | |||
| 113 | config DEBUG_FOOTBRIDGE_COM1 | ||
| 114 | bool "Kernel low-level debugging messages via footbridge 8250 at PCI COM1" | ||
| 115 | depends on FOOTBRIDGE | ||
| 116 | help | ||
| 117 | Say Y here if you want the debug print routines to direct | ||
| 118 | their output to the 8250 at PCI COM1. | ||
| 119 | |||
| 139 | config DEBUG_HIGHBANK_UART | 120 | config DEBUG_HIGHBANK_UART |
| 140 | bool "Kernel low-level debugging messages via Highbank UART" | 121 | bool "Kernel low-level debugging messages via Highbank UART" |
| 141 | depends on ARCH_HIGHBANK | 122 | depends on ARCH_HIGHBANK |
| @@ -199,45 +180,49 @@ choice · 57 unmodified lines | |||
| 199 | Say Y here if you want kernel low-level debugging support | 180 | Say Y here if you want kernel low-level debugging support |
| 200 | on i.MX50 or i.MX53. | 181 | on i.MX50 or i.MX53. |
| 201 | 182 | ||
| 202 | config DEBUG_IMX6Q_UART | 183 | config DEBUG_IMX6Q_UART4 |
| 203 | bool "i.MX6Q Debug UART" | 184 | bool "i.MX6Q Debug UART4" |
| 204 | depends on SOC_IMX6Q | 185 | depends on SOC_IMX6Q |
| 205 | help | 186 | help |
| 206 | Say Y here if you want kernel low-level debugging support | 187 | Say Y here if you want kernel low-level debugging support |
| 207 | on i.MX6Q. | 188 | on i.MX6Q UART4. |
| 208 | 189 | ||
| 209 | config DEBUG_S3C_UART0 | 190 | config DEBUG_MSM_UART1 |
| 210 | depends on PLAT_SAMSUNG | 191 | bool "Kernel low-level debugging messages via MSM UART1" |
| 211 | bool "Use S3C UART 0 for low-level debug" | 192 | depends on ARCH_MSM7X00A || ARCH_MSM7X30 || ARCH_QSD8X50 |
| 212 | help | 193 | help |
| 213 | Say Y here if you want the debug print routines to direct | 194 | Say Y here if you want the debug print routines to direct |
| 214 | their output to UART 0. The port must have been initialised | 195 | their output to the first serial port on MSM devices. |
| 215 | by the boot-loader before use. | ||
| 216 | |||
| 217 | The uncompressor code port configuration is now handled | ||
| 218 | by CONFIG_S3C_LOWLEVEL_UART_PORT. | ||
| 219 | 196 | ||
| 220 | config DEBUG_S3C_UART1 | 197 | config DEBUG_MSM_UART2 |
| 221 | depends on PLAT_SAMSUNG | 198 | bool "Kernel low-level debugging messages via MSM UART2" |
| 222 | bool "Use S3C UART 1 for low-level debug" | 199 | depends on ARCH_MSM7X00A || ARCH_MSM7X30 || ARCH_QSD8X50 |
| 223 | help | 200 | help |
| 224 | Say Y here if you want the debug print routines to direct | 201 | Say Y here if you want the debug print routines to direct |
| 225 | their output to UART 1. The port must have been initialised | 202 | their output to the second serial port on MSM devices. |
| 226 | by the boot-loader before use. | ||
| 227 | 203 | ||
| 228 | The uncompressor code port configuration is now handled | 204 | config DEBUG_MSM_UART3 |
| 229 | by CONFIG_S3C_LOWLEVEL_UART_PORT. | 205 | bool "Kernel low-level debugging messages via MSM UART3" |
| 206 | depends on ARCH_MSM7X00A || ARCH_MSM7X30 || ARCH_QSD8X50 | ||
| 207 | help | ||
| 208 | Say Y here if you want the debug print routines to direct | ||
| 209 | their output to the third serial port on MSM devices. | ||
| 230 | 210 | ||
| 231 | config DEBUG_S3C_UART2 | 211 | config DEBUG_MSM8660_UART |
| 232 | depends on PLAT_SAMSUNG | 212 | bool "Kernel low-level debugging messages via MSM 8660 UART" |
| 233 | bool "Use S3C UART 2 for low-level debug" | 213 | depends on ARCH_MSM8X60 |
| 214 | select MSM_HAS_DEBUG_UART_HS | ||
| 234 | help | 215 | help |
| 235 | Say Y here if you want the debug print routines to direct | 216 | Say Y here if you want the debug print routines to direct |
| 236 | their output to UART 2. The port must have been initialised | 217 | their output to the serial port on MSM 8660 devices. |
| 237 | by the boot-loader before use. | ||
| 238 | 218 | ||
| 239 | The uncompressor code port configuration is now handled | 219 | config DEBUG_MSM8960_UART |
| 240 | by CONFIG_S3C_LOWLEVEL_UART_PORT. | 220 | bool "Kernel low-level debugging messages via MSM 8960 UART" |
| 221 | depends on ARCH_MSM8960 | ||
| 222 | select MSM_HAS_DEBUG_UART_HS | ||
| 223 | help | ||
| 224 | Say Y here if you want the debug print routines to direct | ||
| 225 | their output to the serial port on MSM 8960 devices. | ||
| 241 | 226 | ||
| 242 | config DEBUG_REALVIEW_STD_PORT | 227 | config DEBUG_REALVIEW_STD_PORT |
| 243 | bool "RealView Default UART" | 228 | bool "RealView Default UART" |
| @@ -255,42 +240,73 @@ choice · 11 unmodified lines | |||
| 255 | their output to the standard serial port on the RealView | 240 | their output to the standard serial port on the RealView |
| 256 | PB1176 platform. | 241 | PB1176 platform. |
| 257 | 242 | ||
| 258 | config DEBUG_MSM_UART1 | 243 | config DEBUG_S3C_UART0 |
| 259 | bool "Kernel low-level debugging messages via MSM UART1" | 244 | depends on PLAT_SAMSUNG |
| 260 | depends on ARCH_MSM7X00A || ARCH_MSM7X30 || ARCH_QSD8X50 | 245 | bool "Use S3C UART 0 for low-level debug" |
| 261 | help | 246 | help |
| 262 | Say Y here if you want the debug print routines to direct | 247 | Say Y here if you want the debug print routines to direct |
| 263 | their output to the first serial port on MSM devices. | 248 | their output to UART 0. The port must have been initialised |
| 249 | by the boot-loader before use. | ||
| 264 | 250 | ||
| 265 | config DEBUG_MSM_UART2 | 251 | The uncompressor code port configuration is now handled |
| 266 | bool "Kernel low-level debugging messages via MSM UART2" | 252 | by CONFIG_S3C_LOWLEVEL_UART_PORT. |
| 267 | depends on ARCH_MSM7X00A || ARCH_MSM7X30 || ARCH_QSD8X50 | 253 | |
| 254 | config DEBUG_S3C_UART1 | ||
| 255 | depends on PLAT_SAMSUNG | ||
| 256 | bool "Use S3C UART 1 for low-level debug" | ||
| 268 | help | 257 | help |
| 269 | Say Y here if you want the debug print routines to direct | 258 | Say Y here if you want the debug print routines to direct |
| 270 | their output to the second serial port on MSM devices. | 259 | their output to UART 1. The port must have been initialised |
| 260 | by the boot-loader before use. | ||
| 271 | 261 | ||
| 272 | config DEBUG_MSM_UART3 | 262 | The uncompressor code port configuration is now handled |
| 273 | bool "Kernel low-level debugging messages via MSM UART3" | 263 | by CONFIG_S3C_LOWLEVEL_UART_PORT. |
| 274 | depends on ARCH_MSM7X00A || ARCH_MSM7X30 || ARCH_QSD8X50 | 264 | |
| 265 | config DEBUG_S3C_UART2 | ||
| 266 | depends on PLAT_SAMSUNG | ||
| 267 | bool "Use S3C UART 2 for low-level debug" | ||
| 275 | help | 268 | help |
| 276 | Say Y here if you want the debug print routines to direct | 269 | Say Y here if you want the debug print routines to direct |
| 277 | their output to the third serial port on MSM devices. | 270 | their output to UART 2. The port must have been initialised |
| 271 | by the boot-loader before use. | ||
| 278 | 272 | ||
| 279 | config DEBUG_MSM8660_UART | 273 | The uncompressor code port configuration is now handled |
| 280 | bool "Kernel low-level debugging messages via MSM 8660 UART" | 274 | by CONFIG_S3C_LOWLEVEL_UART_PORT. |
| 281 | depends on ARCH_MSM8X60 | 275 | |
| 282 | select MSM_HAS_DEBUG_UART_HS | 276 | config DEBUG_LL_UART_NONE |
| 277 | bool "No low-level debugging UART" | ||
| 283 | help | 278 | help |
| 284 | Say Y here if you want the debug print routines to direct | 279 | Say Y here if your platform doesn't provide a UART option |
| 285 | their output to the serial port on MSM 8660 devices. | 280 | below. This relies on your platform choosing the right UART |
| 281 | definition internally in order for low-level debugging to | ||
| 282 | work. | ||
| 286 | 283 | ||
| 287 | config DEBUG_MSM8960_UART | 284 | config DEBUG_ICEDCC |
| 288 | bool "Kernel low-level debugging messages via MSM 8960 UART" | 285 | bool "Kernel low-level debugging via EmbeddedICE DCC channel" |
| 289 | depends on ARCH_MSM8960 | ||
| 290 | select MSM_HAS_DEBUG_UART_HS | ||
| 291 | help | 286 | help |
| 292 | Say Y here if you want the debug print routines to direct | 287 | Say Y here if you want the debug print routines to direct |
| 293 | their output to the serial port on MSM 8960 devices. | 288 | their output to the EmbeddedICE macrocell's DCC channel using |
| 289 | co-processor 14. This is known to work on the ARM9 style ICE | ||
| 290 | channel and on the XScale with the PEEDI. | ||
| 291 | |||
| 292 | Note that the system will appear to hang during boot if there | ||
| 293 | is nothing connected to read from the DCC. | ||
| 294 | |||
| 295 | config DEBUG_SEMIHOSTING | ||
| 296 | bool "Kernel low-level debug output via semihosting I" | ||
| 297 | help | ||
| 298 | Semihosting enables code running on an ARM target to use | ||
| 299 | the I/O facilities on a host debugger/emulator through a | ||
| 300 | simple SVC calls. The host debugger or emulator must have | ||
| 301 | semihosting enabled for the special svc call to be trapped | ||
| 302 | otherwise the kernel will crash. | ||
| 303 | |||
| 304 | This is known to work with OpenOCD, as wellas | ||
| 305 | ARM's Fast Models, or any other controlling environment | ||
| 306 | that implements semihosting. | ||
| 307 | |||
| 308 | For more details about semihosting, please see | ||
| 309 | chapter 8 of DUI0203I_rvct_developer_guide.pdf from ARM Ltd. | ||
| 294 | 310 | ||
| 295 | endchoice | 311 | endchoice |
| 296 | 312 | ||
| @@ -174,12 +174,13 @@ machine-$(CONFIG_ARCH_PRIMA2) := prima2 · 173 unmodified lines | |||
| 174 | machine-$(CONFIG_ARCH_PXA) := pxa | 174 | machine-$(CONFIG_ARCH_PXA) := pxa |
| 175 | machine-$(CONFIG_ARCH_REALVIEW) := realview | 175 | machine-$(CONFIG_ARCH_REALVIEW) := realview |
| 176 | machine-$(CONFIG_ARCH_RPC) := rpc | 176 | machine-$(CONFIG_ARCH_RPC) := rpc |
| 177 | machine-$(CONFIG_ARCH_S3C2410) := s3c2410 s3c2412 s3c2416 s3c2440 s3c2443 | 177 | machine-$(CONFIG_ARCH_S3C24XX) := s3c24xx s3c2412 s3c2440 |
| 178 | machine-$(CONFIG_ARCH_S3C64XX) := s3c64xx | 178 | machine-$(CONFIG_ARCH_S3C64XX) := s3c64xx |
| 179 | machine-$(CONFIG_ARCH_S5P64X0) := s5p64x0 | 179 | machine-$(CONFIG_ARCH_S5P64X0) := s5p64x0 |
| 180 | machine-$(CONFIG_ARCH_S5PC100) := s5pc100 | 180 | machine-$(CONFIG_ARCH_S5PC100) := s5pc100 |
| 181 | machine-$(CONFIG_ARCH_S5PV210) := s5pv210 | 181 | machine-$(CONFIG_ARCH_S5PV210) := s5pv210 |
| 182 | machine-$(CONFIG_ARCH_EXYNOS4) := exynos | 182 | machine-$(CONFIG_ARCH_EXYNOS4) := exynos |
| 183 | machine-$(CONFIG_ARCH_EXYNOS5) := exynos | ||
| 183 | machine-$(CONFIG_ARCH_SA1100) := sa1100 | 184 | machine-$(CONFIG_ARCH_SA1100) := sa1100 |
| 184 | machine-$(CONFIG_ARCH_SHARK) := shark | 185 | machine-$(CONFIG_ARCH_SHARK) := shark |
| 185 | machine-$(CONFIG_ARCH_SHMOBILE) := shmobile | 186 | machine-$(CONFIG_ARCH_SHMOBILE) := shmobile |
| @@ -252,6 +253,7 @@ core-$(CONFIG_VFP) += arch/arm/vfp/ · 66 unmodified lines | |||
| 252 | 253 | ||
| 253 | # If we have a machine-specific directory, then include it in the build. | 254 | # If we have a machine-specific directory, then include it in the build. |
| 254 | core-y += arch/arm/kernel/ arch/arm/mm/ arch/arm/common/ | 255 | core-y += arch/arm/kernel/ arch/arm/mm/ arch/arm/common/ |
| 256 | core-y += arch/arm/net/ | ||
| 255 | core-y += $(machdirs) $(platdirs) | 257 | core-y += $(machdirs) $(platdirs) |
| 256 | 258 | ||
| 257 | drivers-$(CONFIG_OPROFILE) += arch/arm/oprofile/ | 259 | drivers-$(CONFIG_OPROFILE) += arch/arm/oprofile/ |
| @@ -11,8 +11,6 @@ · 10 unmodified lines | |||
| 11 | # Copyright (C) 1995-2002 Russell King | 11 | # Copyright (C) 1995-2002 Russell King |
| 12 | # | 12 | # |
| 13 | 13 | ||
| 14 | MKIMAGE := $(srctree)/scripts/mkuboot.sh | ||
| 15 | |||
| 16 | ifneq ($(MACHINE),) | 14 | ifneq ($(MACHINE),) |
| 17 | include $(srctree)/$(MACHINE)/Makefile.boot | 15 | include $(srctree)/$(MACHINE)/Makefile.boot |
| 18 | endif | 16 | endif |
| @@ -69,22 +67,19 @@ $(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y)) · 50 unmodified lines | |||
| 69 | 67 | ||
| 70 | clean-files := *.dtb | 68 | clean-files := *.dtb |
| 71 | 69 | ||
| 72 | quiet_cmd_uimage = UIMAGE $@ | 70 | ifneq ($(LOADADDR),) |
| 73 | cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \ | 71 | UIMAGE_LOADADDR=$(LOADADDR) |
| 74 | -C none -a $(LOADADDR) -e $(STARTADDR) \ | ||
| 75 | -n 'Linux-$(KERNELRELEASE)' -d $< $@ | ||
| 76 | |||
| 77 | ifeq ($(CONFIG_ZBOOT_ROM),y) | ||
| 78 | $(obj)/uImage: LOADADDR=$(CONFIG_ZBOOT_ROM_TEXT) | ||
| 79 | else | 72 | else |
| 80 | $(obj)/uImage: LOADADDR=$(ZRELADDR) | 73 | ifeq ($(CONFIG_ZBOOT_ROM),y) |
| 74 | UIMAGE_LOADADDR=$(CONFIG_ZBOOT_ROM_TEXT) | ||
| 75 | else | ||
| 76 | UIMAGE_LOADADDR=$(ZRELADDR) | ||
| 77 | endif | ||
| 81 | endif | 78 | endif |
| 82 | 79 | ||
| 83 | $(obj)/uImage: STARTADDR=$(LOADADDR) | ||
| 84 | |||
| 85 | check_for_multiple_loadaddr = \ | 80 | check_for_multiple_loadaddr = \ |
| 86 | if [ $(words $(LOADADDR)) -gt 1 ]; then \ | 81 | if [ $(words $(UIMAGE_LOADADDR)) -gt 1 ]; then \ |
| 87 | echo 'multiple load addresses: $(LOADADDR)'; \ | 82 | echo 'multiple load addresses: $(UIMAGE_LOADADDR)'; \ |
| 88 | echo 'This is incompatible with uImages'; \ | 83 | echo 'This is incompatible with uImages'; \ |
| 89 | echo 'Specify LOADADDR on the commandline to build an uImage'; \ | 84 | echo 'Specify LOADADDR on the commandline to build an uImage'; \ |
| 90 | false; \ | 85 | false; \ |
| @@ -1,8 +1,10 @@ | |||
| 1 | ashldi3.S | ||
| 1 | font.c | 2 | font.c |
| 2 | lib1funcs.S | 3 | lib1funcs.S |
| 3 | piggy.gzip | 4 | piggy.gzip |
| 4 | piggy.lzo | 5 | piggy.lzo |
| 5 | piggy.lzma | 6 | piggy.lzma |
| 7 | piggy.xzkern | ||
| 6 | vmlinux | 8 | vmlinux |
| 7 | vmlinux.lds | 9 | vmlinux.lds |
| 8 | 10 | ||
| @@ -92,6 +92,7 @@ SEDFLAGS = s/TEXT_START/$(ZTEXTADDR)/;s/BSS_START/$(ZBSSADDR)/ · 91 unmodified lines | |||
| 92 | suffix_$(CONFIG_KERNEL_GZIP) = gzip | 92 | suffix_$(CONFIG_KERNEL_GZIP) = gzip |
| 93 | suffix_$(CONFIG_KERNEL_LZO) = lzo | 93 | suffix_$(CONFIG_KERNEL_LZO) = lzo |
| 94 | suffix_$(CONFIG_KERNEL_LZMA) = lzma | 94 | suffix_$(CONFIG_KERNEL_LZMA) = lzma |
| 95 | suffix_$(CONFIG_KERNEL_XZ) = xzkern | ||
| 95 | 96 | ||
| 96 | # Borrowed libfdt files for the ATAG compatibility mode | 97 | # Borrowed libfdt files for the ATAG compatibility mode |
| 97 | 98 | ||
| @@ -112,10 +113,12 @@ endif · 14 unmodified lines | |||
| 112 | 113 | ||
| 113 | targets := vmlinux vmlinux.lds \ | 114 | targets := vmlinux vmlinux.lds \ |
| 114 | piggy.$(suffix_y) piggy.$(suffix_y).o \ | 115 | piggy.$(suffix_y) piggy.$(suffix_y).o \ |
| 115 | lib1funcs.o lib1funcs.S font.o font.c head.o misc.o $(OBJS) | 116 | lib1funcs.o lib1funcs.S ashldi3.o ashldi3.S \ |
| 117 | font.o font.c head.o misc.o $(OBJS) | ||
| 116 | 118 | ||
| 117 | # Make sure files are removed during clean | 119 | # Make sure files are removed during clean |
| 118 | extra-y += piggy.gzip piggy.lzo piggy.lzma lib1funcs.S $(libfdt) $(libfdt_hdrs) | 120 | extra-y += piggy.gzip piggy.lzo piggy.lzma piggy.xzkern \ |
| 121 | lib1funcs.S ashldi3.S $(libfdt) $(libfdt_hdrs) | ||
| 119 | 122 | ||
| 120 | ifeq ($(CONFIG_FUNCTION_TRACER),y) | 123 | ifeq ($(CONFIG_FUNCTION_TRACER),y) |
| 121 | ORIG_CFLAGS := $(KBUILD_CFLAGS) | 124 | ORIG_CFLAGS := $(KBUILD_CFLAGS) |
| @@ -151,6 +154,12 @@ lib1funcs = $(obj)/lib1funcs.o · 29 unmodified lines | |||
| 151 | $(obj)/lib1funcs.S: $(srctree)/arch/$(SRCARCH)/lib/lib1funcs.S | 154 | $(obj)/lib1funcs.S: $(srctree)/arch/$(SRCARCH)/lib/lib1funcs.S |
| 152 | $(call cmd,shipped) | 155 | $(call cmd,shipped) |
| 153 | 156 | ||
| 157 | # For __aeabi_llsl | ||
| 158 | ashldi3 = $(obj)/ashldi3.o | ||
| 159 | |||
| 160 | $(obj)/ashldi3.S: $(srctree)/arch/$(SRCARCH)/lib/ashldi3.S | ||
| 161 | $(call cmd,shipped) | ||
| 162 | |||
| 154 | # We need to prevent any GOTOFF relocs being used with references | 163 | # We need to prevent any GOTOFF relocs being used with references |
| 155 | # to symbols in the .bss section since we cannot relocate them | 164 | # to symbols in the .bss section since we cannot relocate them |
| 156 | # independently from the rest at run time. This can be achieved by | 165 | # independently from the rest at run time. This can be achieved by |
| @@ -172,7 +181,7 @@ if [ $(words $(ZRELADDR)) -gt 1 -a "$(CONFIG_AUTO_ZRELADDR)" = "" ]; then \ · 15 unmodified lines | |||
| 172 | fi | 181 | fi |
| 173 | 182 | ||
| 174 | $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \ | 183 | $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \ |
| 175 | $(addprefix $(obj)/, $(OBJS)) $(lib1funcs) FORCE | 184 | $(addprefix $(obj)/, $(OBJS)) $(lib1funcs) $(ashldi3) FORCE |
| 176 | @$(check_for_multiple_zreladdr) | 185 | @$(check_for_multiple_zreladdr) |
| 177 | $(call if_changed,ld) | 186 | $(call if_changed,ld) |
| 178 | @$(check_for_bad_syms) | 187 | @$(check_for_bad_syms) |
| @@ -77,6 +77,8 @@ int atags_to_fdt(void *atag_list, void *fdt, int total_space) · 76 unmodified lines | |||
| 77 | } else if (atag->hdr.tag == ATAG_MEM) { | 77 | } else if (atag->hdr.tag == ATAG_MEM) { |
| 78 | if (memcount >= sizeof(mem_reg_property)/4) | 78 | if (memcount >= sizeof(mem_reg_property)/4) |
| 79 | continue; | 79 | continue; |
| 80 | if (!atag->u.mem.size) | ||
| 81 | continue; | ||
| 80 | mem_reg_property[memcount++] = cpu_to_fdt32(atag->u.mem.start); | 82 | mem_reg_property[memcount++] = cpu_to_fdt32(atag->u.mem.start); |
| 81 | mem_reg_property[memcount++] = cpu_to_fdt32(atag->u.mem.size); | 83 | mem_reg_property[memcount++] = cpu_to_fdt32(atag->u.mem.size); |
| 82 | } else if (atag->hdr.tag == ATAG_INITRD2) { | 84 | } else if (atag->hdr.tag == ATAG_INITRD2) { |
| @@ -44,6 +44,12 @@ extern void error(char *); · 43 unmodified lines | |||
| 44 | #include "../../../../lib/decompress_unlzma.c" | 44 | #include "../../../../lib/decompress_unlzma.c" |
| 45 | #endif | 45 | #endif |
| 46 | 46 | ||
| 47 | #ifdef CONFIG_KERNEL_XZ | ||
| 48 | #define memmove memmove | ||
| 49 | #define memcpy memcpy | ||
| 50 | #include "../../../../lib/decompress_unxz.c" | ||
| 51 | #endif | ||
| 52 | |||
| 47 | int do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x)) | 53 | int do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x)) |
| 48 | { | 54 | { |
| 49 | return decompress(input, len, NULL, NULL, output, NULL, error); | 55 | return decompress(input, len, NULL, NULL, output, NULL, error); |
| @@ -58,7 +58,7 @@ · 57 unmodified lines | |||
| 58 | add \rb, \rb, #0x00010000 @ Ser1 | 58 | add \rb, \rb, #0x00010000 @ Ser1 |
| 59 | #endif | 59 | #endif |
| 60 | .endm | 60 | .endm |
| 61 | #elif defined(CONFIG_ARCH_S3C2410) | 61 | #elif defined(CONFIG_ARCH_S3C24XX) |
| 62 | .macro loadsp, rb, tmp | 62 | .macro loadsp, rb, tmp |
| 63 | mov \rb, #0x50000000 | 63 | mov \rb, #0x50000000 |
| 64 | add \rb, \rb, #0x4000 * CONFIG_S3C_LOWLEVEL_UART_PORT | 64 | add \rb, \rb, #0x4000 * CONFIG_S3C_LOWLEVEL_UART_PORT |
| @@ -273,7 +273,7 @@ restart: adr r0, LC0 · 208 unmodified lines | |||
| 273 | add r0, r0, #0x100 | 273 | add r0, r0, #0x100 |
| 274 | mov r1, r6 | 274 | mov r1, r6 |
| 275 | sub r2, sp, r6 | 275 | sub r2, sp, r6 |
| 276 | blne atags_to_fdt | 276 | bleq atags_to_fdt |
| 277 | 277 | ||
| 278 | ldmfd sp!, {r0-r3, ip, lr} | 278 | ldmfd sp!, {r0-r3, ip, lr} |
| 279 | sub sp, sp, #0x10000 | 279 | sub sp, sp, #0x10000 |
| @@ -0,0 +1,6 @@ | |||
| 1 | .section .piggydata,#alloc | ||
| 2 | .globl input_data | ||
| 3 | input_data: | ||
| 4 | .incbin "arch/arm/boot/compressed/piggy.xzkern" | ||
| 5 | .globl input_data_end | ||
| 6 | input_data_end: | ||
| @@ -0,0 +1,27 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2011 Ilya Yanok, EmCraft Systems | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License version 2 as | ||
| 6 | * published by the Free Software Foundation. | ||
| 7 | */ | ||
| 8 | /dts-v1/; | ||
| 9 | |||
| 10 | /include/ "omap3.dtsi" | ||
| 11 | |||
| 12 | / { | ||
| 13 | model = "TeeJet Mt.Ventoux"; | ||
| 14 | compatible = "teejet,mt_ventoux", "ti,omap3"; | ||
| 15 | |||
| 16 | memory { | ||
| 17 | device_type = "memory"; | ||
| 18 | reg = <0x80000000 0x10000000>; /* 256 MB */ | ||
| 19 | }; | ||
| 20 | |||
| 21 | /* AM35xx doesn't have IVA */ | ||
| 22 | soc { | ||
| 23 | iva { | ||
| 24 | status = "disabled"; | ||
| 25 | }; | ||
| 26 | }; | ||
| 27 | }; | ||
| @@ -23,6 +23,11 @@ · 22 unmodified lines | |||
| 23 | serial4 = &usart3; | 23 | serial4 = &usart3; |
| 24 | serial5 = &usart4; | 24 | serial5 = &usart4; |
| 25 | serial6 = &usart5; | 25 | serial6 = &usart5; |
| 26 | gpio0 = &pioA; | ||
| 27 | gpio1 = &pioB; | ||
| 28 | gpio2 = &pioC; | ||
| 29 | tcb0 = &tcb0; | ||
| 30 | tcb1 = &tcb1; | ||
| 26 | }; | 31 | }; |
| 27 | cpus { | 32 | cpus { |
| 28 | cpu@0 { | 33 | cpu@0 { |
| @@ -30,7 +35,7 @@ · 1 unmodified line | |||
| 30 | }; | 35 | }; |
| 31 | }; | 36 | }; |
| 32 | 37 | ||
| 33 | memory@20000000 { | 38 | memory { |
| 34 | reg = <0x20000000 0x08000000>; | 39 | reg = <0x20000000 0x08000000>; |
| 35 | }; | 40 | }; |
| 36 | 41 | ||
| @@ -47,24 +52,88 @@ · 10 unmodified lines | |||
| 47 | ranges; | 52 | ranges; |
| 48 | 53 | ||
| 49 | aic: interrupt-controller@fffff000 { | 54 | aic: interrupt-controller@fffff000 { |
| 50 | #interrupt-cells = <1>; | 55 | #interrupt-cells = <2>; |
| 51 | compatible = "atmel,at91rm9200-aic"; | 56 | compatible = "atmel,at91rm9200-aic"; |
| 52 | interrupt-controller; | 57 | interrupt-controller; |
| 53 | interrupt-parent; | ||
| 54 | reg = <0xfffff000 0x200>; | 58 | reg = <0xfffff000 0x200>; |
| 55 | }; | 59 | }; |
| 56 | 60 | ||
| 61 | ramc0: ramc@ffffea00 { | ||
| 62 | compatible = "atmel,at91sam9260-sdramc"; | ||
| 63 | reg = <0xffffea00 0x200>; | ||
| 64 | }; | ||
| 65 | |||
| 66 | pmc: pmc@fffffc00 { | ||
| 67 | compatible = "atmel,at91rm9200-pmc"; | ||
| 68 | reg = <0xfffffc00 0x100>; | ||
| 69 | }; | ||
| 70 | |||
| 71 | rstc@fffffd00 { | ||
| 72 | compatible = "atmel,at91sam9260-rstc"; | ||
| 73 | reg = <0xfffffd00 0x10>; | ||
| 74 | }; | ||
| 75 | |||
| 76 | shdwc@fffffd10 { | ||
| 77 | compatible = "atmel,at91sam9260-shdwc"; | ||
| 78 | reg = <0xfffffd10 0x10>; | ||
| 79 | }; | ||
| 80 | |||
| 81 | pit: timer@fffffd30 { | ||
| 82 | compatible = "atmel,at91sam9260-pit"; | ||
| 83 | reg = <0xfffffd30 0xf>; | ||
| 84 | interrupts = <1 4>; | ||
| 85 | }; | ||
| 86 | |||
| 87 | tcb0: timer@fffa0000 { | ||
| 88 | compatible = "atmel,at91rm9200-tcb"; | ||
| 89 | reg = <0xfffa0000 0x100>; | ||
| 90 | interrupts = <17 4 18 4 19 4>; | ||
| 91 | }; | ||
| 92 | |||
| 93 | tcb1: timer@fffdc000 { | ||
| 94 | compatible = "atmel,at91rm9200-tcb"; | ||
| 95 | reg = <0xfffdc000 0x100>; | ||
| 96 | interrupts = <26 4 27 4 28 4>; | ||
| 97 | }; | ||
| 98 | |||
| 99 | pioA: gpio@fffff400 { | ||
| 100 | compatible = "atmel,at91rm9200-gpio"; | ||
| 101 | reg = <0xfffff400 0x100>; | ||
| 102 | interrupts = <2 4>; | ||
| 103 | #gpio-cells = <2>; | ||
| 104 | gpio-controller; | ||
| 105 | interrupt-controller; | ||
| 106 | }; | ||
| 107 | |||
| 108 | pioB: gpio@fffff600 { | ||
| 109 | compatible = "atmel,at91rm9200-gpio"; | ||
| 110 | reg = <0xfffff600 0x100>; | ||
| 111 | interrupts = <3 4>; | ||
| 112 | #gpio-cells = <2>; | ||
| 113 | gpio-controller; | ||
| 114 | interrupt-controller; | ||
| 115 | }; | ||
| 116 | |||
| 117 | pioC: gpio@fffff800 { | ||
| 118 | compatible = "atmel,at91rm9200-gpio"; | ||
| 119 | reg = <0xfffff800 0x100>; | ||
| 120 | interrupts = <4 4>; | ||
| 121 | #gpio-cells = <2>; | ||
| 122 | gpio-controller; | ||
| 123 | interrupt-controller; | ||
| 124 | }; | ||
| 125 | |||
| 57 | dbgu: serial@fffff200 { | 126 | dbgu: serial@fffff200 { |
| 58 | compatible = "atmel,at91sam9260-usart"; | 127 | compatible = "atmel,at91sam9260-usart"; |
| 59 | reg = <0xfffff200 0x200>; | 128 | reg = <0xfffff200 0x200>; |
| 60 | interrupts = <1>; | 129 | interrupts = <1 4>; |
| 61 | status = "disabled"; | 130 | status = "disabled"; |
| 62 | }; | 131 | }; |
| 63 | 132 | ||
| 64 | usart0: serial@fffb0000 { | 133 | usart0: serial@fffb0000 { |
| 65 | compatible = "atmel,at91sam9260-usart"; | 134 | compatible = "atmel,at91sam9260-usart"; |
| 66 | reg = <0xfffb0000 0x200>; | 135 | reg = <0xfffb0000 0x200>; |
| 67 | interrupts = <6>; | 136 | interrupts = <6 4>; |
| 68 | atmel,use-dma-rx; | 137 | atmel,use-dma-rx; |
| 69 | atmel,use-dma-tx; | 138 | atmel,use-dma-tx; |
| 70 | status = "disabled"; | 139 | status = "disabled"; |
| @@ -73,7 +142,7 @@ · 2 unmodified lines | |||
| 73 | usart1: serial@fffb4000 { | 142 | usart1: serial@fffb4000 { |
| 74 | compatible = "atmel,at91sam9260-usart"; | 143 | compatible = "atmel,at91sam9260-usart"; |
| 75 | reg = <0xfffb4000 0x200>; | 144 | reg = <0xfffb4000 0x200>; |
| 76 | interrupts = <7>; | 145 | interrupts = <7 4>; |
| 77 | atmel,use-dma-rx; | 146 | atmel,use-dma-rx; |
| 78 | atmel,use-dma-tx; | 147 | atmel,use-dma-tx; |
| 79 | status = "disabled"; | 148 | status = "disabled"; |
| @@ -82,7 +151,7 @@ · 2 unmodified lines | |||
| 82 | usart2: serial@fffb8000 { | 151 | usart2: serial@fffb8000 { |
| 83 | compatible = "atmel,at91sam9260-usart"; | 152 | compatible = "atmel,at91sam9260-usart"; |
| 84 | reg = <0xfffb8000 0x200>; | 153 | reg = <0xfffb8000 0x200>; |
| 85 | interrupts = <8>; | 154 | interrupts = <8 4>; |
| 86 | atmel,use-dma-rx; | 155 | atmel,use-dma-rx; |
| 87 | atmel,use-dma-tx; | 156 | atmel,use-dma-tx; |
| 88 | status = "disabled"; | 157 | status = "disabled"; |
| @@ -91,7 +160,7 @@ · 2 unmodified lines | |||
| 91 | usart3: serial@fffd0000 { | 160 | usart3: serial@fffd0000 { |
| 92 | compatible = "atmel,at91sam9260-usart"; | 161 | compatible = "atmel,at91sam9260-usart"; |
| 93 | reg = <0xfffd0000 0x200>; | 162 | reg = <0xfffd0000 0x200>; |
| 94 | interrupts = <23>; | 163 | interrupts = <23 4>; |
| 95 | atmel,use-dma-rx; | 164 | atmel,use-dma-rx; |
| 96 | atmel,use-dma-tx; | 165 | atmel,use-dma-tx; |
| 97 | status = "disabled"; | 166 | status = "disabled"; |
| @@ -100,7 +169,7 @@ · 2 unmodified lines | |||
| 100 | usart4: serial@fffd4000 { | 169 | usart4: serial@fffd4000 { |
| 101 | compatible = "atmel,at91sam9260-usart"; | 170 | compatible = "atmel,at91sam9260-usart"; |
| 102 | reg = <0xfffd4000 0x200>; | 171 | reg = <0xfffd4000 0x200>; |
| 103 | interrupts = <24>; | 172 | interrupts = <24 4>; |
| 104 | atmel,use-dma-rx; | 173 | atmel,use-dma-rx; |
| 105 | atmel,use-dma-tx; | 174 | atmel,use-dma-tx; |
| 106 | status = "disabled"; | 175 | status = "disabled"; |
| @@ -109,7 +178,7 @@ · 2 unmodified lines | |||
| 109 | usart5: serial@fffd8000 { | 178 | usart5: serial@fffd8000 { |
| 110 | compatible = "atmel,at91sam9260-usart"; | 179 | compatible = "atmel,at91sam9260-usart"; |
| 111 | reg = <0xfffd8000 0x200>; | 180 | reg = <0xfffd8000 0x200>; |
| 112 | interrupts = <25>; | 181 | interrupts = <25 4>; |
| 113 | atmel,use-dma-rx; | 182 | atmel,use-dma-rx; |
| 114 | atmel,use-dma-tx; | 183 | atmel,use-dma-tx; |
| 115 | status = "disabled"; | 184 | status = "disabled"; |
| @@ -118,9 +187,52 @@ · 2 unmodified lines | |||
| 118 | macb0: ethernet@fffc4000 { | 187 | macb0: ethernet@fffc4000 { |
| 119 | compatible = "cdns,at32ap7000-macb", "cdns,macb"; | 188 | compatible = "cdns,at32ap7000-macb", "cdns,macb"; |
| 120 | reg = <0xfffc4000 0x100>; | 189 | reg = <0xfffc4000 0x100>; |
| 121 | interrupts = <21>; | 190 | interrupts = <21 4>; |
| 191 | status = "disabled"; | ||
| 192 | }; | ||
| 193 | |||
| 194 | usb1: gadget@fffa4000 { | ||
| 195 | compatible = "atmel,at91rm9200-udc"; | ||
| 196 | reg = <0xfffa4000 0x4000>; | ||
| 197 | interrupts = <10 4>; | ||
| 122 | status = "disabled"; | 198 | status = "disabled"; |
| 123 | }; | 199 | }; |
| 124 | }; | 200 | }; |
| 201 | |||
| 202 | nand0: nand@40000000 { | ||
| 203 | compatible = "atmel,at91rm9200-nand"; | ||
| 204 | #address-cells = <1>; | ||
| 205 | #size-cells = <1>; | ||
| 206 | reg = <0x40000000 0x10000000 | ||
| 207 | 0xffffe800 0x200 | ||
| 208 | >; | ||
| 209 | atmel,nand-addr-offset = <21>; | ||
| 210 | atmel,nand-cmd-offset = <22>; | ||
| 211 | gpios = <&pioC 13 0 | ||
| 212 | &pioC 14 0 | ||
| 213 | 0 | ||
| 214 | >; | ||
| 215 | status = "disabled"; | ||
| 216 | }; | ||
| 217 | |||
| 218 | usb0: ohci@00500000 { | ||
| 219 | compatible = "atmel,at91rm9200-ohci", "usb-ohci"; | ||
| 220 | reg = <0x00500000 0x100000>; | ||
| 221 | interrupts = <20 4>; | ||
| 222 | status = "disabled"; | ||
| 223 | }; | ||
| 224 | }; | ||
| 225 | |||
| 226 | i2c@0 { | ||
| 227 | compatible = "i2c-gpio"; | ||
| 228 | gpios = <&pioA 23 0 /* sda */ | ||
| 229 | &pioA 24 0 /* scl */ | ||
| 230 | >; | ||
| 231 | i2c-gpio,sda-open-drain; | ||
| 232 | i2c-gpio,scl-open-drain; | ||
| 233 | i2c-gpio,delay-us = <2>; /* ~100 kHz */ | ||
| 234 | #address-cells = <1>; | ||
| 235 | #size-cells = <0>; | ||
| 236 | status = "disabled"; | ||
| 125 | }; | 237 | }; |
| 126 | }; | 238 | }; |
| @@ -0,0 +1,49 @@ | |||
| 1 | /* | ||
| 2 | * at91sam9g25ek.dts - Device Tree file for AT91SAM9G25-EK board | ||
| 3 | * | ||
| 4 | * Copyright (C) 2012 Atmel, | ||
| 5 | * 2012 Nicolas Ferre <nicolas.ferre@atmel.com> | ||
| 6 | * | ||
| 7 | * Licensed under GPLv2 or later. | ||
| 8 | */ | ||
| 9 | /dts-v1/; | ||
| 10 | /include/ "at91sam9x5.dtsi" | ||
| 11 | /include/ "at91sam9x5cm.dtsi" | ||
| 12 | |||
| 13 | / { | ||
| 14 | model = "Atmel AT91SAM9G25-EK"; | ||
| 15 | compatible = "atmel,at91sam9g25ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; | ||
| 16 | |||
| 17 | chosen { | ||
| 18 | bootargs = "128M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=ubifs ubi.mtd=1 root=ubi0:rootfs"; | ||
| 19 | }; | ||
| 20 | |||
| 21 | ahb { | ||
| 22 | apb { | ||
| 23 | dbgu: serial@fffff200 { | ||
| 24 | status = "okay"; | ||
| 25 | }; | ||
| 26 | |||
| 27 | usart0: serial@f801c000 { | ||
| 28 | status = "okay"; | ||
| 29 | }; | ||
| 30 | |||
| 31 | macb0: ethernet@f802c000 { | ||
| 32 | phy-mode = "rmii"; | ||
| 33 | status = "okay"; | ||
| 34 | }; | ||
| 35 | }; | ||
| 36 | |||
| 37 | usb0: ohci@00600000 { | ||
| 38 | status = "okay"; | ||
| 39 | num-ports = <2>; | ||
| 40 | atmel,vbus-gpio = <&pioD 19 1 | ||
| 41 | &pioD 20 1 | ||
| 42 | >; | ||
| 43 | }; | ||
| 44 | |||
| 45 | usb1: ehci@00700000 { | ||
| 46 | status = "okay"; | ||
| 47 | }; | ||
| 48 | }; | ||
| 49 | }; | ||
| @@ -22,6 +22,13 @@ · 21 unmodified lines | |||
| 22 | serial2 = &usart1; | 22 | serial2 = &usart1; |
| 23 | serial3 = &usart2; | 23 | serial3 = &usart2; |
| 24 | serial4 = &usart3; | 24 | serial4 = &usart3; |
| 25 | gpio0 = &pioA; | ||
| 26 | gpio1 = &pioB; | ||
| 27 | gpio2 = &pioC; | ||
| 28 | gpio3 = &pioD; | ||
| 29 | gpio4 = &pioE; | ||
| 30 | tcb0 = &tcb0; | ||
| 31 | tcb1 = &tcb1; | ||
| 25 | }; | 32 | }; |
| 26 | cpus { | 33 | cpus { |
| 27 | cpu@0 { | 34 | cpu@0 { |
| @@ -29,7 +36,7 @@ · 1 unmodified line | |||
| 29 | }; | 36 | }; |
| 30 | }; | 37 | }; |
| 31 | 38 | ||
| 32 | memory@70000000 { | 39 | memory { |
| 33 | reg = <0x70000000 0x10000000>; | 40 | reg = <0x70000000 0x10000000>; |
| 34 | }; | 41 | }; |
| 35 | 42 | ||
| @@ -46,30 +53,114 @@ · 10 unmodified lines | |||
| 46 | ranges; | 53 | ranges; |
| 47 | 54 | ||
| 48 | aic: interrupt-controller@fffff000 { | 55 | aic: interrupt-controller@fffff000 { |
| 49 | #interrupt-cells = <1>; | 56 | #interrupt-cells = <2>; |
| 50 | compatible = "atmel,at91rm9200-aic"; | 57 | compatible = "atmel,at91rm9200-aic"; |
| 51 | interrupt-controller; | 58 | interrupt-controller; |
| 52 | interrupt-parent; | ||
| 53 | reg = <0xfffff000 0x200>; | 59 | reg = <0xfffff000 0x200>; |
| 54 | }; | 60 | }; |
| 55 | 61 | ||
| 62 | ramc0: ramc@ffffe400 { | ||
| 63 | compatible = "atmel,at91sam9g45-ddramc"; | ||
| 64 | reg = <0xffffe400 0x200 | ||
| 65 | 0xffffe600 0x200>; | ||
| 66 | }; | ||
| 67 | |||
| 68 | pmc: pmc@fffffc00 { | ||
| 69 | compatible = "atmel,at91rm9200-pmc"; | ||
| 70 | reg = <0xfffffc00 0x100>; | ||
| 71 | }; | ||
| 72 | |||
| 73 | rstc@fffffd00 { | ||
| 74 | compatible = "atmel,at91sam9g45-rstc"; | ||
| 75 | reg = <0xfffffd00 0x10>; | ||
| 76 | }; | ||
| 77 | |||
| 78 | pit: timer@fffffd30 { | ||
| 79 | compatible = "atmel,at91sam9260-pit"; | ||
| 80 | reg = <0xfffffd30 0xf>; | ||
| 81 | interrupts = <1 4>; | ||
| 82 | }; | ||
| 83 | |||
| 84 | |||
| 85 | shdwc@fffffd10 { | ||
| 86 | compatible = "atmel,at91sam9rl-shdwc"; | ||
| 87 | reg = <0xfffffd10 0x10>; | ||
| 88 | }; | ||
| 89 | |||
| 90 | tcb0: timer@fff7c000 { | ||
| 91 | compatible = "atmel,at91rm9200-tcb"; | ||
| 92 | reg = <0xfff7c000 0x100>; | ||
| 93 | interrupts = <18 4>; | ||
| 94 | }; | ||
| 95 | |||
| 96 | tcb1: timer@fffd4000 { | ||
| 97 | compatible = "atmel,at91rm9200-tcb"; | ||
| 98 | reg = <0xfffd4000 0x100>; | ||
| 99 | interrupts = <18 4>; | ||
| 100 | }; | ||
| 101 | |||
| 56 | dma: dma-controller@ffffec00 { | 102 | dma: dma-controller@ffffec00 { |
| 57 | compatible = "atmel,at91sam9g45-dma"; | 103 | compatible = "atmel,at91sam9g45-dma"; |
| 58 | reg = <0xffffec00 0x200>; | 104 | reg = <0xffffec00 0x200>; |
| 59 | interrupts = <21>; | 105 | interrupts = <21 4>; |
| 106 | }; | ||
| 107 | |||
| 108 | pioA: gpio@fffff200 { | ||
| 109 | compatible = "atmel,at91rm9200-gpio"; | ||
| 110 | reg = <0xfffff200 0x100>; | ||
| 111 | interrupts = <2 4>; | ||
| 112 | #gpio-cells = <2>; | ||
| 113 | gpio-controller; | ||
| 114 | interrupt-controller; | ||
| 115 | }; | ||
| 116 | |||
| 117 | pioB: gpio@fffff400 { | ||
| 118 | compatible = "atmel,at91rm9200-gpio"; | ||
| 119 | reg = <0xfffff400 0x100>; | ||
| 120 | interrupts = <3 4>; | ||
| 121 | #gpio-cells = <2>; | ||
| 122 | gpio-controller; | ||
| 123 | interrupt-controller; | ||
| 124 | }; | ||
| 125 | |||
| 126 | pioC: gpio@fffff600 { | ||
| 127 | compatible = "atmel,at91rm9200-gpio"; | ||
| 128 | reg = <0xfffff600 0x100>; | ||
| 129 | interrupts = <4 4>; | ||
| 130 | #gpio-cells = <2>; | ||
| 131 | gpio-controller; | ||
| 132 | interrupt-controller; | ||
| 133 | }; | ||
| 134 | |||
| 135 | pioD: gpio@fffff800 { | ||
| 136 | compatible = "atmel,at91rm9200-gpio"; | ||
| 137 | reg = <0xfffff800 0x100>; | ||
| 138 | interrupts = <5 4>; | ||
| 139 | #gpio-cells = <2>; | ||
| 140 | gpio-controller; | ||
| 141 | interrupt-controller; | ||
| 142 | }; | ||
| 143 | |||
| 144 | pioE: gpio@fffffa00 { | ||
| 145 | compatible = "atmel,at91rm9200-gpio"; | ||
| 146 | reg = <0xfffffa00 0x100>; | ||
| 147 | interrupts = <5 4>; | ||
| 148 | #gpio-cells = <2>; | ||
| 149 | gpio-controller; | ||
| 150 | interrupt-controller; | ||
| 60 | }; | 151 | }; |
| 61 | 152 | ||
| 62 | dbgu: serial@ffffee00 { | 153 | dbgu: serial@ffffee00 { |
| 63 | compatible = "atmel,at91sam9260-usart"; | 154 | compatible = "atmel,at91sam9260-usart"; |
| 64 | reg = <0xffffee00 0x200>; | 155 | reg = <0xffffee00 0x200>; |
| 65 | interrupts = <1>; | 156 | interrupts = <1 4>; |
| 66 | status = "disabled"; | 157 | status = "disabled"; |
| 67 | }; | 158 | }; |
| 68 | 159 | ||
| 69 | usart0: serial@fff8c000 { | 160 | usart0: serial@fff8c000 { |
| 70 | compatible = "atmel,at91sam9260-usart"; | 161 | compatible = "atmel,at91sam9260-usart"; |
| 71 | reg = <0xfff8c000 0x200>; | 162 | reg = <0xfff8c000 0x200>; |
| 72 | interrupts = <7>; | 163 | interrupts = <7 4>; |
| 73 | atmel,use-dma-rx; | 164 | atmel,use-dma-rx; |
| 74 | atmel,use-dma-tx; | 165 | atmel,use-dma-tx; |
| 75 | status = "disabled"; | 166 | status = "disabled"; |
| @@ -78,7 +169,7 @@ · 2 unmodified lines | |||
| 78 | usart1: serial@fff90000 { | 169 | usart1: serial@fff90000 { |
| 79 | compatible = "atmel,at91sam9260-usart"; | 170 | compatible = "atmel,at91sam9260-usart"; |
| 80 | reg = <0xfff90000 0x200>; | 171 | reg = <0xfff90000 0x200>; |
| 81 | interrupts = <8>; | 172 | interrupts = <8 4>; |
| 82 | atmel,use-dma-rx; | 173 | atmel,use-dma-rx; |
| 83 | atmel,use-dma-tx; | 174 | atmel,use-dma-tx; |
| 84 | status = "disabled"; | 175 | status = "disabled"; |
| @@ -87,7 +178,7 @@ · 2 unmodified lines | |||
| 87 | usart2: serial@fff94000 { | 178 | usart2: serial@fff94000 { |
| 88 | compatible = "atmel,at91sam9260-usart"; | 179 | compatible = "atmel,at91sam9260-usart"; |
| 89 | reg = <0xfff94000 0x200>; | 180 | reg = <0xfff94000 0x200>; |
| 90 | interrupts = <9>; | 181 | interrupts = <9 4>; |
| 91 | atmel,use-dma-rx; | 182 | atmel,use-dma-rx; |
| 92 | atmel,use-dma-tx; | 183 | atmel,use-dma-tx; |
| 93 | status = "disabled"; | 184 | status = "disabled"; |
| @@ -96,7 +187,7 @@ · 2 unmodified lines | |||
| 96 | usart3: serial@fff98000 { | 187 | usart3: serial@fff98000 { |
| 97 | compatible = "atmel,at91sam9260-usart"; | 188 | compatible = "atmel,at91sam9260-usart"; |
| 98 | reg = <0xfff98000 0x200>; | 189 | reg = <0xfff98000 0x200>; |
| 99 | interrupts = <10>; | 190 | interrupts = <10 4>; |
| 100 | atmel,use-dma-rx; | 191 | atmel,use-dma-rx; |
| 101 | atmel,use-dma-tx; | 192 | atmel,use-dma-tx; |
| 102 | status = "disabled"; | 193 | status = "disabled"; |
| @@ -105,9 +196,52 @@ · 2 unmodified lines | |||
| 105 | macb0: ethernet@fffbc000 { | 196 | macb0: ethernet@fffbc000 { |
| 106 | compatible = "cdns,at32ap7000-macb", "cdns,macb"; | 197 | compatible = "cdns,at32ap7000-macb", "cdns,macb"; |
| 107 | reg = <0xfffbc000 0x100>; | 198 | reg = <0xfffbc000 0x100>; |
| 108 | interrupts = <25>; | 199 | interrupts = <25 4>; |
| 109 | status = "disabled"; | 200 | status = "disabled"; |
| 110 | }; | 201 | }; |
| 111 | }; | 202 | }; |
| 203 | |||
| 204 | nand0: nand@40000000 { | ||
| 205 | compatible = "atmel,at91rm9200-nand"; | ||
| 206 | #address-cells = <1>; | ||
| 207 | #size-cells = <1>; | ||
| 208 | reg = <0x40000000 0x10000000 | ||
| 209 | 0xffffe200 0x200 | ||
| 210 | >; | ||
| 211 | atmel,nand-addr-offset = <21>; | ||
| 212 | atmel,nand-cmd-offset = <22>; | ||
| 213 | gpios = <&pioC 8 0 | ||
| 214 | &pioC 14 0 | ||
| 215 | 0 | ||
| 216 | >; | ||
| 217 | status = "disabled"; | ||
| 218 | }; | ||
| 219 | |||
| 220 | usb0: ohci@00700000 { | ||
| 221 | compatible = "atmel,at91rm9200-ohci", "usb-ohci"; | ||
| 222 | reg = <0x00700000 0x100000>; | ||
| 223 | interrupts = <22 4>; | ||
| 224 | status = "disabled"; | ||
| 225 | }; | ||
| 226 | |||
| 227 | usb1: ehci@00800000 { | ||
| 228 | compatible = "atmel,at91sam9g45-ehci", "usb-ehci"; | ||
| 229 | reg = <0x00800000 0x100000>; | ||
| 230 | interrupts = <22 4>; | ||
| 231 | status = "disabled"; | ||
| 232 | }; | ||
| 233 | }; | ||
| 234 | |||
| 235 | i2c@0 { | ||
| 236 | compatible = "i2c-gpio"; | ||
| 237 | gpios = <&pioA 20 0 /* sda */ | ||
| 238 | &pioA 21 0 /* scl */ | ||
| 239 | >; | ||
| 240 | i2c-gpio,sda-open-drain; | ||
| 241 | i2c-gpio,scl-open-drain; | ||
| 242 | i2c-gpio,delay-us = <5>; /* ~100 kHz */ | ||
| 243 | #address-cells = <1>; | ||
| 244 | #size-cells = <0>; | ||
| 245 | status = "disabled"; | ||
| 112 | }; | 246 | }; |
| 113 | }; | 247 | }; |
| @@ -14,13 +14,24 @@ · 13 unmodified lines | |||
| 14 | compatible = "atmel,at91sam9m10g45ek", "atmel,at91sam9g45", "atmel,at91sam9"; | 14 | compatible = "atmel,at91sam9m10g45ek", "atmel,at91sam9g45", "atmel,at91sam9"; |
| 15 | 15 | ||
| 16 | chosen { | 16 | chosen { |
| 17 | bootargs = "mem=64M console=ttyS0,115200 mtdparts=atmel_nand:4M(bootstrap/uboot/kernel)ro,60M(rootfs),-(data) root=/dev/mtdblock1 rw rootfstype=jffs2"; | 17 | bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2"; |
| 18 | }; | 18 | }; |
| 19 | 19 | ||
| 20 | memory@70000000 { | 20 | memory { |
| 21 | reg = <0x70000000 0x4000000>; | 21 | reg = <0x70000000 0x4000000>; |
| 22 | }; | 22 | }; |
| 23 | 23 | ||
| 24 | clocks { | ||
| 25 | #address-cells = <1>; | ||
| 26 | #size-cells = <1>; | ||
| 27 | ranges; | ||
| 28 | |||
| 29 | main_clock: clock@0 { | ||
| 30 | compatible = "atmel,osc", "fixed-clock"; | ||
| 31 | clock-frequency = <12000000>; | ||
| 32 | }; | ||
| 33 | }; | ||
| 34 | |||
| 24 | ahb { | 35 | ahb { |
| 25 | apb { | 36 | apb { |
| 26 | dbgu: serial@ffffee00 { | 37 | dbgu: serial@ffffee00 { |
| @@ -36,5 +47,110 @@ · 9 unmodified lines | |||
| 36 | status = "okay"; | 47 | status = "okay"; |
| 37 | }; | 48 | }; |
| 38 | }; | 49 | }; |
| 50 | |||
| 51 | nand0: nand@40000000 { | ||
| 52 | nand-bus-width = <8>; | ||
| 53 | nand-ecc-mode = "soft"; | ||
| 54 | nand-on-flash-bbt; | ||
| 55 | status = "okay"; | ||
| 56 | |||
| 57 | boot@0 { | ||
| 58 | label = "bootstrap/uboot/kernel"; | ||
| 59 | reg = <0x0 0x400000>; | ||
| 60 | }; | ||
| 61 | |||
| 62 | rootfs@400000 { | ||
| 63 | label = "rootfs"; | ||
| 64 | reg = <0x400000 0x3C00000>; | ||
| 65 | }; | ||
| 66 | |||
| 67 | data@4000000 { | ||
| 68 | label = "data"; | ||
| 69 | reg = <0x4000000 0xC000000>; | ||
| 70 | }; | ||
| 71 | }; | ||
| 72 | |||
| 73 | usb0: ohci@00700000 { | ||
| 74 | status = "okay"; | ||
| 75 | num-ports = <2>; | ||
| 76 | atmel,vbus-gpio = <&pioD 1 1 | ||
| 77 | &pioD 3 1>; | ||
| 78 | }; | ||
| 79 | |||
| 80 | usb1: ehci@00800000 { | ||
| 81 | status = "okay"; | ||
| 82 | }; | ||
| 83 | }; | ||
| 84 | |||
| 85 | leds { | ||
| 86 | compatible = "gpio-leds"; | ||
| 87 | |||
| 88 | d8 { | ||
| 89 | label = "d8"; | ||
| 90 | gpios = <&pioD 30 0>; | ||
| 91 | linux,default-trigger = "heartbeat"; | ||
| 92 | }; | ||
| 93 | |||
| 94 | d6 { | ||
| 95 | label = "d6"; | ||
| 96 | gpios = <&pioD 0 1>; | ||
| 97 | linux,default-trigger = "nand-disk"; | ||
| 98 | }; | ||
| 99 | |||
| 100 | d7 { | ||
| 101 | label = "d7"; | ||
| 102 | gpios = <&pioD 31 1>; | ||
| 103 | linux,default-trigger = "mmc0"; | ||
| 104 | }; | ||
| 105 | }; | ||
| 106 | |||
| 107 | gpio_keys { | ||
| 108 | compatible = "gpio-keys"; | ||
| 109 | #address-cells = <1>; | ||
| 110 | #size-cells = <0>; | ||
| 111 | |||
| 112 | left_click { | ||
| 113 | label = "left_click"; | ||
| 114 | gpios = <&pioB 6 1>; | ||
| 115 | linux,code = <272>; | ||
| 116 | gpio-key,wakeup; | ||
| 117 | }; | ||
| 118 | |||
| 119 | right_click { | ||
| 120 | label = "right_click"; | ||
| 121 | gpios = <&pioB 7 1>; | ||
| 122 | linux,code = <273>; | ||
| 123 | gpio-key,wakeup; | ||
| 124 | }; | ||
| 125 | |||
| 126 | left { | ||
| 127 | label = "Joystick Left"; | ||
| 128 | gpios = <&pioB 14 1>; | ||
| 129 | linux,code = <105>; | ||
| 130 | }; | ||
| 131 | |||
| 132 | right { | ||
| 133 | label = "Joystick Right"; | ||
| 134 | gpios = <&pioB 15 1>; | ||
| 135 | linux,code = <106>; | ||
| 136 | }; | ||
| 137 | |||
| 138 | up { | ||
| 139 | label = "Joystick Up"; | ||
| 140 | gpios = <&pioB 16 1>; | ||
| 141 | linux,code = <103>; | ||
| 142 | }; | ||
| 143 | |||
| 144 | down { | ||
| 145 | label = "Joystick Down"; | ||
| 146 | gpios = <&pioB 17 1>; | ||
| 147 | linux,code = <108>; | ||
| 148 | }; | ||
| 149 | |||
| 150 | enter { | ||
| 151 | label = "Joystick Press"; | ||
| 152 | gpios = <&pioB 18 1>; | ||
| 153 | linux,code = <28>; | ||
| 154 | }; | ||
| 39 | }; | 155 | }; |
| 40 | }; | 156 | }; |
| @@ -0,0 +1,263 @@ | |||
| 1 | /* | ||
| 2 | * at91sam9x5.dtsi - Device Tree Include file for AT91SAM9x5 family SoC | ||
| 3 | * applies to AT91SAM9G15, AT91SAM9G25, AT91SAM9G35, | ||
| 4 | * AT91SAM9X25, AT91SAM9X35 SoC | ||
| 5 | * | ||
| 6 | * Copyright (C) 2012 Atmel, | ||
| 7 | * 2012 Nicolas Ferre <nicolas.ferre@atmel.com> | ||
| 8 | * | ||
| 9 | * Licensed under GPLv2 or later. | ||
| 10 | */ | ||
| 11 | |||
| 12 | /include/ "skeleton.dtsi" | ||
| 13 | |||
| 14 | / { | ||
| 15 | model = "Atmel AT91SAM9x5 family SoC"; | ||
| 16 | compatible = "atmel,at91sam9x5"; | ||
| 17 | interrupt-parent = <&aic>; | ||
| 18 | |||
| 19 | aliases { | ||
| 20 | serial0 = &dbgu; | ||
| 21 | serial1 = &usart0; | ||
| 22 | serial2 = &usart1; | ||
| 23 | serial3 = &usart2; | ||
| 24 | gpio0 = &pioA; | ||
| 25 | gpio1 = &pioB; | ||
| 26 | gpio2 = &pioC; | ||
| 27 | gpio3 = &pioD; | ||
| 28 | tcb0 = &tcb0; | ||
| 29 | tcb1 = &tcb1; | ||
| 30 | }; | ||
| 31 | cpus { | ||
| 32 | cpu@0 { | ||
| 33 | compatible = "arm,arm926ejs"; | ||
| 34 | }; | ||
| 35 | }; | ||
| 36 | |||
| 37 | memory { | ||
| 38 | reg = <0x20000000 0x10000000>; | ||
| 39 | }; | ||
| 40 | |||
| 41 | ahb { | ||
| 42 | compatible = "simple-bus"; | ||
| 43 | #address-cells = <1>; | ||
| 44 | #size-cells = <1>; | ||
| 45 | ranges; | ||
| 46 | |||
| 47 | apb { | ||
| 48 | compatible = "simple-bus"; | ||
| 49 | #address-cells = <1>; | ||
| 50 | #size-cells = <1>; | ||
| 51 | ranges; | ||
| 52 | |||
| 53 | aic: interrupt-controller@fffff000 { | ||
| 54 | #interrupt-cells = <2>; | ||
| 55 | compatible = "atmel,at91rm9200-aic"; | ||
| 56 | interrupt-controller; | ||
| 57 | reg = <0xfffff000 0x200>; | ||
| 58 | }; | ||
| 59 | |||
| 60 | ramc0: ramc@ffffe800 { | ||
| 61 | compatible = "atmel,at91sam9g45-ddramc"; | ||
| 62 | reg = <0xffffe800 0x200>; | ||
| 63 | }; | ||
| 64 | |||
| 65 | pmc: pmc@fffffc00 { | ||
| 66 | compatible = "atmel,at91rm9200-pmc"; | ||
| 67 | reg = <0xfffffc00 0x100>; | ||
| 68 | }; | ||
| 69 | |||
| 70 | rstc@fffffe00 { | ||
| 71 | compatible = "atmel,at91sam9g45-rstc"; | ||
| 72 | reg = <0xfffffe00 0x10>; | ||
| 73 | }; | ||
| 74 | |||
| 75 | shdwc@fffffe10 { | ||
| 76 | compatible = "atmel,at91sam9x5-shdwc"; | ||
| 77 | reg = <0xfffffe10 0x10>; | ||
| 78 | }; | ||
| 79 | |||
| 80 | pit: timer@fffffe30 { | ||
| 81 | compatible = "atmel,at91sam9260-pit"; | ||
| 82 | reg = <0xfffffe30 0xf>; | ||
| 83 | interrupts = <1 4>; | ||
| 84 | }; | ||
| 85 | |||
| 86 | tcb0: timer@f8008000 { | ||
| 87 | compatible = "atmel,at91sam9x5-tcb"; | ||
| 88 | reg = <0xf8008000 0x100>; | ||
| 89 | interrupts = <17 4>; | ||
| 90 | }; | ||
| 91 | |||
| 92 | tcb1: timer@f800c000 { | ||
| 93 | compatible = "atmel,at91sam9x5-tcb"; | ||
| 94 | reg = <0xf800c000 0x100>; | ||
| 95 | interrupts = <17 4>; | ||
| 96 | }; | ||
| 97 | |||
| 98 | dma0: dma-controller@ffffec00 { | ||
| 99 | compatible = "atmel,at91sam9g45-dma"; | ||
| 100 | reg = <0xffffec00 0x200>; | ||
| 101 | interrupts = <20 4>; | ||
| 102 | }; | ||
| 103 | |||
| 104 | dma1: dma-controller@ffffee00 { | ||
| 105 | compatible = "atmel,at91sam9g45-dma"; | ||
| 106 | reg = <0xffffee00 0x200>; | ||
| 107 | interrupts = <21 4>; | ||
| 108 | }; | ||
| 109 | |||
| 110 | pioA: gpio@fffff400 { | ||
| 111 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | ||
| 112 | reg = <0xfffff400 0x100>; | ||
| 113 | interrupts = <2 4>; | ||
| 114 | #gpio-cells = <2>; | ||
| 115 | gpio-controller; | ||
| 116 | interrupt-controller; | ||
| 117 | }; | ||
| 118 | |||
| 119 | pioB: gpio@fffff600 { | ||
| 120 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | ||
| 121 | reg = <0xfffff600 0x100>; | ||
| 122 | interrupts = <2 4>; | ||
| 123 | #gpio-cells = <2>; | ||
| 124 | gpio-controller; | ||
| 125 | interrupt-controller; | ||
| 126 | }; | ||
| 127 | |||
| 128 | pioC: gpio@fffff800 { | ||
| 129 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | ||
| 130 | reg = <0xfffff800 0x100>; | ||
| 131 | interrupts = <3 4>; | ||
| 132 | #gpio-cells = <2>; | ||
| 133 | gpio-controller; | ||
| 134 | interrupt-controller; | ||
| 135 | }; | ||
| 136 | |||
| 137 | pioD: gpio@fffffa00 { | ||
| 138 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | ||
| 139 | reg = <0xfffffa00 0x100>; | ||
| 140 | interrupts = <3 4>; | ||
| 141 | #gpio-cells = <2>; | ||
| 142 | gpio-controller; | ||
| 143 | interrupt-controller; | ||
| 144 | }; | ||
| 145 | |||
| 146 | dbgu: serial@fffff200 { | ||
| 147 | compatible = "atmel,at91sam9260-usart"; | ||
| 148 | reg = <0xfffff200 0x200>; | ||
| 149 | interrupts = <1 4>; | ||
| 150 | status = "disabled"; | ||
| 151 | }; | ||
| 152 | |||
| 153 | usart0: serial@f801c000 { | ||
| 154 | compatible = "atmel,at91sam9260-usart"; | ||
| 155 | reg = <0xf801c000 0x200>; | ||
| 156 | interrupts = <5 4>; | ||
| 157 | atmel,use-dma-rx; | ||
| 158 | atmel,use-dma-tx; | ||
| 159 | status = "disabled"; | ||
| 160 | }; | ||
| 161 | |||
| 162 | usart1: serial@f8020000 { | ||
| 163 | compatible = "atmel,at91sam9260-usart"; | ||
| 164 | reg = <0xf8020000 0x200>; | ||
| 165 | interrupts = <6 4>; | ||
| 166 | atmel,use-dma-rx; | ||
| 167 | atmel,use-dma-tx; | ||
| 168 | status = "disabled"; | ||
| 169 | }; | ||
| 170 | |||
| 171 | usart2: serial@f8024000 { | ||
| 172 | compatible = "atmel,at91sam9260-usart"; | ||
| 173 | reg = <0xf8024000 0x200>; | ||
| 174 | interrupts = <7 4>; | ||
| 175 | atmel,use-dma-rx; | ||
| 176 | atmel,use-dma-tx; | ||
| 177 | status = "disabled"; | ||
| 178 | }; | ||
| 179 | |||
| 180 | macb0: ethernet@f802c000 { | ||
| 181 | compatible = "cdns,at32ap7000-macb", "cdns,macb"; | ||
| 182 | reg = <0xf802c000 0x100>; | ||
| 183 | interrupts = <24 4>; | ||
| 184 | status = "disabled"; | ||
| 185 | }; | ||
| 186 | |||
| 187 | macb1: ethernet@f8030000 { | ||
| 188 | compatible = "cdns,at32ap7000-macb", "cdns,macb"; | ||
| 189 | reg = <0xf8030000 0x100>; | ||
| 190 | interrupts = <27 4>; | ||
| 191 | status = "disabled"; | ||
| 192 | }; | ||
| 193 | }; | ||
| 194 | |||
| 195 | nand0: nand@40000000 { | ||
| 196 | compatible = "atmel,at91rm9200-nand"; | ||
| 197 | #address-cells = <1>; | ||
| 198 | #size-cells = <1>; | ||
| 199 | reg = <0x40000000 0x10000000 | ||
| 200 | >; | ||
| 201 | atmel,nand-addr-offset = <21>; | ||
| 202 | atmel,nand-cmd-offset = <22>; | ||
| 203 | gpios = <&pioD 5 0 | ||
| 204 | &pioD 4 0 | ||
| 205 | 0 | ||
| 206 | >; | ||
| 207 | status = "disabled"; | ||
| 208 | }; | ||
| 209 | |||
| 210 | usb0: ohci@00600000 { | ||
| 211 | compatible = "atmel,at91rm9200-ohci", "usb-ohci"; | ||
| 212 | reg = <0x00600000 0x100000>; | ||
| 213 | interrupts = <22 4>; | ||
| 214 | status = "disabled"; | ||
| 215 | }; | ||
| 216 | |||
| 217 | usb1: ehci@00700000 { | ||
| 218 | compatible = "atmel,at91sam9g45-ehci", "usb-ehci"; | ||
| 219 | reg = <0x00700000 0x100000>; | ||
| 220 | interrupts = <22 4>; | ||
| 221 | status = "disabled"; | ||
| 222 | }; | ||
| 223 | }; | ||
| 224 | |||
| 225 | i2c@0 { | ||
| 226 | compatible = "i2c-gpio"; | ||
| 227 | gpios = <&pioA 30 0 /* sda */ | ||
| 228 | &pioA 31 0 /* scl */ | ||
| 229 | >; | ||
| 230 | i2c-gpio,sda-open-drain; | ||
| 231 | i2c-gpio,scl-open-drain; | ||
| 232 | i2c-gpio,delay-us = <2>; /* ~100 kHz */ | ||
| 233 | #address-cells = <1>; | ||
| 234 | #size-cells = <0>; | ||
| 235 | status = "disabled"; | ||
| 236 | }; | ||
| 237 | |||
| 238 | i2c@1 { | ||
| 239 | compatible = "i2c-gpio"; | ||
| 240 | gpios = <&pioC 0 0 /* sda */ | ||
| 241 | &pioC 1 0 /* scl */ | ||
| 242 | >; | ||
| 243 | i2c-gpio,sda-open-drain; | ||
| 244 | i2c-gpio,scl-open-drain; | ||
| 245 | i2c-gpio,delay-us = <2>; /* ~100 kHz */ | ||
| 246 | #address-cells = <1>; | ||
| 247 | #size-cells = <0>; | ||
| 248 | status = "disabled"; | ||
| 249 | }; | ||
| 250 | |||
| 251 | i2c@2 { | ||
| 252 | compatible = "i2c-gpio"; | ||
| 253 | gpios = <&pioB 4 0 /* sda */ | ||
| 254 | &pioB 5 0 /* scl */ | ||
| 255 | >; | ||
| 256 | i2c-gpio,sda-open-drain; | ||
| 257 | i2c-gpio,scl-open-drain; | ||
| 258 | i2c-gpio,delay-us = <2>; /* ~100 kHz */ | ||
| 259 | #address-cells = <1>; | ||
| 260 | #size-cells = <0>; | ||
| 261 | status = "disabled"; | ||
| 262 | }; | ||
| 263 | }; | ||
| @@ -0,0 +1,74 @@ | |||
| 1 | /* | ||
| 2 | * at91sam9x5cm.dtsi - Device Tree Include file for AT91SAM9x5 CPU Module | ||
| 3 | * | ||
| 4 | * Copyright (C) 2012 Atmel, | ||
| 5 | * 2012 Nicolas Ferre <nicolas.ferre@atmel.com> | ||
| 6 | * | ||
| 7 | * Licensed under GPLv2 or later. | ||
| 8 | */ | ||
| 9 | |||
| 10 | / { | ||
| 11 | memory { | ||
| 12 | reg = <0x20000000 0x8000000>; | ||
| 13 | }; | ||
| 14 | |||
| 15 | clocks { | ||
| 16 | #address-cells = <1>; | ||
| 17 | #size-cells = <1>; | ||
| 18 | ranges; | ||
| 19 | |||
| 20 | main_clock: clock@0 { | ||
| 21 | compatible = "atmel,osc", "fixed-clock"; | ||
| 22 | clock-frequency = <12000000>; | ||
| 23 | }; | ||
| 24 | }; | ||
| 25 | |||
| 26 | ahb { | ||
| 27 | nand0: nand@40000000 { | ||
| 28 | nand-bus-width = <8>; | ||
| 29 | nand-ecc-mode = "soft"; | ||
| 30 | nand-on-flash-bbt; | ||
| 31 | status = "okay"; | ||
| 32 | |||
| 33 | at91bootstrap@0 { | ||
| 34 | label = "at91bootstrap"; | ||
| 35 | reg = <0x0 0x40000>; | ||
| 36 | }; | ||
| 37 | |||
| 38 | uboot@40000 { | ||
| 39 | label = "u-boot"; | ||
| 40 | reg = <0x40000 0x80000>; | ||
| 41 | }; | ||
| 42 | |||
| 43 | ubootenv@c0000 { | ||
| 44 | label = "U-Boot Env"; | ||
| 45 | reg = <0xc0000 0x140000>; | ||
| 46 | }; | ||
| 47 | |||
| 48 | kernel@200000 { | ||
| 49 | label = "kernel"; | ||
| 50 | reg = <0x200000 0x600000>; | ||
| 51 | }; | ||
| 52 | |||
| 53 | rootfs@800000 { | ||
| 54 | label = "rootfs"; | ||
| 55 | reg = <0x800000 0x1f800000>; | ||
| 56 | }; | ||
| 57 | }; | ||
| 58 | }; | ||
| 59 | |||
| 60 | leds { | ||
| 61 | compatible = "gpio-leds"; | ||
| 62 | |||
| 63 | pb18 { | ||
| 64 | label = "pb18"; | ||
| 65 | gpios = <&pioB 18 1>; | ||
| 66 | linux,default-trigger = "heartbeat"; | ||
| 67 | }; | ||
| 68 | |||
| 69 | pd21 { | ||
| 70 | label = "pd21"; | ||
| 71 | gpios = <&pioD 21 0>; | ||
| 72 | }; | ||
| 73 | }; | ||
| 74 | }; | ||
| @@ -0,0 +1,274 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2012 Linaro Ltd | ||
| 3 | * | ||
| 4 | * The code contained herein is licensed under the GNU General Public | ||
| 5 | * License. You may obtain a copy of the GNU General Public License | ||
| 6 | * Version 2 or later at the following locations: | ||
| 7 | * | ||
| 8 | * http://www.opensource.org/licenses/gpl-license.html | ||
| 9 | * http://www.gnu.org/copyleft/gpl.html | ||
| 10 | */ | ||
| 11 | |||
| 12 | /include/ "skeleton.dtsi" | ||
| 13 | |||
| 14 | / { | ||
| 15 | soc-u9500 { | ||
| 16 | #address-cells = <1>; | ||
| 17 | #size-cells = <1>; | ||
| 18 | compatible = "stericsson,db8500"; | ||
| 19 | interrupt-parent = <&intc>; | ||
| 20 | ranges; | ||
| 21 | |||
| 22 | intc: interrupt-controller@a0411000 { | ||
| 23 | compatible = "arm,cortex-a9-gic"; | ||
| 24 | #interrupt-cells = <3>; | ||
| 25 | #address-cells = <1>; | ||
| 26 | interrupt-controller; | ||
| 27 | reg = <0xa0411000 0x1000>, | ||
| 28 | <0xa0410100 0x100>; | ||
| 29 | }; | ||
| 30 | |||
| 31 | L2: l2-cache { | ||
| 32 | compatible = "arm,pl310-cache"; | ||
| 33 | reg = <0xa0412000 0x1000>; | ||
| 34 | interrupts = <0 13 4>; | ||
| 35 | cache-unified; | ||
| 36 | cache-level = <2>; | ||
| 37 | }; | ||
| 38 | |||
| 39 | pmu { | ||
| 40 | compatible = "arm,cortex-a9-pmu"; | ||
| 41 | interrupts = <0 7 0x4>; | ||
| 42 | }; | ||
| 43 | |||
| 44 | timer@a0410600 { | ||
| 45 | compatible = "arm,cortex-a9-twd-timer"; | ||
| 46 | reg = <0xa0410600 0x20>; | ||
| 47 | interrupts = <1 13 0x304>; | ||
| 48 | }; | ||
| 49 | |||
| 50 | rtc@80154000 { | ||
| 51 | compatible = "stericsson,db8500-rtc"; | ||
| 52 | reg = <0x80154000 0x1000>; | ||
| 53 | interrupts = <0 18 0x4>; | ||
| 54 | }; | ||
| 55 | |||
| 56 | gpio0: gpio@8012e000 { | ||
| 57 | compatible = "stericsson,db8500-gpio", | ||
| 58 | "stmicroelectronics,nomadik-gpio"; | ||
| 59 | reg = <0x8012e000 0x80>; | ||
| 60 | interrupts = <0 119 0x4>; | ||
| 61 | supports-sleepmode; | ||
| 62 | gpio-controller; | ||
| 63 | }; | ||
| 64 | |||
| 65 | gpio1: gpio@8012e080 { | ||
| 66 | compatible = "stericsson,db8500-gpio", | ||
| 67 | "stmicroelectronics,nomadik-gpio"; | ||
| 68 | reg = <0x8012e080 0x80>; | ||
| 69 | interrupts = <0 120 0x4>; | ||
| 70 | supports-sleepmode; | ||
| 71 | gpio-controller; | ||
| 72 | }; | ||
| 73 | |||
| 74 | gpio2: gpio@8000e000 { | ||
| 75 | compatible = "stericsson,db8500-gpio", | ||
| 76 | "stmicroelectronics,nomadik-gpio"; | ||
| 77 | reg = <0x8000e000 0x80>; | ||
| 78 | interrupts = <0 121 0x4>; | ||
| 79 | supports-sleepmode; | ||
| 80 | gpio-controller; | ||
| 81 | }; | ||
| 82 | |||
| 83 | gpio3: gpio@8000e080 { | ||
| 84 | compatible = "stericsson,db8500-gpio", | ||
| 85 | "stmicroelectronics,nomadik-gpio"; | ||
| 86 | reg = <0x8000e080 0x80>; | ||
| 87 | interrupts = <0 122 0x4>; | ||
| 88 | supports-sleepmode; | ||
| 89 | gpio-controller; | ||
| 90 | }; | ||
| 91 | |||
| 92 | gpio4: gpio@8000e100 { | ||
| 93 | compatible = "stericsson,db8500-gpio", | ||
| 94 | "stmicroelectronics,nomadik-gpio"; | ||
| 95 | reg = <0x8000e100 0x80>; | ||
| 96 | interrupts = <0 123 0x4>; | ||
| 97 | supports-sleepmode; | ||
| 98 | gpio-controller; | ||
| 99 | }; | ||
| 100 | |||
| 101 | gpio5: gpio@8000e180 { | ||
| 102 | compatible = "stericsson,db8500-gpio", | ||
| 103 | "stmicroelectronics,nomadik-gpio"; | ||
| 104 | reg = <0x8000e180 0x80>; | ||
| 105 | interrupts = <0 124 0x4>; | ||
| 106 | supports-sleepmode; | ||
| 107 | gpio-controller; | ||
| 108 | }; | ||
| 109 | |||
| 110 | gpio6: gpio@8011e000 { | ||
| 111 | compatible = "stericsson,db8500-gpio", | ||
| 112 | "stmicroelectronics,nomadik-gpio"; | ||
| 113 | reg = <0x8011e000 0x80>; | ||
| 114 | interrupts = <0 125 0x4>; | ||
| 115 | supports-sleepmode; | ||
| 116 | gpio-controller; | ||
| 117 | }; | ||
| 118 | |||
| 119 | gpio7: gpio@8011e080 { | ||
| 120 | compatible = "stericsson,db8500-gpio", | ||
| 121 | "stmicroelectronics,nomadik-gpio"; | ||
| 122 | reg = <0x8011e080 0x80>; | ||
| 123 | interrupts = <0 126 0x4>; | ||
| 124 | supports-sleepmode; | ||
| 125 | gpio-controller; | ||
| 126 | }; | ||
| 127 | |||
| 128 | gpio8: gpio@a03fe000 { | ||
| 129 | compatible = "stericsson,db8500-gpio", | ||
| 130 | "stmicroelectronics,nomadik-gpio"; | ||
| 131 | reg = <0xa03fe000 0x80>; | ||
| 132 | interrupts = <0 127 0x4>; | ||
| 133 | supports-sleepmode; | ||
| 134 | gpio-controller; | ||
| 135 | }; | ||
| 136 | |||
| 137 | usb@a03e0000 { | ||
| 138 | compatible = "stericsson,db8500-musb", | ||
| 139 | "mentor,musb"; | ||
| 140 | reg = <0xa03e0000 0x10000>; | ||
| 141 | interrupts = <0 23 0x4>; | ||
| 142 | }; | ||
| 143 | |||
| 144 | dma-controller@801C0000 { | ||
| 145 | compatible = "stericsson,db8500-dma40", | ||
| 146 | "stericsson,dma40"; | ||
| 147 | reg = <0x801C0000 0x1000 0x40010000 0x800>; | ||
| 148 | interrupts = <0 25 0x4>; | ||
| 149 | }; | ||
| 150 | |||
| 151 | prcmu@80157000 { | ||
| 152 | compatible = "stericsson,db8500-prcmu"; | ||
| 153 | reg = <0x80157000 0x1000>; | ||
| 154 | interrupts = <46 47>; | ||
| 155 | #address-cells = <1>; | ||
| 156 | #size-cells = <0>; | ||
| 157 | |||
| 158 | ab8500@5 { | ||
| 159 | compatible = "stericsson,ab8500"; | ||
| 160 | reg = <5>; /* mailbox 5 is i2c */ | ||
| 161 | interrupts = <0 40 0x4>; | ||
| 162 | }; | ||
| 163 | }; | ||
| 164 | |||
| 165 | i2c@80004000 { | ||
| 166 | compatible = "stericsson,db8500-i2c", "stmicroelectronics,nomadik-i2c"; | ||
| 167 | reg = <0x80004000 0x1000>; | ||
| 168 | interrupts = <0 21 0x4>; | ||
| 169 | #address-cells = <1>; | ||
| 170 | #size-cells = <0>; | ||
| 171 | }; | ||
| 172 | |||
| 173 | i2c@80122000 { | ||
| 174 | compatible = "stericsson,db8500-i2c", "stmicroelectronics,nomadik-i2c"; | ||
| 175 | reg = <0x80122000 0x1000>; | ||
| 176 | interrupts = <0 22 0x4>; | ||
| 177 | #address-cells = <1>; | ||
| 178 | #size-cells = <0>; | ||
| 179 | }; | ||
| 180 | |||
| 181 | i2c@80128000 { | ||
| 182 | compatible = "stericsson,db8500-i2c", "stmicroelectronics,nomadik-i2c"; | ||
| 183 | reg = <0x80128000 0x1000>; | ||
| 184 | interrupts = <0 55 0x4>; | ||
| 185 | #address-cells = <1>; | ||
| 186 | #size-cells = <0>; | ||
| 187 | }; | ||
| 188 | |||
| 189 | i2c@80110000 { | ||
| 190 | compatible = "stericsson,db8500-i2c", "stmicroelectronics,nomadik-i2c"; | ||
| 191 | reg = <0x80110000 0x1000>; | ||
| 192 | interrupts = <0 12 0x4>; | ||
| 193 | #address-cells = <1>; | ||
| 194 | #size-cells = <0>; | ||
| 195 | }; | ||
| 196 | |||
| 197 | i2c@8012a000 { | ||
| 198 | compatible = "stericsson,db8500-i2c", "stmicroelectronics,nomadik-i2c"; | ||
| 199 | reg = <0x8012a000 0x1000>; | ||
| 200 | interrupts = <0 51 0x4>; | ||
| 201 | #address-cells = <1>; | ||
| 202 | #size-cells = <0>; | ||
| 203 | }; | ||
| 204 | |||
| 205 | ssp@80002000 { | ||
| 206 | compatible = "arm,pl022", "arm,primecell"; | ||
| 207 | reg = <80002000 0x1000>; | ||
| 208 | interrupts = <0 14 0x4>; | ||
| 209 | #address-cells = <1>; | ||
| 210 | #size-cells = <0>; | ||
| 211 | status = "disabled"; | ||
| 212 | |||
| 213 | // Add one of these for each child device | ||
| 214 | cs-gpios = <&gpio0 31 &gpio4 14 &gpio4 16 &gpio6 22 &gpio7 0>; | ||
| 215 | |||
| 216 | }; | ||
| 217 | |||
| 218 | uart@80120000 { | ||
| 219 | compatible = "arm,pl011", "arm,primecell"; | ||
| 220 | reg = <0x80120000 0x1000>; | ||
| 221 | interrupts = <0 11 0x4>; | ||
| 222 | status = "disabled"; | ||
| 223 | }; | ||
| 224 | uart@80121000 { | ||
| 225 | compatible = "arm,pl011", "arm,primecell"; | ||
| 226 | reg = <0x80121000 0x1000>; | ||
| 227 | interrupts = <0 19 0x4>; | ||
| 228 | status = "disabled"; | ||
| 229 | }; | ||
| 230 | uart@80007000 { | ||
| 231 | compatible = "arm,pl011", "arm,primecell"; | ||
| 232 | reg = <0x80007000 0x1000>; | ||
| 233 | interrupts = <0 26 0x4>; | ||
| 234 | status = "disabled"; | ||
| 235 | }; | ||
| 236 | |||
| 237 | sdi@80126000 { | ||
| 238 | compatible = "arm,pl18x", "arm,primecell"; | ||
| 239 | reg = <0x80126000 0x1000>; | ||
| 240 | interrupts = <0 60 0x4>; | ||
| 241 | status = "disabled"; | ||
| 242 | }; | ||
| 243 | sdi@80118000 { | ||
| 244 | compatible = "arm,pl18x", "arm,primecell"; | ||
| 245 | reg = <0x80118000 0x1000>; | ||
| 246 | interrupts = <0 50 0x4>; | ||
| 247 | status = "disabled"; | ||
| 248 | }; | ||
| 249 | sdi@80005000 { | ||
| 250 | compatible = "arm,pl18x", "arm,primecell"; | ||
| 251 | reg = <0x80005000 0x1000>; | ||
| 252 | interrupts = <0 41 0x4>; | ||
| 253 | status = "disabled"; | ||
| 254 | }; | ||
| 255 | sdi@80119000 { | ||
| 256 | compatible = "arm,pl18x", "arm,primecell"; | ||
| 257 | reg = <0x80119000 0x1000>; | ||
| 258 | interrupts = <0 59 0x4>; | ||
| 259 | status = "disabled"; | ||
| 260 | }; | ||
| 261 | sdi@80114000 { | ||
| 262 | compatible = "arm,pl18x", "arm,primecell"; | ||
| 263 | reg = <0x80114000 0x1000>; | ||
| 264 | interrupts = <0 99 0x4>; | ||
| 265 | status = "disabled"; | ||
| 266 | }; | ||
| 267 | sdi@80008000 { | ||
| 268 | compatible = "arm,pl18x", "arm,primecell"; | ||
| 269 | reg = <0x80114000 0x1000>; | ||
| 270 | interrupts = <0 100 0x4>; | ||
| 271 | status = "disabled"; | ||
| 272 | }; | ||
| 273 | }; | ||
| 274 | }; | ||
| @@ -0,0 +1,26 @@ | |||
| 1 | /* | ||
| 2 | * SAMSUNG SMDK5250 board device tree source | ||
| 3 | * | ||
| 4 | * Copyright (c) 2012 Samsung Electronics Co., Ltd. | ||
| 5 | * http://www.samsung.com | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License version 2 as | ||
| 9 | * published by the Free Software Foundation. | ||
| 10 | */ | ||
| 11 | |||
| 12 | /dts-v1/; | ||
| 13 | /include/ "exynos5250.dtsi" | ||
| 14 | |||
| 15 | / { | ||
| 16 | model = "SAMSUNG SMDK5250 board based on EXYNOS5250"; | ||
| 17 | compatible = "samsung,smdk5250", "samsung,exynos5250"; | ||
| 18 | |||
| 19 | memory { | ||
| 20 | reg = <0x40000000 0x80000000>; | ||
| 21 | }; | ||
| 22 | |||
| 23 | chosen { | ||
| 24 | bootargs = "root=/dev/ram0 rw ramdisk=8192 console=ttySAC1,115200"; | ||
| 25 | }; | ||
| 26 | }; | ||
| @@ -0,0 +1,413 @@ | |||
| 1 | /* | ||
| 2 | * SAMSUNG EXYNOS5250 SoC device tree source | ||
| 3 | * | ||
| 4 | * Copyright (c) 2012 Samsung Electronics Co., Ltd. | ||
| 5 | * http://www.samsung.com | ||
| 6 | * | ||
| 7 | * SAMSUNG EXYNOS5250 SoC device nodes are listed in this file. | ||
| 8 | * EXYNOS5250 based board files can include this file and provide | ||
| 9 | * values for board specfic bindings. | ||
| 10 | * | ||
| 11 | * Note: This file does not include device nodes for all the controllers in | ||
| 12 | * EXYNOS5250 SoC. As device tree coverage for EXYNOS5250 increases, | ||
| 13 | * additional nodes can be added to this file. | ||
| 14 | * | ||
| 15 | * This program is free software; you can redistribute it and/or modify | ||
| 16 | * it under the terms of the GNU General Public License version 2 as | ||
| 17 | * published by the Free Software Foundation. | ||
| 18 | */ | ||
| 19 | |||
| 20 | /include/ "skeleton.dtsi" | ||
| 21 | |||
| 22 | / { | ||
| 23 | compatible = "samsung,exynos5250"; | ||
| 24 | interrupt-parent = <&gic>; | ||
| 25 | |||
| 26 | gic:interrupt-controller@10490000 { | ||
| 27 | compatible = "arm,cortex-a9-gic"; | ||
| 28 | #interrupt-cells = <3>; | ||
| 29 | interrupt-controller; | ||
| 30 | reg = <0x10490000 0x1000>, <0x10480000 0x100>; | ||
| 31 | }; | ||
| 32 | |||
| 33 | watchdog { | ||
| 34 | compatible = "samsung,s3c2410-wdt"; | ||
| 35 | reg = <0x101D0000 0x100>; | ||
| 36 | interrupts = <0 42 0>; | ||
| 37 | }; | ||
| 38 | |||
| 39 | rtc { | ||
| 40 | compatible = "samsung,s3c6410-rtc"; | ||
| 41 | reg = <0x101E0000 0x100>; | ||
| 42 | interrupts = <0 43 0>, <0 44 0>; | ||
| 43 | }; | ||
| 44 | |||
| 45 | sdhci@12200000 { | ||
| 46 | compatible = "samsung,exynos4210-sdhci"; | ||
| 47 | reg = <0x12200000 0x100>; | ||
| 48 | interrupts = <0 75 0>; | ||
| 49 | }; | ||
| 50 | |||
| 51 | sdhci@12210000 { | ||
| 52 | compatible = "samsung,exynos4210-sdhci"; | ||
| 53 | reg = <0x12210000 0x100>; | ||
| 54 | interrupts = <0 76 0>; | ||
| 55 | }; | ||
| 56 | |||
| 57 | sdhci@12220000 { | ||
| 58 | compatible = "samsung,exynos4210-sdhci"; | ||
| 59 | reg = <0x12220000 0x100>; | ||
| 60 | interrupts = <0 77 0>; | ||
| 61 | }; | ||
| 62 | |||
| 63 | sdhci@12230000 { | ||
| 64 | compatible = "samsung,exynos4210-sdhci"; | ||
| 65 | reg = <0x12230000 0x100>; | ||
| 66 | interrupts = <0 78 0>; | ||
| 67 | }; | ||
| 68 | |||
| 69 | serial@12C00000 { | ||
| 70 | compatible = "samsung,exynos4210-uart"; | ||
| 71 | reg = <0x12C00000 0x100>; | ||
| 72 | interrupts = <0 51 0>; | ||
| 73 | }; | ||
| 74 | |||
| 75 | serial@12C10000 { | ||
| 76 | compatible = "samsung,exynos4210-uart"; | ||
| 77 | reg = <0x12C10000 0x100>; | ||
| 78 | interrupts = <0 52 0>; | ||
| 79 | }; | ||
| 80 | |||
| 81 | serial@12C20000 { | ||
| 82 | compatible = "samsung,exynos4210-uart"; | ||
| 83 | reg = <0x12C20000 0x100>; | ||
| 84 | interrupts = <0 53 0>; | ||
| 85 | }; | ||
| 86 | |||
| 87 | serial@12C30000 { | ||
| 88 | compatible = "samsung,exynos4210-uart"; | ||
| 89 | reg = <0x12C30000 0x100>; | ||
| 90 | interrupts = <0 54 0>; | ||
| 91 | }; | ||
| 92 | |||
| 93 | i2c@12C60000 { | ||
| 94 | compatible = "samsung,s3c2440-i2c"; | ||
| 95 | reg = <0x12C60000 0x100>; | ||
| 96 | interrupts = <0 56 0>; | ||
| 97 | }; | ||
| 98 | |||
| 99 | i2c@12C70000 { | ||
| 100 | compatible = "samsung,s3c2440-i2c"; | ||
| 101 | reg = <0x12C70000 0x100>; | ||
| 102 | interrupts = <0 57 0>; | ||
| 103 | }; | ||
| 104 | |||
| 105 | i2c@12C80000 { | ||
| 106 | compatible = "samsung,s3c2440-i2c"; | ||
| 107 | reg = <0x12C80000 0x100>; | ||
| 108 | interrupts = <0 58 0>; | ||
| 109 | }; | ||
| 110 | |||
| 111 | i2c@12C90000 { | ||
| 112 | compatible = "samsung,s3c2440-i2c"; | ||
| 113 | reg = <0x12C90000 0x100>; | ||
| 114 | interrupts = <0 59 0>; | ||
| 115 | }; | ||
| 116 | |||
| 117 | i2c@12CA0000 { | ||
| 118 | compatible = "samsung,s3c2440-i2c"; | ||
| 119 | reg = <0x12CA0000 0x100>; | ||
| 120 | interrupts = <0 60 0>; | ||
| 121 | }; | ||
| 122 | |||
| 123 | i2c@12CB0000 { | ||
| 124 | compatible = "samsung,s3c2440-i2c"; | ||
| 125 | reg = <0x12CB0000 0x100>; | ||
| 126 | interrupts = <0 61 0>; | ||
| 127 | }; | ||
| 128 | |||
| 129 | i2c@12CC0000 { | ||
| 130 | compatible = "samsung,s3c2440-i2c"; | ||
| 131 | reg = <0x12CC0000 0x100>; | ||
| 132 | interrupts = <0 62 0>; | ||
| 133 | }; | ||
| 134 | |||
| 135 | i2c@12CD0000 { | ||
| 136 | compatible = "samsung,s3c2440-i2c"; | ||
| 137 | reg = <0x12CD0000 0x100>; | ||
| 138 | interrupts = <0 63 0>; | ||
| 139 | }; | ||
| 140 | |||
| 141 | amba { | ||
| 142 | #address-cells = <1>; | ||
| 143 | #size-cells = <1>; | ||
| 144 | compatible = "arm,amba-bus"; | ||
| 145 | interrupt-parent = <&gic>; | ||
| 146 | ranges; | ||
| 147 | |||
| 148 | pdma0: pdma@121A0000 { | ||
| 149 | compatible = "arm,pl330", "arm,primecell"; | ||
| 150 | reg = <0x121A0000 0x1000>; | ||
| 151 | interrupts = <0 34 0>; | ||
| 152 | }; | ||
| 153 | |||
| 154 | pdma1: pdma@121B0000 { | ||
| 155 | compatible = "arm,pl330", "arm,primecell"; | ||
| 156 | reg = <0x121B0000 0x1000>; | ||
| 157 | interrupts = <0 35 0>; | ||
| 158 | }; | ||
| 159 | |||
| 160 | mdma0: pdma@10800000 { | ||
| 161 | compatible = "arm,pl330", "arm,primecell"; | ||
| 162 | reg = <0x10800000 0x1000>; | ||
| 163 | interrupts = <0 33 0>; | ||
| 164 | }; | ||
| 165 | |||
| 166 | mdma1: pdma@11C10000 { | ||
| 167 | compatible = "arm,pl330", "arm,primecell"; | ||
| 168 | reg = <0x11C10000 0x1000>; | ||
| 169 | interrupts = <0 124 0>; | ||
| 170 | }; | ||
| 171 | }; | ||
| 172 | |||
| 173 | gpio-controllers { | ||
| 174 | #address-cells = <1>; | ||
| 175 | #size-cells = <1>; | ||
| 176 | gpio-controller; | ||
| 177 | ranges; | ||
| 178 | |||
| 179 | gpa0: gpio-controller@11400000 { | ||
| 180 | compatible = "samsung,exynos4-gpio"; | ||
| 181 | reg = <0x11400000 0x20>; | ||
| 182 | #gpio-cells = <4>; | ||
| 183 | }; | ||
| 184 | |||
| 185 | gpa1: gpio-controller@11400020 { | ||
| 186 | compatible = "samsung,exynos4-gpio"; | ||
| 187 | reg = <0x11400020 0x20>; | ||
| 188 | #gpio-cells = <4>; | ||
| 189 | }; | ||
| 190 | |||
| 191 | gpa2: gpio-controller@11400040 { | ||
| 192 | compatible = "samsung,exynos4-gpio"; | ||
| 193 | reg = <0x11400040 0x20>; | ||
| 194 | #gpio-cells = <4>; | ||
| 195 | }; | ||
| 196 | |||
| 197 | gpb0: gpio-controller@11400060 { | ||
| 198 | compatible = "samsung,exynos4-gpio"; | ||
| 199 | reg = <0x11400060 0x20>; | ||
| 200 | #gpio-cells = <4>; | ||
| 201 | }; | ||
| 202 | |||
| 203 | gpb1: gpio-controller@11400080 { | ||
| 204 | compatible = "samsung,exynos4-gpio"; | ||
| 205 | reg = <0x11400080 0x20>; | ||
| 206 | #gpio-cells = <4>; | ||
| 207 | }; | ||
| 208 | |||
| 209 | gpb2: gpio-controller@114000A0 { | ||
| 210 | compatible = "samsung,exynos4-gpio"; | ||
| 211 | reg = <0x114000A0 0x20>; | ||
| 212 | #gpio-cells = <4>; | ||
| 213 | }; | ||
| 214 | |||
| 215 | gpb3: gpio-controller@114000C0 { | ||
| 216 | compatible = "samsung,exynos4-gpio"; | ||
| 217 | reg = <0x114000C0 0x20>; | ||
| 218 | #gpio-cells = <4>; | ||
| 219 | }; | ||
| 220 | |||
| 221 | gpc0: gpio-controller@114000E0 { | ||
| 222 | compatible = "samsung,exynos4-gpio"; | ||
| 223 | reg = <0x114000E0 0x20>; | ||
| 224 | #gpio-cells = <4>; | ||
| 225 | }; | ||
| 226 | |||
| 227 | gpc1: gpio-controller@11400100 { | ||
| 228 | compatible = "samsung,exynos4-gpio"; | ||
| 229 | reg = <0x11400100 0x20>; | ||
| 230 | #gpio-cells = <4>; | ||
| 231 | }; | ||
| 232 | |||
| 233 | gpc2: gpio-controller@11400120 { | ||
| 234 | compatible = "samsung,exynos4-gpio"; | ||
| 235 | reg = <0x11400120 0x20>; | ||
| 236 | #gpio-cells = <4>; | ||
| 237 | }; | ||
| 238 | |||
| 239 | gpc3: gpio-controller@11400140 { | ||
| 240 | compatible = "samsung,exynos4-gpio"; | ||
| 241 | reg = <0x11400140 0x20>; | ||
| 242 | #gpio-cells = <4>; | ||
| 243 | }; | ||
| 244 | |||
| 245 | gpd0: gpio-controller@11400160 { | ||
| 246 | compatible = "samsung,exynos4-gpio"; | ||
| 247 | reg = <0x11400160 0x20>; | ||
| 248 | #gpio-cells = <4>; | ||
| 249 | }; | ||
| 250 | |||
| 251 | gpd1: gpio-controller@11400180 { | ||
| 252 | compatible = "samsung,exynos4-gpio"; | ||
| 253 | reg = <0x11400180 0x20>; | ||
| 254 | #gpio-cells = <4>; | ||
| 255 | }; | ||
| 256 | |||
| 257 | gpy0: gpio-controller@114001A0 { | ||
| 258 | compatible = "samsung,exynos4-gpio"; | ||
| 259 | reg = <0x114001A0 0x20>; | ||
| 260 | #gpio-cells = <4>; | ||
| 261 | }; | ||
| 262 | |||
| 263 | gpy1: gpio-controller@114001C0 { | ||
| 264 | compatible = "samsung,exynos4-gpio"; | ||
| 265 | reg = <0x114001C0 0x20>; | ||
| 266 | #gpio-cells = <4>; | ||
| 267 | }; | ||
| 268 | |||
| 269 | gpy2: gpio-controller@114001E0 { | ||
| 270 | compatible = "samsung,exynos4-gpio"; | ||
| 271 | reg = <0x114001E0 0x20>; | ||
| 272 | #gpio-cells = <4>; | ||
| 273 | }; | ||
| 274 | |||
| 275 | gpy3: gpio-controller@11400200 { | ||
| 276 | compatible = "samsung,exynos4-gpio"; | ||
| 277 | reg = <0x11400200 0x20>; | ||
| 278 | #gpio-cells = <4>; | ||
| 279 | }; | ||
| 280 | |||
| 281 | gpy4: gpio-controller@11400220 { | ||
| 282 | compatible = "samsung,exynos4-gpio"; | ||
| 283 | reg = <0x11400220 0x20>; | ||
| 284 | #gpio-cells = <4>; | ||
| 285 | }; | ||
| 286 | |||
| 287 | gpy5: gpio-controller@11400240 { | ||
| 288 | compatible = "samsung,exynos4-gpio"; | ||
| 289 | reg = <0x11400240 0x20>; | ||
| 290 | #gpio-cells = <4>; | ||
| 291 | }; | ||
| 292 | |||
| 293 | gpy6: gpio-controller@11400260 { | ||
| 294 | compatible = "samsung,exynos4-gpio"; | ||
| 295 | reg = <0x11400260 0x20>; | ||
| 296 | #gpio-cells = <4>; | ||
| 297 | }; | ||
| 298 | |||
| 299 | gpx0: gpio-controller@11400C00 { | ||
| 300 | compatible = "samsung,exynos4-gpio"; | ||
| 301 | reg = <0x11400C00 0x20>; | ||
| 302 | #gpio-cells = <4>; | ||
| 303 | }; | ||
| 304 | |||
| 305 | gpx1: gpio-controller@11400C20 { | ||
| 306 | compatible = "samsung,exynos4-gpio"; | ||
| 307 | reg = <0x11400C20 0x20>; | ||
| 308 | #gpio-cells = <4>; | ||
| 309 | }; | ||
| 310 | |||
| 311 | gpx2: gpio-controller@11400C40 { | ||
| 312 | compatible = "samsung,exynos4-gpio"; | ||
| 313 | reg = <0x11400C40 0x20>; | ||
| 314 | #gpio-cells = <4>; | ||
| 315 | }; | ||
| 316 | |||
| 317 | gpx3: gpio-controller@11400C60 { | ||
| 318 | compatible = "samsung,exynos4-gpio"; | ||
| 319 | reg = <0x11400C60 0x20>; | ||
| 320 | #gpio-cells = <4>; | ||
| 321 | }; | ||
| 322 | |||
| 323 | gpe0: gpio-controller@13400000 { | ||
| 324 | compatible = "samsung,exynos4-gpio"; | ||
| 325 | reg = <0x13400000 0x20>; | ||
| 326 | #gpio-cells = <4>; | ||
| 327 | }; | ||
| 328 | |||
| 329 | gpe1: gpio-controller@13400020 { | ||
| 330 | compatible = "samsung,exynos4-gpio"; | ||
| 331 | reg = <0x13400020 0x20>; | ||
| 332 | #gpio-cells = <4>; | ||
| 333 | }; | ||
| 334 | |||
| 335 | gpf0: gpio-controller@13400040 { | ||
| 336 | compatible = "samsung,exynos4-gpio"; | ||
| 337 | reg = <0x13400040 0x20>; | ||
| 338 | #gpio-cells = <4>; | ||
| 339 | }; | ||
| 340 | |||
| 341 | gpf1: gpio-controller@13400060 { | ||
| 342 | compatible = "samsung,exynos4-gpio"; | ||
| 343 | reg = <0x13400060 0x20>; | ||
| 344 | #gpio-cells = <4>; | ||
| 345 | }; | ||
| 346 | |||
| 347 | gpg0: gpio-controller@13400080 { | ||
| 348 | compatible = "samsung,exynos4-gpio"; | ||
| 349 | reg = <0x13400080 0x20>; | ||
| 350 | #gpio-cells = <4>; | ||
| 351 | }; | ||
| 352 | |||
| 353 | gpg1: gpio-controller@134000A0 { | ||
| 354 | compatible = "samsung,exynos4-gpio"; | ||
| 355 | reg = <0x134000A0 0x20>; | ||
| 356 | #gpio-cells = <4>; | ||
| 357 | }; | ||
| 358 | |||
| 359 | gpg2: gpio-controller@134000C0 { | ||
| 360 | compatible = "samsung,exynos4-gpio"; | ||
| 361 | reg = <0x134000C0 0x20>; | ||
| 362 | #gpio-cells = <4>; | ||
| 363 | }; | ||
| 364 | |||
| 365 | gph0: gpio-controller@134000E0 { | ||
| 366 | compatible = "samsung,exynos4-gpio"; | ||
| 367 | reg = <0x134000E0 0x20>; | ||
| 368 | #gpio-cells = <4>; | ||
| 369 | }; | ||
| 370 | |||
| 371 | gph1: gpio-controller@13400100 { | ||
| 372 | compatible = "samsung,exynos4-gpio"; | ||
| 373 | reg = <0x13400100 0x20>; | ||
| 374 | #gpio-cells = <4>; | ||
| 375 | }; | ||
| 376 | |||
| 377 | gpv0: gpio-controller@10D10000 { | ||
| 378 | compatible = "samsung,exynos4-gpio"; | ||
| 379 | reg = <0x10D10000 0x20>; | ||
| 380 | #gpio-cells = <4>; | ||
| 381 | }; | ||
| 382 | |||
| 383 | gpv1: gpio-controller@10D10020 { | ||
| 384 | compatible = "samsung,exynos4-gpio"; | ||
| 385 | reg = <0x10D10020 0x20>; | ||
| 386 | #gpio-cells = <4>; | ||
| 387 | }; | ||
| 388 | |||
| 389 | gpv2: gpio-controller@10D10040 { | ||
| 390 | compatible = "samsung,exynos4-gpio"; | ||
| 391 | reg = <0x10D10040 0x20>; | ||
| 392 | #gpio-cells = <4>; | ||
| 393 | }; | ||
| 394 | |||
| 395 | gpv3: gpio-controller@10D10060 { | ||
| 396 | compatible = "samsung,exynos4-gpio"; | ||
| 397 | reg = <0x10D10060 0x20>; | ||
| 398 | #gpio-cells = <4>; | ||
| 399 | }; | ||
| 400 | |||
| 401 | gpv4: gpio-controller@10D10080 { | ||
| 402 | compatible = "samsung,exynos4-gpio"; | ||
| 403 | reg = <0x10D10080 0x20>; | ||
| 404 | #gpio-cells = <4>; | ||
| 405 | }; | ||
| 406 | |||
| 407 | gpz: gpio-controller@03860000 { | ||
| 408 | compatible = "samsung,exynos4-gpio"; | ||
| 409 | reg = <0x03860000 0x20>; | ||
| 410 | #gpio-cells = <4>; | ||
| 411 | }; | ||
| 412 | }; | ||
| 413 | }; | ||
| @@ -72,15 +72,15 @@ · 71 unmodified lines | |||
| 72 | ranges; | 72 | ranges; |
| 73 | 73 | ||
| 74 | timer@fff10600 { | 74 | timer@fff10600 { |
| 75 | compatible = "arm,smp-twd"; | 75 | compatible = "arm,cortex-a9-twd-timer"; |
| 76 | reg = <0xfff10600 0x20>; | 76 | reg = <0xfff10600 0x20>; |
| 77 | interrupts = <1 13 0xf04>; | 77 | interrupts = <1 13 0xf01>; |
| 78 | }; | 78 | }; |
| 79 | 79 | ||
| 80 | watchdog@fff10620 { | 80 | watchdog@fff10620 { |
| 81 | compatible = "arm,cortex-a9-wdt"; | 81 | compatible = "arm,cortex-a9-twd-wdt"; |
| 82 | reg = <0xfff10620 0x20>; | 82 | reg = <0xfff10620 0x20>; |
| 83 | interrupts = <1 14 0xf04>; | 83 | interrupts = <1 14 0xf01>; |
| 84 | }; | 84 | }; |
| 85 | 85 | ||
| 86 | intc: interrupt-controller@fff11000 { | 86 | intc: interrupt-controller@fff11000 { |
| @@ -89,7 +89,6 @@ · 2 unmodified lines | |||
| 89 | #size-cells = <0>; | 89 | #size-cells = <0>; |
| 90 | #address-cells = <1>; | 90 | #address-cells = <1>; |
| 91 | interrupt-controller; | 91 | interrupt-controller; |
| 92 | interrupt-parent; | ||
| 93 | reg = <0xfff11000 0x1000>, | 92 | reg = <0xfff11000 0x1000>, |
| 94 | <0xfff10100 0x100>; | 93 | <0xfff10100 0x100>; |
| 95 | }; | 94 | }; |
| @@ -0,0 +1,76 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2012 Sascha Hauer, Pengutronix | ||
| 3 | * | ||
| 4 | * The code contained herein is licensed under the GNU General Public | ||
| 5 | * License. You may obtain a copy of the GNU General Public License | ||
| 6 | * Version 2 or later at the following locations: | ||
| 7 | * | ||
| 8 | * http://www.opensource.org/licenses/gpl-license.html | ||
| 9 | * http://www.gnu.org/copyleft/gpl.html | ||
| 10 | */ | ||
| 11 | |||
| 12 | /dts-v1/; | ||
| 13 | /include/ "imx27.dtsi" | ||
| 14 | |||
| 15 | / { | ||
| 16 | model = "Phytec pcm038"; | ||
| 17 | compatible = "phytec,imx27-pcm038", "fsl,imx27"; | ||
| 18 | |||
| 19 | memory { | ||
| 20 | reg = <0x0 0x0>; | ||
| 21 | }; | ||
| 22 | |||
| 23 | soc { | ||
| 24 | aipi@10000000 { /* aipi */ | ||
| 25 | |||
| 26 | wdog@10002000 { | ||
| 27 | status = "okay"; | ||
| 28 | }; | ||
| 29 | |||
| 30 | uart@1000a000 { | ||
| 31 | fsl,uart-has-rtscts; | ||
| 32 | status = "okay"; | ||
| 33 | }; | ||
| 34 | |||
| 35 | uart@1000b000 { | ||
| 36 | fsl,uart-has-rtscts; | ||
| 37 | status = "okay"; | ||
| 38 | }; | ||
| 39 | |||
| 40 | uart@1000c000 { | ||
| 41 | fsl,uart-has-rtscts; | ||
| 42 | status = "okay"; | ||
| 43 | }; | ||
| 44 | |||
| 45 | fec@1002b000 { | ||
| 46 | status = "okay"; | ||
| 47 | }; | ||
| 48 | |||
| 49 | i2c@1001d000 { | ||
| 50 | clock-frequency = <400000>; | ||
| 51 | status = "okay"; | ||
| 52 | at24@4c { | ||
| 53 | compatible = "at,24c32"; | ||
| 54 | pagesize = <32>; | ||
| 55 | reg = <0x52>; | ||
| 56 | }; | ||
| 57 | pcf8563@51 { | ||
| 58 | compatible = "nxp,pcf8563"; | ||
| 59 | reg = <0x51>; | ||
| 60 | }; | ||
| 61 | lm75@4a { | ||
| 62 | compatible = "national,lm75"; | ||
| 63 | reg = <0x4a>; | ||
| 64 | }; | ||
| 65 | }; | ||
| 66 | }; | ||
| 67 | }; | ||
| 68 | |||
| 69 | nor_flash@c0000000 { | ||
| 70 | compatible = "cfi-flash"; | ||
| 71 | bank-width = <2>; | ||
| 72 | reg = <0xc0000000 0x02000000>; | ||
| 73 | #address-cells = <1>; | ||
| 74 | #size-cells = <1>; | ||
| 75 | }; | ||
| 76 | }; | ||
| @@ -0,0 +1,217 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2012 Sascha Hauer, Pengutronix | ||
| 3 | * | ||
| 4 | * The code contained herein is licensed under the GNU General Public | ||
| 5 | * License. You may obtain a copy of the GNU General Public License | ||
| 6 | * Version 2 or later at the following locations: | ||
| 7 | * | ||
| 8 | * http://www.opensource.org/licenses/gpl-license.html | ||
| 9 | * http://www.gnu.org/copyleft/gpl.html | ||
| 10 | */ | ||
| 11 | |||
| 12 | /include/ "skeleton.dtsi" | ||
| 13 | |||
| 14 | / { | ||
| 15 | aliases { | ||
| 16 | serial0 = &uart1; | ||
| 17 | serial1 = &uart2; | ||
| 18 | serial2 = &uart3; | ||
| 19 | serial3 = &uart4; | ||
| 20 | serial4 = &uart5; | ||
| 21 | serial5 = &uart6; | ||
| 22 | }; | ||
| 23 | |||
| 24 | avic: avic-interrupt-controller@e0000000 { | ||
| 25 | compatible = "fsl,imx27-avic", "fsl,avic"; | ||
| 26 | interrupt-controller; | ||
| 27 | #interrupt-cells = <1>; | ||
| 28 | reg = <0x10040000 0x1000>; | ||
| 29 | }; | ||
| 30 | |||
| 31 | clocks { | ||
| 32 | #address-cells = <1>; | ||
| 33 | #size-cells = <0>; | ||
| 34 | |||
| 35 | osc26m { | ||
| 36 | compatible = "fsl,imx-osc26m", "fixed-clock"; | ||
| 37 | clock-frequency = <26000000>; | ||
| 38 | }; | ||
| 39 | }; | ||
| 40 | |||
| 41 | soc { | ||
| 42 | #address-cells = <1>; | ||
| 43 | #size-cells = <1>; | ||
| 44 | compatible = "simple-bus"; | ||
| 45 | interrupt-parent = <&avic>; | ||
| 46 | ranges; | ||
| 47 | |||
| 48 | aipi@10000000 { /* AIPI1 */ | ||
| 49 | compatible = "fsl,aipi-bus", "simple-bus"; | ||
| 50 | #address-cells = <1>; | ||
| 51 | #size-cells = <1>; | ||
| 52 | reg = <0x10000000 0x10000000>; | ||
| 53 | ranges; | ||
| 54 | |||
| 55 | wdog@10002000 { | ||
| 56 | compatible = "fsl,imx27-wdt", "fsl,imx21-wdt"; | ||
| 57 | reg = <0x10002000 0x4000>; | ||
| 58 | interrupts = <27>; | ||
| 59 | status = "disabled"; | ||
| 60 | }; | ||
| 61 | |||
| 62 | uart1: uart@1000a000 { | ||
| 63 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; | ||
| 64 | reg = <0x1000a000 0x1000>; | ||
| 65 | interrupts = <20>; | ||
| 66 | status = "disabled"; | ||
| 67 | }; | ||
| 68 | |||
| 69 | uart2: uart@1000b000 { | ||
| 70 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; | ||
| 71 | reg = <0x1000b000 0x1000>; | ||
| 72 | interrupts = <19>; | ||
| 73 | status = "disabled"; | ||
| 74 | }; | ||
| 75 | |||
| 76 | uart3: uart@1000c000 { | ||
| 77 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; | ||
| 78 | reg = <0x1000c000 0x1000>; | ||
| 79 | interrupts = <18>; | ||
| 80 | status = "disabled"; | ||
| 81 | }; | ||
| 82 | |||
| 83 | uart4: uart@1000d000 { | ||
| 84 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; | ||
| 85 | reg = <0x1000d000 0x1000>; | ||
| 86 | interrupts = <17>; | ||
| 87 | status = "disabled"; | ||
| 88 | }; | ||
| 89 | |||
| 90 | cspi1: cspi@1000e000 { | ||
| 91 | #address-cells = <1>; | ||
| 92 | #size-cells = <0>; | ||
| 93 | compatible = "fsl,imx27-cspi"; | ||
| 94 | reg = <0x1000e000 0x1000>; | ||
| 95 | interrupts = <16>; | ||
| 96 | status = "disabled"; | ||
| 97 | }; | ||
| 98 | |||
| 99 | cspi2: cspi@1000f000 { | ||
| 100 | #address-cells = <1>; | ||
| 101 | #size-cells = <0>; | ||
| 102 | compatible = "fsl,imx27-cspi"; | ||
| 103 | reg = <0x1000f000 0x1000>; | ||
| 104 | interrupts = <15>; | ||
| 105 | status = "disabled"; | ||
| 106 | }; | ||
| 107 | |||
| 108 | i2c1: i2c@10012000 { | ||
| 109 | #address-cells = <1>; | ||
| 110 | #size-cells = <0>; | ||
| 111 | compatible = "fsl,imx27-i2c", "fsl,imx1-i2c"; | ||
| 112 | reg = <0x10012000 0x1000>; | ||
| 113 | interrupts = <12>; | ||
| 114 | status = "disabled"; | ||
| 115 | }; | ||
| 116 | |||
| 117 | gpio1: gpio@10015000 { | ||
| 118 | compatible = "fsl,imx27-gpio", "fsl,imx21-gpio"; | ||
| 119 | reg = <0x10015000 0x100>; | ||
| 120 | interrupts = <8>; | ||
| 121 | gpio-controller; | ||
| 122 | #gpio-cells = <2>; | ||
| 123 | interrupt-controller; | ||
| 124 | #interrupt-cells = <1>; | ||
| 125 | }; | ||
| 126 | |||
| 127 | gpio2: gpio@10015100 { | ||
| 128 | compatible = "fsl,imx27-gpio", "fsl,imx21-gpio"; | ||
| 129 | reg = <0x10015100 0x100>; | ||
| 130 | interrupts = <8>; | ||
| 131 | gpio-controller; | ||
| 132 | #gpio-cells = <2>; | ||
| 133 | interrupt-controller; | ||
| 134 | #interrupt-cells = <1>; | ||
| 135 | }; | ||
| 136 | |||
| 137 | gpio3: gpio@10015200 { | ||
| 138 | compatible = "fsl,imx27-gpio", "fsl,imx21-gpio"; | ||
| 139 | reg = <0x10015200 0x100>; | ||
| 140 | interrupts = <8>; | ||
| 141 | gpio-controller; | ||
| 142 | #gpio-cells = <2>; | ||
| 143 | interrupt-controller; | ||
| 144 | #interrupt-cells = <1>; | ||
| 145 | }; | ||
| 146 | |||
| 147 | gpio4: gpio@10015300 { | ||
| 148 | compatible = "fsl,imx27-gpio", "fsl,imx21-gpio"; | ||
| 149 | reg = <0x10015300 0x100>; | ||
| 150 | interrupts = <8>; | ||
| 151 | gpio-controller; | ||
| 152 | #gpio-cells = <2>; | ||
| 153 | interrupt-controller; | ||
| 154 | #interrupt-cells = <1>; | ||
| 155 | }; | ||
| 156 | |||
| 157 | gpio5: gpio@10015400 { | ||
| 158 | compatible = "fsl,imx27-gpio", "fsl,imx21-gpio"; | ||
| 159 | reg = <0x10015400 0x100>; | ||
| 160 | interrupts = <8>; | ||
| 161 | gpio-controller; | ||
| 162 | #gpio-cells = <2>; | ||
| 163 | interrupt-controller; | ||
| 164 | #interrupt-cells = <1>; | ||
| 165 | }; | ||
| 166 | |||
| 167 | gpio6: gpio@10015500 { | ||
| 168 | compatible = "fsl,imx27-gpio", "fsl,imx21-gpio"; | ||
| 169 | reg = <0x10015500 0x100>; | ||
| 170 | interrupts = <8>; | ||
| 171 | gpio-controller; | ||
| 172 | #gpio-cells = <2>; | ||
| 173 | interrupt-controller; | ||
| 174 | #interrupt-cells = <1>; | ||
| 175 | }; | ||
| 176 | |||
| 177 | cspi3: cspi@10017000 { | ||
| 178 | #address-cells = <1>; | ||
| 179 | #size-cells = <0>; | ||
| 180 | compatible = "fsl,imx27-cspi"; | ||
| 181 | reg = <0x10017000 0x1000>; | ||
| 182 | interrupts = <6>; | ||
| 183 | status = "disabled"; | ||
| 184 | }; | ||
| 185 | |||
| 186 | uart5: uart@1001b000 { | ||
| 187 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; | ||
| 188 | reg = <0x1001b000 0x1000>; | ||
| 189 | interrupts = <49>; | ||
| 190 | status = "disabled"; | ||
| 191 | }; | ||
| 192 | |||
| 193 | uart6: uart@1001c000 { | ||
| 194 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; | ||
| 195 | reg = <0x1001c000 0x1000>; | ||
| 196 | interrupts = <48>; | ||
| 197 | status = "disabled"; | ||
| 198 | }; | ||
| 199 | |||
| 200 | i2c2: i2c@1001d000 { | ||
| 201 | #address-cells = <1>; | ||
| 202 | #size-cells = <0>; | ||
| 203 | compatible = "fsl,imx27-i2c", "fsl,imx1-i2c"; | ||
| 204 | reg = <0x1001d000 0x1000>; | ||
| 205 | interrupts = <1>; | ||
| 206 | status = "disabled"; | ||
| 207 | }; | ||
| 208 | |||
| 209 | fec: fec@1002b000 { | ||
| 210 | compatible = "fsl,imx27-fec"; | ||
| 211 | reg = <0x1002b000 0x4000>; | ||
| 212 | interrupts = <50>; | ||
| 213 | status = "disabled"; | ||
| 214 | }; | ||
| 215 | }; | ||
| 216 | }; | ||
| 217 | }; | ||
| @@ -56,8 +56,95 @@ · 55 unmodified lines | |||
| 56 | compatible = "fsl,mc13892"; | 56 | compatible = "fsl,mc13892"; |
| 57 | spi-max-frequency = <6000000>; | 57 | spi-max-frequency = <6000000>; |
| 58 | reg = <0>; | 58 | reg = <0>; |
| 59 | mc13xxx-irq-gpios = <&gpio1 8 0>; | 59 | interrupt-parent = <&gpio1>; |
| 60 | fsl,mc13xxx-uses-regulator; | 60 | interrupts = <8>; |
| 61 | |||
| 62 | regulators { | ||
| 63 | sw1_reg: sw1 { | ||
| 64 | regulator-min-microvolt = <600000>; | ||
| 65 | regulator-max-microvolt = <1375000>; | ||
| 66 | regulator-boot-on; | ||
| 67 | regulator-always-on; | ||
| 68 | }; | ||
| 69 | |||
| 70 | sw2_reg: sw2 { | ||
| 71 | regulator-min-microvolt = <900000>; | ||
| 72 | regulator-max-microvolt = <1850000>; | ||
| 73 | regulator-boot-on; | ||
| 74 | regulator-always-on; | ||
| 75 | }; | ||
| 76 | |||
| 77 | sw3_reg: sw3 { | ||
| 78 | regulator-min-microvolt = <1100000>; | ||
| 79 | regulator-max-microvolt = <1850000>; | ||
| 80 | regulator-boot-on; | ||
| 81 | regulator-always-on; | ||
| 82 | }; | ||
| 83 | |||
| 84 | sw4_reg: sw4 { | ||
| 85 | regulator-min-microvolt = <1100000>; | ||
| 86 | regulator-max-microvolt = <1850000>; | ||
| 87 | regulator-boot-on; | ||
| 88 | regulator-always-on; | ||
| 89 | }; | ||
| 90 | |||
| 91 | vpll_reg: vpll { | ||
| 92 | regulator-min-microvolt = <1050000>; | ||
| 93 | regulator-max-microvolt = <1800000>; | ||
| 94 | regulator-boot-on; | ||
| 95 | regulator-always-on; | ||
| 96 | }; | ||
| 97 | |||
| 98 | vdig_reg: vdig { | ||
| 99 | regulator-min-microvolt = <1650000>; | ||
| 100 | regulator-max-microvolt = <1650000>; | ||
| 101 | regulator-boot-on; | ||
| 102 | }; | ||
| 103 | |||
| 104 | vsd_reg: vsd { | ||
| 105 | regulator-min-microvolt = <1800000>; | ||
| 106 | regulator-max-microvolt = <3150000>; | ||
| 107 | }; | ||
| 108 | |||
| 109 | vusb2_reg: vusb2 { | ||
| 110 | regulator-min-microvolt = <2400000>; | ||
| 111 | regulator-max-microvolt = <2775000>; | ||
| 112 | regulator-boot-on; | ||
| 113 | regulator-always-on; | ||
| 114 | }; | ||
| 115 | |||
| 116 | vvideo_reg: vvideo { | ||
| 117 | regulator-min-microvolt = <2775000>; | ||
| 118 | regulator-max-microvolt = <2775000>; | ||
| 119 | }; | ||
| 120 | |||
| 121 | vaudio_reg: vaudio { | ||
| 122 | regulator-min-microvolt = <2300000>; | ||
| 123 | regulator-max-microvolt = <3000000>; | ||
| 124 | }; | ||
| 125 | |||
| 126 | vcam_reg: vcam { | ||
| 127 | regulator-min-microvolt = <2500000>; | ||
| 128 | regulator-max-microvolt = <3000000>; | ||
| 129 | }; | ||
| 130 | |||
| 131 | vgen1_reg: vgen1 { | ||
| 132 | regulator-min-microvolt = <1200000>; | ||
| 133 | regulator-max-microvolt = <1200000>; | ||
| 134 | }; | ||
| 135 | |||
| 136 | vgen2_reg: vgen2 { | ||
| 137 | regulator-min-microvolt = <1200000>; | ||
| 138 | regulator-max-microvolt = <3150000>; | ||
| 139 | regulator-always-on; | ||
| 140 | }; | ||
| 141 | |||
| 142 | vgen3_reg: vgen3 { | ||
| 143 | regulator-min-microvolt = <1800000>; | ||
| 144 | regulator-max-microvolt = <2900000>; | ||
| 145 | regulator-always-on; | ||
| 146 | }; | ||
| 147 | }; | ||
| 61 | }; | 148 | }; |
| 62 | 149 | ||
| 63 | flash: at45db321d@1 { | 150 | flash: at45db321d@1 { |
| @@ -36,11 +36,13 @@ · 35 unmodified lines | |||
| 36 | usdhc@02198000 { /* uSDHC3 */ | 36 | usdhc@02198000 { /* uSDHC3 */ |
| 37 | cd-gpios = <&gpio6 11 0>; | 37 | cd-gpios = <&gpio6 11 0>; |
| 38 | wp-gpios = <&gpio6 14 0>; | 38 | wp-gpios = <&gpio6 14 0>; |
| 39 | vmmc-supply = <®_3p3v>; | ||
| 39 | status = "okay"; | 40 | status = "okay"; |
| 40 | }; | 41 | }; |
| 41 | 42 | ||
| 42 | usdhc@0219c000 { /* uSDHC4 */ | 43 | usdhc@0219c000 { /* uSDHC4 */ |
| 43 | fsl,card-wired; | 44 | fsl,card-wired; |
| 45 | vmmc-supply = <®_3p3v>; | ||
| 44 | status = "okay"; | 46 | status = "okay"; |
| 45 | }; | 47 | }; |
| 46 | 48 | ||
| @@ -50,6 +52,18 @@ · 3 unmodified lines | |||
| 50 | }; | 52 | }; |
| 51 | }; | 53 | }; |
| 52 | 54 | ||
| 55 | regulators { | ||
| 56 | compatible = "simple-bus"; | ||
| 57 | |||
| 58 | reg_3p3v: 3p3v { | ||
| 59 | compatible = "regulator-fixed"; | ||
| 60 | regulator-name = "3P3V"; | ||
| 61 | regulator-min-microvolt = <3300000>; | ||
| 62 | regulator-max-microvolt = <3300000>; | ||
| 63 | regulator-always-on; | ||
| 64 | }; | ||
| 65 | }; | ||
| 66 | |||
| 53 | leds { | 67 | leds { |
| 54 | compatible = "gpio-leds"; | 68 | compatible = "gpio-leds"; |
| 55 | 69 | ||
| @@ -32,18 +32,52 @@ · 31 unmodified lines | |||
| 32 | usdhc@02198000 { /* uSDHC3 */ | 32 | usdhc@02198000 { /* uSDHC3 */ |
| 33 | cd-gpios = <&gpio7 0 0>; | 33 | cd-gpios = <&gpio7 0 0>; |
| 34 | wp-gpios = <&gpio7 1 0>; | 34 | wp-gpios = <&gpio7 1 0>; |
| 35 | vmmc-supply = <®_3p3v>; | ||
| 35 | status = "okay"; | 36 | status = "okay"; |
| 36 | }; | 37 | }; |
| 37 | 38 | ||
| 38 | usdhc@0219c000 { /* uSDHC4 */ | 39 | usdhc@0219c000 { /* uSDHC4 */ |
| 39 | cd-gpios = <&gpio2 6 0>; | 40 | cd-gpios = <&gpio2 6 0>; |
| 40 | wp-gpios = <&gpio2 7 0>; | 41 | wp-gpios = <&gpio2 7 0>; |
| 42 | vmmc-supply = <®_3p3v>; | ||
| 41 | status = "okay"; | 43 | status = "okay"; |
| 42 | }; | 44 | }; |
| 43 | 45 | ||
| 44 | uart2: uart@021e8000 { | 46 | uart2: uart@021e8000 { |
| 45 | status = "okay"; | 47 | status = "okay"; |
| 46 | }; | 48 | }; |
| 49 | |||
| 50 | i2c@021a0000 { /* I2C1 */ | ||
| 51 | status = "okay"; | ||
| 52 | clock-frequency = <100000>; | ||
| 53 | |||
| 54 | codec: sgtl5000@0a { | ||
| 55 | compatible = "fsl,sgtl5000"; | ||
| 56 | reg = <0x0a>; | ||
| 57 | VDDA-supply = <®_2p5v>; | ||
| 58 | VDDIO-supply = <®_3p3v>; | ||
| 59 | }; | ||
| 60 | }; | ||
| 61 | }; | ||
| 62 | }; | ||
| 63 | |||
| 64 | regulators { | ||
| 65 | compatible = "simple-bus"; | ||
| 66 | |||
| 67 | reg_2p5v: 2p5v { | ||
| 68 | compatible = "regulator-fixed"; | ||
| 69 | regulator-name = "2P5V"; | ||
| 70 | regulator-min-microvolt = <2500000>; | ||
| 71 | regulator-max-microvolt = <2500000>; | ||
| 72 | regulator-always-on; | ||
| 73 | }; | ||
| 74 | |||
| 75 | reg_3p3v: 3p3v { | ||
| 76 | compatible = "regulator-fixed"; | ||
| 77 | regulator-name = "3P3V"; | ||
| 78 | regulator-min-microvolt = <3300000>; | ||
| 79 | regulator-max-microvolt = <3300000>; | ||
| 80 | regulator-always-on; | ||
| 47 | }; | 81 | }; |
| 48 | }; | 82 | }; |
| 49 | }; | 83 | }; |
| @@ -88,9 +88,9 @@ · 87 unmodified lines | |||
| 88 | ranges; | 88 | ranges; |
| 89 | 89 | ||
| 90 | timer@00a00600 { | 90 | timer@00a00600 { |
| 91 | compatible = "arm,smp-twd"; | 91 | compatible = "arm,cortex-a9-twd-timer"; |
| 92 | reg = <0x00a00600 0x100>; | 92 | reg = <0x00a00600 0x20>; |
| 93 | interrupts = <1 13 0xf4>; | 93 | interrupts = <1 13 0xf01>; |
| 94 | }; | 94 | }; |
| 95 | 95 | ||
| 96 | L2: l2-cache@00a02000 { | 96 | L2: l2-cache@00a02000 { |
| @@ -0,0 +1,24 @@ | |||
| 1 | /dts-v1/; | ||
| 2 | |||
| 3 | /include/ "kirkwood.dtsi" | ||
| 4 | |||
| 5 | / { | ||
| 6 | model = "Globalscale Technologies Dreamplug"; | ||
| 7 | compatible = "globalscale,dreamplug-003-ds2001", "globalscale,dreamplug", "mrvl,kirkwood-88f6281", "mrvl,kirkwood"; | ||
| 8 | |||
| 9 | memory { | ||
| 10 | device_type = "memory"; | ||
| 11 | reg = <0x00000000 0x20000000>; | ||
| 12 | }; | ||
| 13 | |||
| 14 | chosen { | ||
| 15 | bootargs = "console=ttyS0,115200n8 earlyprintk"; | ||
| 16 | }; | ||
| 17 | |||
| 18 | ocp@f1000000 { | ||
| 19 | serial@12000 { | ||
| 20 | clock-frequency = <200000000>; | ||
| 21 | status = "ok"; | ||
| 22 | }; | ||
| 23 | }; | ||
| 24 | }; | ||
| @@ -0,0 +1,36 @@ | |||
| 1 | /include/ "skeleton.dtsi" | ||
| 2 | |||
| 3 | / { | ||
| 4 | compatible = "mrvl,kirkwood"; | ||
| 5 | |||
| 6 | ocp@f1000000 { | ||
| 7 | compatible = "simple-bus"; | ||
| 8 | ranges = <0 0xf1000000 0x1000000>; | ||
| 9 | #address-cells = <1>; | ||
| 10 | #size-cells = <1>; | ||
| 11 | |||
| 12 | serial@12000 { | ||
| 13 | compatible = "ns16550a"; | ||
| 14 | reg = <0x12000 0x100>; | ||
| 15 | reg-shift = <2>; | ||
| 16 | interrupts = <33>; | ||
| 17 | /* set clock-frequency in board dts */ | ||
| 18 | status = "disabled"; | ||
| 19 | }; | ||
| 20 | |||
| 21 | serial@12100 { | ||
| 22 | compatible = "ns16550a"; | ||
| 23 | reg = <0x12100 0x100>; | ||
| 24 | reg-shift = <2>; | ||
| 25 | interrupts = <34>; | ||
| 26 | /* set clock-frequency in board dts */ | ||
| 27 | status = "disabled"; | ||
| 28 | }; | ||
| 29 | |||
| 30 | rtc@10300 { | ||
| 31 | compatible = "mrvl,kirkwood-rtc", "mrvl,orion-rtc"; | ||
| 32 | reg = <0x10300 0x20>; | ||
| 33 | interrupts = <53>; | ||
| 34 | }; | ||
| 35 | }; | ||
| 36 | }; | ||
| @@ -13,15 +13,6 @@ · 12 unmodified lines | |||
| 13 | model = "TI OMAP3 BeagleBoard"; | 13 | model = "TI OMAP3 BeagleBoard"; |
| 14 | compatible = "ti,omap3-beagle", "ti,omap3"; | 14 | compatible = "ti,omap3-beagle", "ti,omap3"; |
| 15 | 15 | ||
| 16 | /* | ||
| 17 | * Since the initial device tree board file does not create any | ||
| 18 | * devices (MMC, network...), the only way to boot is to provide a | ||
| 19 | * ramdisk. | ||
| 20 | */ | ||
| 21 | chosen { | ||
| 22 | bootargs = "root=/dev/ram0 rw console=ttyO2,115200n8 initrd=0x81600000,20M ramdisk_size=20480 no_console_suspend debug earlyprintk"; | ||
| 23 | }; | ||
| 24 | |||
| 25 | memory { | 16 | memory { |
| 26 | device_type = "memory"; | 17 | device_type = "memory"; |
| 27 | reg = <0x80000000 0x20000000>; /* 512 MB */ | 18 | reg = <0x80000000 0x20000000>; /* 512 MB */ |
| @@ -0,0 +1,20 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License version 2 as | ||
| 6 | * published by the Free Software Foundation. | ||
| 7 | */ | ||
| 8 | /dts-v1/; | ||
| 9 | |||
| 10 | /include/ "omap3.dtsi" | ||
| 11 | |||
| 12 | / { | ||
| 13 | model = "TI OMAP3 EVM (OMAP3530, AM/DM37x)"; | ||
| 14 | compatible = "ti,omap3-evm", "ti,omap3"; | ||
| 15 | |||
| 16 | memory { | ||
| 17 | device_type = "memory"; | ||
| 18 | reg = <0x80000000 0x10000000>; /* 256 MB */ | ||
| 19 | }; | ||
| 20 | }; | ||
| @@ -61,34 +61,57 @@ · 60 unmodified lines | |||
| 61 | ranges; | 61 | ranges; |
| 62 | ti,hwmods = "l3_main"; | 62 | ti,hwmods = "l3_main"; |
| 63 | 63 | ||
| 64 | intc: interrupt-controller@1 { | 64 | intc: interrupt-controller@48200000 { |
| 65 | compatible = "ti,omap3-intc"; | 65 | compatible = "ti,omap2-intc"; |
| 66 | interrupt-controller; | 66 | interrupt-controller; |
| 67 | #interrupt-cells = <1>; | 67 | #interrupt-cells = <1>; |
| 68 | ti,intc-size = <96>; | ||
| 69 | reg = <0x48200000 0x1000>; | ||
| 68 | }; | 70 | }; |
| 69 | 71 | ||
| 70 | uart1: serial@0x4806a000 { | 72 | uart1: serial@4806a000 { |
| 71 | compatible = "ti,omap3-uart"; | 73 | compatible = "ti,omap3-uart"; |
| 72 | ti,hwmods = "uart1"; | 74 | ti,hwmods = "uart1"; |
| 73 | clock-frequency = <48000000>; | 75 | clock-frequency = <48000000>; |
| 74 | }; | 76 | }; |
| 75 | 77 | ||
| 76 | uart2: serial@0x4806c000 { | 78 | uart2: serial@4806c000 { |
| 77 | compatible = "ti,omap3-uart"; | 79 | compatible = "ti,omap3-uart"; |
| 78 | ti,hwmods = "uart2"; | 80 | ti,hwmods = "uart2"; |
| 79 | clock-frequency = <48000000>; | 81 | clock-frequency = <48000000>; |
| 80 | }; | 82 | }; |
| 81 | 83 | ||
| 82 | uart3: serial@0x49020000 { | 84 | uart3: serial@49020000 { |
| 83 | compatible = "ti,omap3-uart"; | 85 | compatible = "ti,omap3-uart"; |
| 84 | ti,hwmods = "uart3"; | 86 | ti,hwmods = "uart3"; |
| 85 | clock-frequency = <48000000>; | 87 | clock-frequency = <48000000>; |
| 86 | }; | 88 | }; |
| 87 | 89 | ||
| 88 | uart4: serial@0x49042000 { | 90 | uart4: serial@49042000 { |
| 89 | compatible = "ti,omap3-uart"; | 91 | compatible = "ti,omap3-uart"; |
| 90 | ti,hwmods = "uart4"; | 92 | ti,hwmods = "uart4"; |
| 91 | clock-frequency = <48000000>; | 93 | clock-frequency = <48000000>; |
| 92 | }; | 94 | }; |
| 95 | |||
| 96 | i2c1: i2c@48070000 { | ||
| 97 | compatible = "ti,omap3-i2c"; | ||
| 98 | #address-cells = <1>; | ||
| 99 | #size-cells = <0>; | ||
| 100 | ti,hwmods = "i2c1"; | ||
| 101 | }; | ||
| 102 | |||
| 103 | i2c2: i2c@48072000 { | ||
| 104 | compatible = "ti,omap3-i2c"; | ||
| 105 | #address-cells = <1>; | ||
| 106 | #size-cells = <0>; | ||
| 107 | ti,hwmods = "i2c2"; | ||
| 108 | }; | ||
| 109 | |||
| 110 | i2c3: i2c@48060000 { | ||
| 111 | compatible = "ti,omap3-i2c"; | ||
| 112 | #address-cells = <1>; | ||
| 113 | #size-cells = <0>; | ||
| 114 | ti,hwmods = "i2c3"; | ||
| 115 | }; | ||
| 93 | }; | 116 | }; |
| 94 | }; | 117 | }; |
| @@ -13,15 +13,6 @@ · 12 unmodified lines | |||
| 13 | model = "TI OMAP4 PandaBoard"; | 13 | model = "TI OMAP4 PandaBoard"; |
| 14 | compatible = "ti,omap4-panda", "ti,omap4430", "ti,omap4"; | 14 | compatible = "ti,omap4-panda", "ti,omap4430", "ti,omap4"; |
| 15 | 15 | ||
| 16 | /* | ||
| 17 | * Since the initial device tree board file does not create any | ||
| 18 | * devices (MMC, network...), the only way to boot is to provide a | ||
| 19 | * ramdisk. | ||
| 20 | */ | ||
| 21 | chosen { | ||
| 22 | bootargs = "root=/dev/ram0 rw console=ttyO2,115200n8 initrd=0x81600000,20M ramdisk_size=20480 no_console_suspend debug"; | ||
| 23 | }; | ||
| 24 | |||
| 25 | memory { | 16 | memory { |
| 26 | device_type = "memory"; | 17 | device_type = "memory"; |
| 27 | reg = <0x80000000 0x40000000>; /* 1 GB */ | 18 | reg = <0x80000000 0x40000000>; /* 1 GB */ |
| @@ -13,15 +13,6 @@ · 12 unmodified lines | |||
| 13 | model = "TI OMAP4 SDP board"; | 13 | model = "TI OMAP4 SDP board"; |
| 14 | compatible = "ti,omap4-sdp", "ti,omap4430", "ti,omap4"; | 14 | compatible = "ti,omap4-sdp", "ti,omap4430", "ti,omap4"; |
| 15 | 15 | ||
| 16 | /* | ||
| 17 | * Since the initial device tree board file does not create any | ||
| 18 | * devices (MMC, network...), the only way to boot is to provide a | ||
| 19 | * ramdisk. | ||
| 20 | */ | ||
| 21 | chosen { | ||
| 22 | bootargs = "root=/dev/ram0 rw console=ttyO2,115200n8 initrd=0x81600000,20M ramdisk_size=20480 no_console_suspend debug"; | ||
| 23 | }; | ||
| 24 | |||
| 25 | memory { | 16 | memory { |
| 26 | device_type = "memory"; | 17 | device_type = "memory"; |
| 27 | reg = <0x80000000 0x40000000>; /* 1 GB */ | 18 | reg = <0x80000000 0x40000000>; /* 1 GB */ |
| @@ -99,33 +99,61 @@ · 98 unmodified lines | |||
| 99 | gic: interrupt-controller@48241000 { | 99 | gic: interrupt-controller@48241000 { |
| 100 | compatible = "arm,cortex-a9-gic"; | 100 | compatible = "arm,cortex-a9-gic"; |
| 101 | interrupt-controller; | 101 | interrupt-controller; |
| 102 | #interrupt-cells = <1>; | 102 | #interrupt-cells = <3>; |
| 103 | reg = <0x48241000 0x1000>, | 103 | reg = <0x48241000 0x1000>, |
| 104 | <0x48240100 0x0100>; | 104 | <0x48240100 0x0100>; |
| 105 | }; | 105 | }; |
| 106 | 106 | ||
| 107 | uart1: serial@0x4806a000 { | 107 | uart1: serial@4806a000 { |
| 108 | compatible = "ti,omap4-uart"; | 108 | compatible = "ti,omap4-uart"; |
| 109 | ti,hwmods = "uart1"; | 109 | ti,hwmods = "uart1"; |
| 110 | clock-frequency = <48000000>; | 110 | clock-frequency = <48000000>; |
| 111 | }; | 111 | }; |
| 112 | 112 | ||
| 113 | uart2: serial@0x4806c000 { | 113 | uart2: serial@4806c000 { |
| 114 | compatible = "ti,omap4-uart"; | 114 | compatible = "ti,omap4-uart"; |
| 115 | ti,hwmods = "uart2"; | 115 | ti,hwmods = "uart2"; |
| 116 | clock-frequency = <48000000>; | 116 | clock-frequency = <48000000>; |
| 117 | }; | 117 | }; |
| 118 | 118 | ||
| 119 | uart3: serial@0x48020000 { | 119 | uart3: serial@48020000 { |
| 120 | compatible = "ti,omap4-uart"; | 120 | compatible = "ti,omap4-uart"; |
| 121 | ti,hwmods = "uart3"; | 121 | ti,hwmods = "uart3"; |
| 122 | clock-frequency = <48000000>; | 122 | clock-frequency = <48000000>; |
| 123 | }; | 123 | }; |
| 124 | 124 | ||
| 125 | uart4: serial@0x4806e000 { | 125 | uart4: serial@4806e000 { |
| 126 | compatible = "ti,omap4-uart"; | 126 | compatible = "ti,omap4-uart"; |
| 127 | ti,hwmods = "uart4"; | 127 | ti,hwmods = "uart4"; |
| 128 | clock-frequency = <48000000>; | 128 | clock-frequency = <48000000>; |
| 129 | }; | 129 | }; |
| 130 | |||
| 131 | i2c1: i2c@48070000 { | ||
| 132 | compatible = "ti,omap4-i2c"; | ||
| 133 | #address-cells = <1>; | ||
| 134 | #size-cells = <0>; | ||
| 135 | ti,hwmods = "i2c1"; | ||
| 136 | }; | ||
| 137 | |||
| 138 | i2c2: i2c@48072000 { | ||
| 139 | compatible = "ti,omap4-i2c"; | ||
| 140 | #address-cells = <1>; | ||
| 141 | #size-cells = <0>; | ||
| 142 | ti,hwmods = "i2c2"; | ||
| 143 | }; | ||
| 144 | |||
| 145 | i2c3: i2c@48060000 { | ||
| 146 | compatible = "ti,omap4-i2c"; | ||
| 147 | #address-cells = <1>; | ||
| 148 | #size-cells = <0>; | ||
| 149 | ti,hwmods = "i2c3"; | ||
| 150 | }; | ||
| 151 | |||
| 152 | i2c4: i2c@48350000 { | ||
| 153 | compatible = "ti,omap4-i2c"; | ||
| 154 | #address-cells = <1>; | ||
| 155 | #size-cells = <0>; | ||
| 156 | ti,hwmods = "i2c4"; | ||
| 157 | }; | ||
| 130 | }; | 158 | }; |
| 131 | }; | 159 | }; |
| @@ -0,0 +1,38 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2012 Marvell Technology Group Ltd. | ||
| 3 | * Author: Haojian Zhuang <haojian.zhuang@marvell.com> | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License version 2 as | ||
| 7 | * publishhed by the Free Software Foundation. | ||
| 8 | */ | ||
| 9 | |||
| 10 | /dts-v1/; | ||
| 11 | /include/ "pxa168.dtsi" | ||
| 12 | |||
| 13 | / { | ||
| 14 | model = "Marvell PXA168 Aspenite Development Board"; | ||
| 15 | compatible = "mrvl,pxa168-aspenite", "mrvl,pxa168"; | ||
| 16 | |||
| 17 | chosen { | ||
| 18 | bootargs = "console=ttyS0,115200 root=/dev/nfs nfsroot=192.168.1.100:/nfsroot/ ip=192.168.1.101:192.168.1.100::255.255.255.0::eth0:on"; | ||
| 19 | }; | ||
| 20 | |||
| 21 | memory { | ||
| 22 | reg = <0x00000000 0x04000000>; | ||
| 23 | }; | ||
| 24 | |||
| 25 | soc { | ||
| 26 | apb@d4000000 { | ||
| 27 | uart1: uart@d4017000 { | ||
| 28 | status = "okay"; | ||
| 29 | }; | ||
| 30 | twsi1: i2c@d4011000 { | ||
| 31 | status = "okay"; | ||
| 32 | }; | ||
| 33 | rtc: rtc@d4010000 { | ||
| 34 | status = "okay"; | ||
| 35 | }; | ||
| 36 | }; | ||
| 37 | }; | ||
| 38 | }; | ||
| @@ -0,0 +1,98 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2012 Marvell Technology Group Ltd. | ||
| 3 | * Author: Haojian Zhuang <haojian.zhuang@marvell.com> | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License version 2 as | ||
| 7 | * publishhed by the Free Software Foundation. | ||
| 8 | */ | ||
| 9 | |||
| 10 | /include/ "skeleton.dtsi" | ||
| 11 | |||
| 12 | / { | ||
| 13 | aliases { | ||
| 14 | serial0 = &uart1; | ||
| 15 | serial1 = &uart2; | ||
| 16 | serial2 = &uart3; | ||
| 17 | i2c0 = &twsi1; | ||
| 18 | i2c1 = &twsi2; | ||
| 19 | }; | ||
| 20 | |||
| 21 | intc: intc-interrupt-controller@d4282000 { | ||
| 22 | compatible = "mrvl,mmp-intc", "mrvl,intc"; | ||
| 23 | interrupt-controller; | ||
| 24 | #interrupt-cells = <1>; | ||
| 25 | reg = <0xd4282000 0x1000>; | ||
| 26 | }; | ||
| 27 | |||
| 28 | soc { | ||
| 29 | #address-cells = <1>; | ||
| 30 | #size-cells = <1>; | ||
| 31 | compatible = "simple-bus"; | ||
| 32 | interrupt-parent = <&intc>; | ||
| 33 | ranges; | ||
| 34 | |||
| 35 | apb@d4000000 { /* APB */ | ||
| 36 | compatible = "mrvl,apb-bus", "simple-bus"; | ||
| 37 | #address-cells = <1>; | ||
| 38 | #size-cells = <1>; | ||
| 39 | reg = <0xd4000000 0x00200000>; | ||
| 40 | ranges; | ||
| 41 | |||
| 42 | uart1: uart@d4017000 { | ||
| 43 | compatible = "mrvl,mmp-uart", "mrvl,pxa-uart"; | ||
| 44 | reg = <0xd4017000 0x1000>; | ||
| 45 | interrupts = <27>; | ||
| 46 | status = "disabled"; | ||
| 47 | }; | ||
| 48 | |||
| 49 | uart2: uart@d4018000 { | ||
| 50 | compatible = "mrvl,mmp-uart", "mrvl,pxa-uart"; | ||
| 51 | reg = <0xd4018000 0x1000>; | ||
| 52 | interrupts = <28>; | ||
| 53 | status = "disabled"; | ||
| 54 | }; | ||
| 55 | |||
| 56 | uart3: uart@d4026000 { | ||
| 57 | compatible = "mrvl,mmp-uart", "mrvl,pxa-uart"; | ||
| 58 | reg = <0xd4026000 0x1000>; | ||
| 59 | interrupts = <29>; | ||
| 60 | status = "disabled"; | ||
| 61 | }; | ||
| 62 | |||
| 63 | gpio: gpio@d4019000 { | ||
| 64 | compatible = "mrvl,mmp-gpio", "mrvl,pxa-gpio"; | ||
| 65 | reg = <0xd4019000 0x1000>; | ||
| 66 | interrupts = <49>; | ||
| 67 | interrupt-names = "gpio_mux"; | ||
| 68 | gpio-controller; | ||
| 69 | #gpio-cells = <1>; | ||
| 70 | interrupt-controller; | ||
| 71 | #interrupt-cells = <1>; | ||
| 72 | }; | ||
| 73 | |||
| 74 | twsi1: i2c@d4011000 { | ||
| 75 | compatible = "mrvl,mmp-twsi", "mrvl,pxa-i2c"; | ||
| 76 | reg = <0xd4011000 0x1000>; | ||
| 77 | interrupts = <7>; | ||
| 78 | mrvl,i2c-fast-mode; | ||
| 79 | status = "disabled"; | ||
| 80 | }; | ||
| 81 | |||
| 82 | twsi2: i2c@d4025000 { | ||
| 83 | compatible = "mrvl,mmp-twsi", "mrvl,pxa-i2c"; | ||
| 84 | reg = <0xd4025000 0x1000>; | ||
| 85 | interrupts = <58>; | ||
| 86 | status = "disabled"; | ||
| 87 | }; | ||
| 88 | |||
| 89 | rtc: rtc@d4010000 { | ||
| 90 | compatible = "mrvl,mmp-rtc"; | ||
| 91 | reg = <0xd4010000 0x1000>; | ||
| 92 | interrupts = <5 6>; | ||
| 93 | interrupt-names = "rtc 1Hz", "rtc alarm"; | ||
| 94 | status = "disabled"; | ||
| 95 | }; | ||
| 96 | }; | ||
| 97 | }; | ||
| 98 | }; | ||
| @@ -0,0 +1,139 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2011 ST-Ericsson AB | ||
| 3 | * | ||
| 4 | * The code contained herein is licensed under the GNU General Public | ||
| 5 | * License. You may obtain a copy of the GNU General Public License | ||
| 6 | * Version 2 or later at the following locations: | ||
| 7 | * | ||
| 8 | * http://www.opensource.org/licenses/gpl-license.html | ||
| 9 | * http://www.gnu.org/copyleft/gpl.html | ||
| 10 | */ | ||
| 11 | |||
| 12 | /dts-v1/; | ||
| 13 | /include/ "db8500.dtsi" | ||
| 14 | |||
| 15 | / { | ||
| 16 | model = "Calao Systems Snowball platform with device tree"; | ||
| 17 | compatible = "calaosystems,snowball-a9500"; | ||
| 18 | |||
| 19 | memory { | ||
| 20 | reg = <0x00000000 0x20000000>; | ||
| 21 | }; | ||
| 22 | |||
| 23 | gpio_keys { | ||
| 24 | compatible = "gpio-keys"; | ||
| 25 | #address-cells = <1>; | ||
| 26 | #size-cells = <0>; | ||
| 27 | |||
| 28 | button@1 { | ||
| 29 | debounce_interval = <50>; | ||
| 30 | wakeup = <1>; | ||
| 31 | linux,code = <2>; | ||
| 32 | label = "userpb"; | ||
| 33 | gpios = <&gpio1 0>; | ||
| 34 | }; | ||
| 35 | button@2 { | ||
| 36 | debounce_interval = <50>; | ||
| 37 | wakeup = <1>; | ||
| 38 | linux,code = <3>; | ||
| 39 | label = "userpb"; | ||
| 40 | gpios = <&gpio4 23>; | ||
| 41 | }; | ||
| 42 | button@3 { | ||
| 43 | debounce_interval = <50>; | ||
| 44 | wakeup = <1>; | ||
| 45 | linux,code = <4>; | ||
| 46 | label = "userpb"; | ||
| 47 | gpios = <&gpio4 23>; | ||
| 48 | }; | ||
| 49 | button@4 { | ||
| 50 | debounce_interval = <50>; | ||
| 51 | wakeup = <1>; | ||
| 52 | linux,code = <5>; | ||
| 53 | label = "userpb"; | ||
| 54 | gpios = <&gpio5 1>; | ||
| 55 | }; | ||
| 56 | button@5 { | ||
| 57 | debounce_interval = <50>; | ||
| 58 | wakeup = <1>; | ||
| 59 | linux,code = <6>; | ||
| 60 | label = "userpb"; | ||
| 61 | gpios = <&gpio5 2>; | ||
| 62 | }; | ||
| 63 | }; | ||
| 64 | |||
| 65 | leds { | ||
| 66 | compatible = "gpio-leds"; | ||
| 67 | used-led { | ||
| 68 | label = "user_led"; | ||
| 69 | gpios = <&gpio4 14>; | ||
| 70 | }; | ||
| 71 | }; | ||
| 72 | |||
| 73 | soc-u9500 { | ||
| 74 | |||
| 75 | external-bus@50000000 { | ||
| 76 | compatible = "simple-bus"; | ||
| 77 | reg = <0x50000000 0x10000000>; | ||
| 78 | #address-cells = <1>; | ||
| 79 | #size-cells = <1>; | ||
| 80 | ranges; | ||
| 81 | |||
| 82 | ethernet@50000000 { | ||
| 83 | compatible = "smsc,9111"; | ||
| 84 | reg = <0x50000000 0x10000>; | ||
| 85 | interrupts = <12>; | ||
| 86 | interrupt-parent = <&gpio4>; | ||
| 87 | }; | ||
| 88 | }; | ||
| 89 | |||
| 90 | sdi@80126000 { | ||
| 91 | status = "enabled"; | ||
| 92 | cd-gpios = <&gpio6 26>; | ||
| 93 | }; | ||
| 94 | |||
| 95 | sdi@80114000 { | ||
| 96 | status = "enabled"; | ||
| 97 | }; | ||
| 98 | |||
| 99 | uart@80120000 { | ||
| 100 | status = "okay"; | ||
| 101 | }; | ||
| 102 | |||
| 103 | uart@80121000 { | ||
| 104 | status = "okay"; | ||
| 105 | }; | ||
| 106 | |||
| 107 | uart@80007000 { | ||
| 108 | status = "okay"; | ||
| 109 | }; | ||
| 110 | |||
| 111 | i2c@80004000 { | ||
| 112 | tc3589x@42 { | ||
| 113 | //compatible = "tc3589x"; | ||
| 114 | reg = <0x42>; | ||
| 115 | interrupts = <25>; | ||
| 116 | interrupt-parent = <&gpio6>; | ||
| 117 | }; | ||
| 118 | tps61052@33 { | ||
| 119 | //compatible = "tps61052"; | ||
| 120 | reg = <0x33>; | ||
| 121 | }; | ||
| 122 | }; | ||
| 123 | |||
| 124 | i2c@80128000 { | ||
| 125 | lp5521@0x33 { | ||
| 126 | // compatible = "lp5521"; | ||
| 127 | reg = <0x33>; | ||
| 128 | }; | ||
| 129 | lp5521@0x34 { | ||
| 130 | // compatible = "lp5521"; | ||
| 131 | reg = <0x34>; | ||
| 132 | }; | ||
| 133 | bh1780@0x29 { | ||
| 134 | // compatible = "rohm,bh1780gli"; | ||
| 135 | reg = <0x33>; | ||
| 136 | }; | ||
| 137 | }; | ||
| 138 | }; | ||
| 139 | }; | ||
| @@ -0,0 +1,47 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2012 Stefan Roese <sr@denx.de> | ||
| 3 | * | ||
| 4 | * The code contained herein is licensed under the GNU General Public | ||
| 5 | * License. You may obtain a copy of the GNU General Public License | ||
| 6 | * Version 2 or later at the following locations: | ||
| 7 | * | ||
| 8 | * http://www.opensource.org/licenses/gpl-license.html | ||
| 9 | * http://www.gnu.org/copyleft/gpl.html | ||
| 10 | */ | ||
| 11 | |||
| 12 | /dts-v1/; | ||
| 13 | /include/ "spear600.dtsi" | ||
| 14 | |||
| 15 | / { | ||
| 16 | model = "ST SPEAr600 Evaluation Board"; | ||
| 17 | compatible = "st,spear600-evb", "st,spear600"; | ||
| 18 | #address-cells = <1>; | ||
| 19 | #size-cells = <1>; | ||
| 20 | |||
| 21 | memory { | ||
| 22 | device_type = "memory"; | ||
| 23 | reg = <0 0x10000000>; | ||
| 24 | }; | ||
| 25 | |||
| 26 | ahb { | ||
| 27 | gmac: ethernet@e0800000 { | ||
| 28 | phy-mode = "gmii"; | ||
| 29 | status = "okay"; | ||
| 30 | }; | ||
| 31 | |||
| 32 | apb { | ||
| 33 | serial@d0000000 { | ||
| 34 | status = "okay"; | ||
| 35 | }; | ||
| 36 | |||
| 37 | serial@d0080000 { | ||
| 38 | status = "okay"; | ||
| 39 | }; | ||
| 40 | |||
| 41 | i2c@d0200000 { | ||
| 42 | clock-frequency = <400000>; | ||
| 43 | status = "okay"; | ||
| 44 | }; | ||
| 45 | }; | ||
| 46 | }; | ||
| 47 | }; | ||
| @@ -0,0 +1,174 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2012 Stefan Roese <sr@denx.de> | ||
| 3 | * | ||
| 4 | * The code contained herein is licensed under the GNU General Public | ||
| 5 | * License. You may obtain a copy of the GNU General Public License | ||
| 6 | * Version 2 or later at the following locations: | ||
| 7 | * | ||
| 8 | * http://www.opensource.org/licenses/gpl-license.html | ||
| 9 | * http://www.gnu.org/copyleft/gpl.html | ||
| 10 | */ | ||
| 11 | |||
| 12 | /include/ "skeleton.dtsi" | ||
| 13 | |||
| 14 | / { | ||
| 15 | compatible = "st,spear600"; | ||
| 16 | |||
| 17 | cpus { | ||
| 18 | cpu@0 { | ||
| 19 | compatible = "arm,arm926ejs"; | ||
| 20 | }; | ||
| 21 | }; | ||
| 22 | |||
| 23 | memory { | ||
| 24 | device_type = "memory"; | ||
| 25 | reg = <0 0x40000000>; | ||
| 26 | }; | ||
| 27 | |||
| 28 | ahb { | ||
| 29 | #address-cells = <1>; | ||
| 30 | #size-cells = <1>; | ||
| 31 | compatible = "simple-bus"; | ||
| 32 | ranges = <0xd0000000 0xd0000000 0x30000000>; | ||
| 33 | |||
| 34 | vic0: interrupt-controller@f1100000 { | ||
| 35 | compatible = "arm,pl190-vic"; | ||
| 36 | interrupt-controller; | ||
| 37 | reg = <0xf1100000 0x1000>; | ||
| 38 | #interrupt-cells = <1>; | ||
| 39 | }; | ||
| 40 | |||
| 41 | vic1: interrupt-controller@f1000000 { | ||
| 42 | compatible = "arm,pl190-vic"; | ||
| 43 | interrupt-controller; | ||
| 44 | reg = <0xf1000000 0x1000>; | ||
| 45 | #interrupt-cells = <1>; | ||
| 46 | }; | ||
| 47 | |||
| 48 | gmac: ethernet@e0800000 { | ||
| 49 | compatible = "st,spear600-gmac"; | ||
| 50 | reg = <0xe0800000 0x8000>; | ||
| 51 | interrupt-parent = <&vic1>; | ||
| 52 | interrupts = <24 23>; | ||
| 53 | interrupt-names = "macirq", "eth_wake_irq"; | ||
| 54 | status = "disabled"; | ||
| 55 | }; | ||
| 56 | |||
| 57 | fsmc: flash@d1800000 { | ||
| 58 | compatible = "st,spear600-fsmc-nand"; | ||
| 59 | #address-cells = <1>; | ||
| 60 | #size-cells = <1>; | ||
| 61 | reg = <0xd1800000 0x1000 /* FSMC Register */ | ||
| 62 | 0xd2000000 0x4000>; /* NAND Base */ | ||
| 63 | reg-names = "fsmc_regs", "nand_data"; | ||
| 64 | st,ale-off = <0x20000>; | ||
| 65 | st,cle-off = <0x10000>; | ||
| 66 | status = "disabled"; | ||
| 67 | }; | ||
| 68 | |||
| 69 | smi: flash@fc000000 { | ||
| 70 | compatible = "st,spear600-smi"; | ||
| 71 | #address-cells = <1>; | ||
| 72 | #size-cells = <1>; | ||
| 73 | reg = <0xfc000000 0x1000>; | ||
| 74 | interrupt-parent = <&vic1>; | ||
| 75 | interrupts = <12>; | ||
| 76 | status = "disabled"; | ||
| 77 | }; | ||
| 78 | |||
| 79 | ehci@e1800000 { | ||
| 80 | compatible = "st,spear600-ehci", "usb-ehci"; | ||
| 81 | reg = <0xe1800000 0x1000>; | ||
| 82 | interrupt-parent = <&vic1>; | ||
| 83 | interrupts = <27>; | ||
| 84 | status = "disabled"; | ||
| 85 | }; | ||
| 86 | |||
| 87 | ehci@e2000000 { | ||
| 88 | compatible = "st,spear600-ehci", "usb-ehci"; | ||
| 89 | reg = <0xe2000000 0x1000>; | ||
| 90 | interrupt-parent = <&vic1>; | ||
| 91 | interrupts = <29>; | ||
| 92 | status = "disabled"; | ||
| 93 | }; | ||
| 94 | |||
| 95 | ohci@e1900000 { | ||
| 96 | compatible = "st,spear600-ohci", "usb-ohci"; | ||
| 97 | reg = <0xe1900000 0x1000>; | ||
| 98 | interrupt-parent = <&vic1>; | ||
| 99 | interrupts = <26>; | ||
| 100 | status = "disabled"; | ||
| 101 | }; | ||
| 102 | |||
| 103 | ohci@e2100000 { | ||
| 104 | compatible = "st,spear600-ohci", "usb-ohci"; | ||
| 105 | reg = <0xe2100000 0x1000>; | ||
| 106 | interrupt-parent = <&vic1>; | ||
| 107 | interrupts = <28>; | ||
| 108 | status = "disabled"; | ||
| 109 | }; | ||
| 110 | |||
| 111 | apb { | ||
| 112 | #address-cells = <1>; | ||
| 113 | #size-cells = <1>; | ||
| 114 | compatible = "simple-bus"; | ||
| 115 | ranges = <0xd0000000 0xd0000000 0x30000000>; | ||
| 116 | |||
| 117 | serial@d0000000 { | ||
| 118 | compatible = "arm,pl011", "arm,primecell"; | ||
| 119 | reg = <0xd0000000 0x1000>; | ||
| 120 | interrupt-parent = <&vic0>; | ||
| 121 | interrupts = <24>; | ||
| 122 | status = "disabled"; | ||
| 123 | }; | ||
| 124 | |||
| 125 | serial@d0080000 { | ||
| 126 | compatible = "arm,pl011", "arm,primecell"; | ||
| 127 | reg = <0xd0080000 0x1000>; | ||
| 128 | interrupt-parent = <&vic0>; | ||
| 129 | interrupts = <25>; | ||
| 130 | status = "disabled"; | ||
| 131 | }; | ||
| 132 | |||
| 133 | /* local/cpu GPIO */ | ||
| 134 | gpio0: gpio@f0100000 { | ||
| 135 | #gpio-cells = <2>; | ||
| 136 | compatible = "arm,pl061", "arm,primecell"; | ||
| 137 | gpio-controller; | ||
| 138 | reg = <0xf0100000 0x1000>; | ||
| 139 | interrupt-parent = <&vic0>; | ||
| 140 | interrupts = <18>; | ||
| 141 | }; | ||
| 142 | |||
| 143 | /* basic GPIO */ | ||
| 144 | gpio1: gpio@fc980000 { | ||
| 145 | #gpio-cells = <2>; | ||
| 146 | compatible = "arm,pl061", "arm,primecell"; | ||
| 147 | gpio-controller; | ||
| 148 | reg = <0xfc980000 0x1000>; | ||
| 149 | interrupt-parent = <&vic1>; | ||
| 150 | interrupts = <19>; | ||
| 151 | }; | ||
| 152 | |||
| 153 | /* appl GPIO */ | ||
| 154 | gpio2: gpio@d8100000 { | ||
| 155 | #gpio-cells = <2>; | ||
| 156 | compatible = "arm,pl061", "arm,primecell"; | ||
| 157 | gpio-controller; | ||
| 158 | reg = <0xd8100000 0x1000>; | ||
| 159 | interrupt-parent = <&vic1>; | ||
| 160 | interrupts = <4>; | ||
| 161 | }; | ||
| 162 | |||
| 163 | i2c@d0200000 { | ||
| 164 | #address-cells = <1>; | ||
| 165 | #size-cells = <0>; | ||
| 166 | compatible = "snps,designware-i2c"; | ||
| 167 | reg = <0xd0200000 0x1000>; | ||
| 168 | interrupt-parent = <&vic0>; | ||
| 169 | interrupts = <28>; | ||
| 170 | status = "disabled"; | ||
| 171 | }; | ||
| 172 | }; | ||
| 173 | }; | ||
| 174 | }; | ||
| @@ -14,6 +14,22 @@ · 13 unmodified lines | |||
| 14 | clock-frequency = < 408000000 >; | 14 | clock-frequency = < 408000000 >; |
| 15 | }; | 15 | }; |
| 16 | 16 | ||
| 17 | serial@70006040 { | ||
| 18 | status = "disable"; | ||
| 19 | }; | ||
| 20 | |||
| 21 | serial@70006200 { | ||
| 22 | status = "disable"; | ||
| 23 | }; | ||
| 24 | |||
| 25 | serial@70006300 { | ||
| 26 | status = "disable"; | ||
| 27 | }; | ||
| 28 | |||
| 29 | serial@70006400 { | ||
| 30 | status = "disable"; | ||
| 31 | }; | ||
| 32 | |||
| 17 | i2c@7000c000 { | 33 | i2c@7000c000 { |
| 18 | clock-frequency = <100000>; | 34 | clock-frequency = <100000>; |
| 19 | }; | 35 | }; |
| @@ -33,4 +49,22 @@ · 13 unmodified lines | |||
| 33 | i2c@7000d000 { | 49 | i2c@7000d000 { |
| 34 | clock-frequency = <100000>; | 50 | clock-frequency = <100000>; |
| 35 | }; | 51 | }; |
| 52 | |||
| 53 | sdhci@78000000 { | ||
| 54 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ | ||
| 55 | wp-gpios = <&gpio 155 0>; /* gpio PT3 */ | ||
| 56 | power-gpios = <&gpio 31 0>; /* gpio PD7 */ | ||
| 57 | }; | ||
| 58 | |||
| 59 | sdhci@78000200 { | ||
| 60 | status = "disable"; | ||
| 61 | }; | ||
| 62 | |||
| 63 | sdhci@78000400 { | ||
| 64 | status = "disable"; | ||
| 65 | }; | ||
| 66 | |||
| 67 | sdhci@78000400 { | ||
| 68 | support-8bit; | ||
| 69 | }; | ||
| 36 | }; | 70 | }; |
| @@ -10,19 +10,25 @@ · 9 unmodified lines | |||
| 10 | reg = < 0x00000000 0x40000000 >; | 10 | reg = < 0x00000000 0x40000000 >; |
| 11 | }; | 11 | }; |
| 12 | 12 | ||
| 13 | pmc@7000f400 { | ||
| 14 | nvidia,invert-interrupt; | ||
| 15 | }; | ||
| 16 | |||
| 13 | i2c@7000c000 { | 17 | i2c@7000c000 { |
| 14 | clock-frequency = <400000>; | 18 | clock-frequency = <400000>; |
| 15 | 19 | ||
| 16 | codec: wm8903@1a { | 20 | wm8903: wm8903@1a { |
| 17 | compatible = "wlf,wm8903"; | 21 | compatible = "wlf,wm8903"; |
| 18 | reg = <0x1a>; | 22 | reg = <0x1a>; |
| 19 | interrupts = < 347 >; | 23 | interrupt-parent = <&gpio>; |
| 24 | interrupts = < 187 0x04 >; | ||
| 20 | 25 | ||
| 21 | gpio-controller; | 26 | gpio-controller; |
| 22 | #gpio-cells = <2>; | 27 | #gpio-cells = <2>; |
| 23 | 28 | ||
| 24 | /* 0x8000 = Not configured */ | 29 | micdet-cfg = <0>; |
| 25 | gpio-cfg = < 0x8000 0x8000 0 0x8000 0x8000 >; | 30 | micdet-delay = <100>; |
| 31 | gpio-cfg = < 0xffffffff 0xffffffff 0 0xffffffff 0xffffffff >; | ||
| 26 | }; | 32 | }; |
| 27 | }; | 33 | }; |
| 28 | 34 | ||
| @@ -38,13 +44,32 @@ · 9 unmodified lines | |||
| 38 | clock-frequency = <400000>; | 44 | clock-frequency = <400000>; |
| 39 | }; | 45 | }; |
| 40 | 46 | ||
| 41 | sound { | 47 | i2s@70002a00 { |
| 42 | compatible = "nvidia,harmony-sound", "nvidia,tegra-wm8903"; | 48 | status = "disable"; |
| 49 | }; | ||
| 43 | 50 | ||
| 44 | spkr-en-gpios = <&codec 2 0>; | 51 | sound { |
| 45 | hp-det-gpios = <&gpio 178 0>; | 52 | compatible = "nvidia,tegra-audio-wm8903-harmony", |
| 46 | int-mic-en-gpios = <&gpio 184 0>; | 53 | "nvidia,tegra-audio-wm8903"; |
| 47 | ext-mic-en-gpios = <&gpio 185 0>; | 54 | nvidia,model = "NVIDIA Tegra Harmony"; |
| 55 | |||
| 56 | nvidia,audio-routing = | ||
| 57 | "Headphone Jack", "HPOUTR", | ||
| 58 | "Headphone Jack", "HPOUTL", | ||
| 59 | "Int Spk", "ROP", | ||
| 60 | "Int Spk", "RON", | ||
| 61 | "Int Spk", "LOP", | ||
| 62 | "Int Spk", "LON", | ||
| 63 | "Mic Jack", "MICBIAS", | ||
| 64 | "IN1L", "Mic Jack"; | ||
| 65 | |||
| 66 | nvidia,i2s-controller = <&tegra_i2s1>; | ||
| 67 | nvidia,audio-codec = <&wm8903>; | ||
| 68 | |||
| 69 | nvidia,spkr-en-gpios = <&wm8903 2 0>; | ||
| 70 | nvidia,hp-det-gpios = <&gpio 178 0>; /* gpio PW2 */ | ||
| 71 | nvidia,int-mic-en-gpios = <&gpio 184 0>; /*gpio PX0 */ | ||
| 72 | nvidia,ext-mic-en-gpios = <&gpio 185 0>; /* gpio PX1 */ | ||
| 48 | }; | 73 | }; |
| 49 | 74 | ||
| 50 | serial@70006000 { | 75 | serial@70006000 { |
| @@ -12,6 +12,13 @@ · 11 unmodified lines | |||
| 12 | 12 | ||
| 13 | i2c@7000c000 { | 13 | i2c@7000c000 { |
| 14 | clock-frequency = <400000>; | 14 | clock-frequency = <400000>; |
| 15 | |||
| 16 | alc5632: alc5632@1e { | ||
| 17 | compatible = "realtek,alc5632"; | ||
| 18 | reg = <0x1e>; | ||
| 19 | gpio-controller; | ||
| 20 | #gpio-cells = <2>; | ||
| 21 | }; | ||
| 15 | }; | 22 | }; |
| 16 | 23 | ||
| 17 | i2c@7000c400 { | 24 | i2c@7000c400 { |
| @@ -35,6 +42,35 @@ · 17 unmodified lines | |||
| 35 | 42 | ||
| 36 | i2c@7000d000 { | 43 | i2c@7000d000 { |
| 37 | clock-frequency = <400000>; | 44 | clock-frequency = <400000>; |
| 45 | |||
| 46 | adt7461@4c { | ||
| 47 | compatible = "adi,adt7461"; | ||
| 48 | reg = <0x4c>; | ||
| 49 | }; | ||
| 50 | }; | ||
| 51 | |||
| 52 | i2s@70002a00 { | ||
| 53 | status = "disable"; | ||
| 54 | }; | ||
| 55 | |||
| 56 | sound { | ||
| 57 | compatible = "nvidia,tegra-audio-alc5632-paz00", | ||
| 58 | "nvidia,tegra-audio-alc5632"; | ||
| 59 | |||
| 60 | nvidia,model = "Compal PAZ00"; | ||
| 61 | |||
| 62 | nvidia,audio-routing = | ||
| 63 | "Int Spk", "SPKOUT", | ||
| 64 | "Int Spk", "SPKOUTN", | ||
| 65 | "Headset Mic", "MICBIAS1", | ||
| 66 | "MIC1", "Headset Mic", | ||
| 67 | "Headset Stereophone", "HPR", | ||
| 68 | "Headset Stereophone", "HPL", | ||
| 69 | "DMICDAT", "Digital Mic"; | ||
| 70 | |||
| 71 | nvidia,audio-codec = <&alc5632>; | ||
| 72 | nvidia,i2s-controller = <&tegra_i2s1>; | ||
| 73 | nvidia,hp-det-gpios = <&gpio 178 0>; /* gpio PW2 */ | ||
| 38 | }; | 74 | }; |
| 39 | 75 | ||
| 40 | serial@70006000 { | 76 | serial@70006000 { |
| @@ -74,4 +110,25 @@ · 33 unmodified lines | |||
| 74 | sdhci@c8000600 { | 110 | sdhci@c8000600 { |
| 75 | support-8bit; | 111 | support-8bit; |
| 76 | }; | 112 | }; |
| 113 | |||
| 114 | gpio-keys { | ||
| 115 | compatible = "gpio-keys"; | ||
| 116 | |||
| 117 | power { | ||
| 118 | label = "Power"; | ||
| 119 | gpios = <&gpio 79 1>; /* gpio PJ7, active low */ | ||
| 120 | linux,code = <116>; /* KEY_POWER */ | ||
| 121 | gpio-key,wakeup; | ||
| 122 | }; | ||
| 123 | }; | ||
| 124 | |||
| 125 | gpio-leds { | ||
| 126 | compatible = "gpio-leds"; | ||
| 127 | |||
| 128 | wifi { | ||
| 129 | label = "wifi-led"; | ||
| 130 | gpios = <&gpio 24 0>; | ||
| 131 | linux,default-trigger = "rfkill0"; | ||
| 132 | }; | ||
| 133 | }; | ||
| 77 | }; | 134 | }; |
| @@ -13,6 +13,20 @@ · 12 unmodified lines | |||
| 13 | 13 | ||
| 14 | i2c@7000c000 { | 14 | i2c@7000c000 { |
| 15 | clock-frequency = <400000>; | 15 | clock-frequency = <400000>; |
| 16 | |||
| 17 | wm8903: wm8903@1a { | ||
| 18 | compatible = "wlf,wm8903"; | ||
| 19 | reg = <0x1a>; | ||
| 20 | interrupt-parent = <&gpio>; | ||
| 21 | interrupts = < 187 0x04 >; | ||
| 22 | |||
| 23 | gpio-controller; | ||
| 24 | #gpio-cells = <2>; | ||
| 25 | |||
| 26 | micdet-cfg = <0>; | ||
| 27 | micdet-delay = <100>; | ||
| 28 | gpio-cfg = < 0xffffffff 0xffffffff 0 0xffffffff 0xffffffff >; | ||
| 29 | }; | ||
| 16 | }; | 30 | }; |
| 17 | 31 | ||
| 18 | i2c@7000c400 { | 32 | i2c@7000c400 { |
| @@ -32,6 +46,32 @@ · 13 unmodified lines | |||
| 32 | }; | 46 | }; |
| 33 | }; | 47 | }; |
| 34 | 48 | ||
| 49 | i2s@70002a00 { | ||
| 50 | status = "disable"; | ||
| 51 | }; | ||
| 52 | |||
| 53 | sound { | ||
| 54 | compatible = "nvidia,tegra-audio-wm8903-seaboard", | ||
| 55 | "nvidia,tegra-audio-wm8903"; | ||
| 56 | nvidia,model = "NVIDIA Tegra Seaboard"; | ||
| 57 | |||
| 58 | nvidia,audio-routing = | ||
| 59 | "Headphone Jack", "HPOUTR", | ||
| 60 | "Headphone Jack", "HPOUTL", | ||
| 61 | "Int Spk", "ROP", | ||
| 62 | "Int Spk", "RON", | ||
| 63 | "Int Spk", "LOP", | ||
| 64 | "Int Spk", "LON", | ||
| 65 | "Mic Jack", "MICBIAS", | ||
| 66 | "IN1R", "Mic Jack"; | ||
| 67 | |||
| 68 | nvidia,i2s-controller = <&tegra_i2s1>; | ||
| 69 | nvidia,audio-codec = <&wm8903>; | ||
| 70 | |||
| 71 | nvidia,spkr-en-gpios = <&wm8903 2 0>; | ||
| 72 | nvidia,hp-det-gpios = <&gpio 185 0>; /* gpio PX1 */ | ||
| 73 | }; | ||
| 74 | |||
| 35 | serial@70006000 { | 75 | serial@70006000 { |
| 36 | status = "disable"; | 76 | status = "disable"; |
| 37 | }; | 77 | }; |
| @@ -72,6 +112,7 @@ · 34 unmodified lines | |||
| 72 | 112 | ||
| 73 | usb@c5000000 { | 113 | usb@c5000000 { |
| 74 | nvidia,vbus-gpio = <&gpio 24 0>; /* PD0 */ | 114 | nvidia,vbus-gpio = <&gpio 24 0>; /* PD0 */ |
| 115 | dr_mode = "otg"; | ||
| 75 | }; | 116 | }; |
| 76 | 117 | ||
| 77 | gpio-keys { | 118 | gpio-keys { |
| @@ -93,4 +134,42 @@ · 15 unmodified lines | |||
| 93 | gpio-key,wakeup; | 134 | gpio-key,wakeup; |
| 94 | }; | 135 | }; |
| 95 | }; | 136 | }; |
| 137 | |||
| 138 | emc@7000f400 { | ||
| 139 | emc-table@190000 { | ||
| 140 | reg = < 190000 >; | ||
| 141 | compatible = "nvidia,tegra20-emc-table"; | ||
| 142 | clock-frequency = < 190000 >; | ||
| 143 | nvidia,emc-registers = < 0x0000000c 0x00000026 | ||
| 144 | 0x00000009 0x00000003 0x00000004 0x00000004 | ||
| 145 | 0x00000002 0x0000000c 0x00000003 0x00000003 | ||
| 146 | 0x00000002 0x00000001 0x00000004 0x00000005 | ||
| 147 | 0x00000004 0x00000009 0x0000000d 0x0000059f | ||
| 148 | 0x00000000 0x00000003 0x00000003 0x00000003 | ||
| 149 | 0x00000003 0x00000001 0x0000000b 0x000000c8 | ||
| 150 | 0x00000003 0x00000007 0x00000004 0x0000000f | ||
| 151 | 0x00000002 0x00000000 0x00000000 0x00000002 | ||
| 152 | 0x00000000 0x00000000 0x00000083 0xa06204ae | ||
| 153 | 0x007dc010 0x00000000 0x00000000 0x00000000 | ||
| 154 | 0x00000000 0x00000000 0x00000000 0x00000000 >; | ||
| 155 | }; | ||
| 156 | |||
| 157 | emc-table@380000 { | ||
| 158 | reg = < 380000 >; | ||
| 159 | compatible = "nvidia,tegra20-emc-table"; | ||
| 160 | clock-frequency = < 380000 >; | ||
| 161 | nvidia,emc-registers = < 0x00000017 0x0000004b | ||
| 162 | 0x00000012 0x00000006 0x00000004 0x00000005 | ||
| 163 | 0x00000003 0x0000000c 0x00000006 0x00000006 | ||
| 164 | 0x00000003 0x00000001 0x00000004 0x00000005 | ||
| 165 | 0x00000004 0x00000009 0x0000000d 0x00000b5f | ||
| 166 | 0x00000000 0x00000003 0x00000003 0x00000006 | ||
| 167 | 0x00000006 0x00000001 0x00000011 0x000000c8 | ||
| 168 | 0x00000003 0x0000000e 0x00000007 0x0000000f | ||
| 169 | 0x00000002 0x00000000 0x00000000 0x00000002 | ||
| 170 | 0x00000000 0x00000000 0x00000083 0xe044048b | ||
| 171 | 0x007d8010 0x00000000 0x00000000 0x00000000 | ||
| 172 | 0x00000000 0x00000000 0x00000000 0x00000000 >; | ||
| 173 | }; | ||
| 174 | }; | ||
| 96 | }; | 175 | }; |
| @@ -26,6 +26,18 @@ · 25 unmodified lines | |||
| 26 | status = "disable"; | 26 | status = "disable"; |
| 27 | }; | 27 | }; |
| 28 | 28 | ||
| 29 | i2s@70002800 { | ||
| 30 | status = "disable"; | ||
| 31 | }; | ||
| 32 | |||
| 33 | i2s@70002a00 { | ||
| 34 | status = "disable"; | ||
| 35 | }; | ||
| 36 | |||
| 37 | das@70000c00 { | ||
| 38 | status = "disable"; | ||
| 39 | }; | ||
| 40 | |||
| 29 | serial@70006000 { | 41 | serial@70006000 { |
| 30 | clock-frequency = < 216000000 >; | 42 | clock-frequency = < 216000000 >; |
| 31 | }; | 43 | }; |
| @@ -12,6 +12,20 @@ · 11 unmodified lines | |||
| 12 | 12 | ||
| 13 | i2c@7000c000 { | 13 | i2c@7000c000 { |
| 14 | clock-frequency = <400000>; | 14 | clock-frequency = <400000>; |
| 15 | |||
| 16 | wm8903: wm8903@1a { | ||
| 17 | compatible = "wlf,wm8903"; | ||
| 18 | reg = <0x1a>; | ||
| 19 | interrupt-parent = <&gpio>; | ||
| 20 | interrupts = < 187 0x04 >; | ||
| 21 | |||
| 22 | gpio-controller; | ||
| 23 | #gpio-cells = <2>; | ||
| 24 | |||
| 25 | micdet-cfg = <0>; | ||
| 26 | micdet-delay = <100>; | ||
| 27 | gpio-cfg = < 0xffffffff 0xffffffff 0 0xffffffff 0xffffffff >; | ||
| 28 | }; | ||
| 15 | }; | 29 | }; |
| 16 | 30 | ||
| 17 | i2c@7000c400 { | 31 | i2c@7000c400 { |
| @@ -26,6 +40,34 @@ · 8 unmodified lines | |||
| 26 | clock-frequency = <400000>; | 40 | clock-frequency = <400000>; |
| 27 | }; | 41 | }; |
| 28 | 42 | ||
| 43 | i2s@70002a00 { | ||
| 44 | status = "disable"; | ||
| 45 | }; | ||
| 46 | |||
| 47 | sound { | ||
| 48 | compatible = "nvidia,tegra-audio-wm8903-ventana", | ||
| 49 | "nvidia,tegra-audio-wm8903"; | ||
| 50 | nvidia,model = "NVIDIA Tegra Ventana"; | ||
| 51 | |||
| 52 | nvidia,audio-routing = | ||
| 53 | "Headphone Jack", "HPOUTR", | ||
| 54 | "Headphone Jack", "HPOUTL", | ||
| 55 | "Int Spk", "ROP", | ||
| 56 | "Int Spk", "RON", | ||
| 57 | "Int Spk", "LOP", | ||
| 58 | "Int Spk", "LON", | ||
| 59 | "Mic Jack", "MICBIAS", | ||
| 60 | "IN1L", "Mic Jack"; | ||
| 61 | |||
| 62 | nvidia,i2s-controller = <&tegra_i2s1>; | ||
| 63 | nvidia,audio-codec = <&wm8903>; | ||
| 64 | |||
| 65 | nvidia,spkr-en-gpios = <&wm8903 2 0>; | ||
| 66 | nvidia,hp-det-gpios = <&gpio 178 0>; /* gpio PW2 */ | ||
| 67 | nvidia,int-mic-en-gpios = <&gpio 184 0>; /*gpio PX0 */ | ||
| 68 | nvidia,ext-mic-en-gpios = <&gpio 185 0>; /* gpio PX1 */ | ||
| 69 | }; | ||
| 70 | |||
| 29 | serial@70006000 { | 71 | serial@70006000 { |
| 30 | status = "disable"; | 72 | status = "disable"; |
| 31 | }; | 73 | }; |
| @@ -4,6 +4,11 @@ · 3 unmodified lines | |||
| 4 | compatible = "nvidia,tegra20"; | 4 | compatible = "nvidia,tegra20"; |
| 5 | interrupt-parent = <&intc>; | 5 | interrupt-parent = <&intc>; |
| 6 | 6 | ||
| 7 | pmc@7000f400 { | ||
| 8 | compatible = "nvidia,tegra20-pmc"; | ||
| 9 | reg = <0x7000e400 0x400>; | ||
| 10 | }; | ||
| 11 | |||
| 7 | intc: interrupt-controller@50041000 { | 12 | intc: interrupt-controller@50041000 { |
| 8 | compatible = "arm,cortex-a9-gic"; | 13 | compatible = "arm,cortex-a9-gic"; |
| 9 | interrupt-controller; | 14 | interrupt-controller; |
| @@ -12,6 +17,33 @@ · 2 unmodified lines | |||
| 12 | < 0x50040100 0x0100 >; | 17 | < 0x50040100 0x0100 >; |
| 13 | }; | 18 | }; |
| 14 | 19 | ||
| 20 | pmu { | ||
| 21 | compatible = "arm,cortex-a9-pmu"; | ||
| 22 | interrupts = <0 56 0x04 | ||
| 23 | 0 57 0x04>; | ||
| 24 | }; | ||
| 25 | |||
| 26 | apbdma: dma@6000a000 { | ||
| 27 | compatible = "nvidia,tegra20-apbdma"; | ||
| 28 | reg = <0x6000a000 0x1200>; | ||
| 29 | interrupts = < 0 104 0x04 | ||
| 30 | 0 105 0x04 | ||
| 31 | 0 106 0x04 | ||
| 32 | 0 107 0x04 | ||
| 33 | 0 108 0x04 | ||
| 34 | 0 109 0x04 | ||
| 35 | 0 110 0x04 | ||
| 36 | 0 111 0x04 | ||
| 37 | 0 112 0x04 | ||
| 38 | 0 113 0x04 | ||
| 39 | 0 114 0x04 | ||
| 40 | 0 115 0x04 | ||
| 41 | 0 116 0x04 | ||
| 42 | 0 117 0x04 | ||
| 43 | 0 118 0x04 | ||
| 44 | 0 119 0x04 >; | ||
| 45 | }; | ||
| 46 | |||
| 15 | i2c@7000c000 { | 47 | i2c@7000c000 { |
| 16 | #address-cells = <1>; | 48 | #address-cells = <1>; |
| 17 | #size-cells = <0>; | 49 | #size-cells = <0>; |
| @@ -44,18 +76,18 @@ · 26 unmodified lines | |||
| 44 | interrupts = < 0 53 0x04 >; | 76 | interrupts = < 0 53 0x04 >; |
| 45 | }; | 77 | }; |
| 46 | 78 | ||
| 47 | i2s@70002800 { | 79 | tegra_i2s1: i2s@70002800 { |
| 48 | compatible = "nvidia,tegra20-i2s"; | 80 | compatible = "nvidia,tegra20-i2s"; |
| 49 | reg = <0x70002800 0x200>; | 81 | reg = <0x70002800 0x200>; |
| 50 | interrupts = < 0 13 0x04 >; | 82 | interrupts = < 0 13 0x04 >; |
| 51 | dma-channel = < 2 >; | 83 | nvidia,dma-request-selector = < &apbdma 2 >; |
| 52 | }; | 84 | }; |
| 53 | 85 | ||
| 54 | i2s@70002a00 { | 86 | tegra_i2s2: i2s@70002a00 { |
| 55 | compatible = "nvidia,tegra20-i2s"; | 87 | compatible = "nvidia,tegra20-i2s"; |
| 56 | reg = <0x70002a00 0x200>; | 88 | reg = <0x70002a00 0x200>; |
| 57 | interrupts = < 0 3 0x04 >; | 89 | interrupts = < 0 3 0x04 >; |
| 58 | dma-channel = < 1 >; | 90 | nvidia,dma-request-selector = < &apbdma 1 >; |
| 59 | }; | 91 | }; |
| 60 | 92 | ||
| 61 | das@70000c00 { | 93 | das@70000c00 { |
| @@ -75,6 +107,8 @@ · 13 unmodified lines | |||
| 75 | 0 89 0x04 >; | 107 | 0 89 0x04 >; |
| 76 | #gpio-cells = <2>; | 108 | #gpio-cells = <2>; |
| 77 | gpio-controller; | 109 | gpio-controller; |
| 110 | #interrupt-cells = <2>; | ||
| 111 | interrupt-controller; | ||
| 78 | }; | 112 | }; |
| 79 | 113 | ||
| 80 | pinmux: pinmux@70000000 { | 114 | pinmux: pinmux@70000000 { |
| @@ -120,6 +154,13 @@ · 39 unmodified lines | |||
| 120 | interrupts = < 0 91 0x04 >; | 154 | interrupts = < 0 91 0x04 >; |
| 121 | }; | 155 | }; |
| 122 | 156 | ||
| 157 | emc@7000f400 { | ||
| 158 | #address-cells = <1>; | ||
| 159 | #size-cells = <0>; | ||
| 160 | compatible = "nvidia,tegra20-emc"; | ||
| 161 | reg = <0x7000f400 0x200>; | ||
| 162 | }; | ||
| 163 | |||
| 123 | sdhci@c8000000 { | 164 | sdhci@c8000000 { |
| 124 | compatible = "nvidia,tegra20-sdhci"; | 165 | compatible = "nvidia,tegra20-sdhci"; |
| 125 | reg = <0xc8000000 0x200>; | 166 | reg = <0xc8000000 0x200>; |
| @@ -149,6 +190,7 @@ · 23 unmodified lines | |||
| 149 | reg = <0xc5000000 0x4000>; | 190 | reg = <0xc5000000 0x4000>; |
| 150 | interrupts = < 0 20 0x04 >; | 191 | interrupts = < 0 20 0x04 >; |
| 151 | phy_type = "utmi"; | 192 | phy_type = "utmi"; |
| 193 | nvidia,has-legacy-mode; | ||
| 152 | }; | 194 | }; |
| 153 | 195 | ||
| 154 | usb@c5004000 { | 196 | usb@c5004000 { |
| @@ -4,6 +4,11 @@ · 3 unmodified lines | |||
| 4 | compatible = "nvidia,tegra30"; | 4 | compatible = "nvidia,tegra30"; |
| 5 | interrupt-parent = <&intc>; | 5 | interrupt-parent = <&intc>; |
| 6 | 6 | ||
| 7 | pmc@7000f400 { | ||
| 8 | compatible = "nvidia,tegra20-pmc", "nvidia,tegra30-pmc"; | ||
| 9 | reg = <0x7000e400 0x400>; | ||
| 10 | }; | ||
| 11 | |||
| 7 | intc: interrupt-controller@50041000 { | 12 | intc: interrupt-controller@50041000 { |
| 8 | compatible = "arm,cortex-a9-gic"; | 13 | compatible = "arm,cortex-a9-gic"; |
| 9 | interrupt-controller; | 14 | interrupt-controller; |
| @@ -12,6 +17,51 @@ · 2 unmodified lines | |||
| 12 | < 0x50040100 0x0100 >; | 17 | < 0x50040100 0x0100 >; |
| 13 | }; | 18 | }; |
| 14 | 19 | ||
| 20 | pmu { | ||
| 21 | compatible = "arm,cortex-a9-pmu"; | ||
| 22 | interrupts = <0 144 0x04 | ||
| 23 | 0 145 0x04 | ||
| 24 | 0 146 0x04 | ||
| 25 | 0 147 0x04>; | ||
| 26 | }; | ||
| 27 | |||
| 28 | apbdma: dma@6000a000 { | ||
| 29 | compatible = "nvidia,tegra30-apbdma", "nvidia,tegra20-apbdma"; | ||
| 30 | reg = <0x6000a000 0x1400>; | ||
| 31 | interrupts = < 0 104 0x04 | ||
| 32 | 0 105 0x04 | ||
| 33 | 0 106 0x04 | ||
| 34 | 0 107 0x04 | ||
| 35 | 0 108 0x04 | ||
| 36 | 0 109 0x04 | ||
| 37 | 0 110 0x04 | ||
| 38 | 0 111 0x04 | ||
| 39 | 0 112 0x04 | ||
| 40 | 0 113 0x04 | ||
| 41 | 0 114 0x04 | ||
| 42 | 0 115 0x04 | ||
| 43 | 0 116 0x04 | ||
| 44 | 0 117 0x04 | ||
| 45 | 0 118 0x04 | ||
| 46 | 0 119 0x04 | ||
| 47 | 0 128 0x04 | ||
| 48 | 0 129 0x04 | ||
| 49 | 0 130 0x04 | ||
| 50 | 0 131 0x04 | ||
| 51 | 0 132 0x04 | ||
| 52 | 0 133 0x04 | ||
| 53 | 0 134 0x04 | ||
| 54 | 0 135 0x04 | ||
| 55 | 0 136 0x04 | ||
| 56 | 0 137 0x04 | ||
| 57 | 0 138 0x04 | ||
| 58 | 0 139 0x04 | ||
| 59 | 0 140 0x04 | ||
| 60 | 0 141 0x04 | ||
| 61 | 0 142 0x04 | ||
| 62 | 0 143 0x04 >; | ||
| 63 | }; | ||
| 64 | |||
| 15 | i2c@7000c000 { | 65 | i2c@7000c000 { |
| 16 | #address-cells = <1>; | 66 | #address-cells = <1>; |
| 17 | #size-cells = <0>; | 67 | #size-cells = <0>; |
| @@ -55,9 +105,18 @@ · 37 unmodified lines | |||
| 55 | gpio: gpio@6000d000 { | 105 | gpio: gpio@6000d000 { |
| 56 | compatible = "nvidia,tegra30-gpio", "nvidia,tegra20-gpio"; | 106 | compatible = "nvidia,tegra30-gpio", "nvidia,tegra20-gpio"; |
| 57 | reg = < 0x6000d000 0x1000 >; | 107 | reg = < 0x6000d000 0x1000 >; |
| 58 | interrupts = < 0 32 0x04 0 33 0x04 0 34 0x04 0 35 0x04 0 55 0x04 0 87 0x04 0 89 0x04 >; | 108 | interrupts = < 0 32 0x04 |
| 109 | 0 33 0x04 | ||
| 110 | 0 34 0x04 | ||
| 111 | 0 35 0x04 | ||
| 112 | 0 55 0x04 | ||
| 113 | 0 87 0x04 | ||
| 114 | 0 89 0x04 | ||
| 115 | 0 125 0x04 >; | ||
| 59 | #gpio-cells = <2>; | 116 | #gpio-cells = <2>; |
| 60 | gpio-controller; | 117 | gpio-controller; |
| 118 | #interrupt-cells = <2>; | ||
| 119 | interrupt-controller; | ||
| 61 | }; | 120 | }; |
| 62 | 121 | ||
| 63 | serial@70006000 { | 122 | serial@70006000 { |
| @@ -0,0 +1,96 @@ | |||
| 1 | /* | ||
| 2 | * calao-dab-mmx.dtsi - Device Tree Include file for Calao DAB-MMX Daughter Board | ||
| 3 | * | ||
| 4 | * Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | ||
| 5 | * | ||
| 6 | * Licensed under GPLv2. | ||
| 7 | */ | ||
| 8 | |||
| 9 | / { | ||
| 10 | ahb { | ||
| 11 | apb { | ||
| 12 | usart1: serial@fffb4000 { | ||
| 13 | status = "okay"; | ||
| 14 | }; | ||
| 15 | |||
| 16 | usart3: serial@fffd0000 { | ||
| 17 | status = "okay"; | ||
| 18 | }; | ||
| 19 | }; | ||
| 20 | }; | ||
| 21 | |||
| 22 | i2c-gpio@0 { | ||
| 23 | status = "okay"; | ||
| 24 | }; | ||
| 25 | |||
| 26 | leds { | ||
| 27 | compatible = "gpio-leds"; | ||
| 28 | |||
| 29 | user_led1 { | ||
| 30 | label = "user_led1"; | ||
| 31 | gpios = <&pioB 20 1>; | ||
| 32 | }; | ||
| 33 | |||
| 34 | /* | ||
| 35 | * led already used by mother board but active as high | ||
| 36 | * user_led2 { | ||
| 37 | * label = "user_led2"; | ||
| 38 | * gpios = <&pioB 21 1>; | ||
| 39 | * }; | ||
| 40 | */ | ||
| 41 | user_led3 { | ||
| 42 | label = "user_led3"; | ||
| 43 | gpios = <&pioB 22 1>; | ||
| 44 | }; | ||
| 45 | |||
| 46 | user_led4 { | ||
| 47 | label = "user_led4"; | ||
| 48 | gpios = <&pioB 23 1>; | ||
| 49 | }; | ||
| 50 | |||
| 51 | red { | ||
| 52 | label = "red"; | ||
| 53 | gpios = <&pioB 24 1>; | ||
| 54 | }; | ||
| 55 | |||
| 56 | orange { | ||
| 57 | label = "orange"; | ||
| 58 | gpios = <&pioB 30 1>; | ||
| 59 | }; | ||
| 60 | |||
| 61 | green { | ||
| 62 | label = "green"; | ||
| 63 | gpios = <&pioB 31 1>; | ||
| 64 | }; | ||
| 65 | }; | ||
| 66 | |||
| 67 | gpio_keys { | ||
| 68 | compatible = "gpio-keys"; | ||
| 69 | #address-cells = <1>; | ||
| 70 | #size-cells = <0>; | ||
| 71 | |||
| 72 | user_pb1 { | ||
| 73 | label = "user_pb1"; | ||
| 74 | gpios = <&pioB 25 1>; | ||
| 75 | linux,code = <0x100>; | ||
| 76 | }; | ||
| 77 | |||
| 78 | user_pb2 { | ||
| 79 | label = "user_pb2"; | ||
| 80 | gpios = <&pioB 13 1>; | ||
| 81 | linux,code = <0x101>; | ||
| 82 | }; | ||
| 83 | |||
| 84 | user_pb3 { | ||
| 85 | label = "user_pb3"; | ||
| 86 | gpios = <&pioA 26 1>; | ||
| 87 | linux,code = <0x102>; | ||
| 88 | }; | ||
| 89 | |||
| 90 | user_pb4 { | ||
| 91 | label = "user_pb4"; | ||
| 92 | gpios = <&pioC 9 1>; | ||
| 93 | linux,code = <0x103>; | ||
| 94 | }; | ||
| 95 | }; | ||
| 96 | }; | ||
| @@ -13,13 +13,24 @@ · 12 unmodified lines | |||
| 13 | compatible = "calao,usb-a9g20", "atmel,at91sam9g20", "atmel,at91sam9"; | 13 | compatible = "calao,usb-a9g20", "atmel,at91sam9g20", "atmel,at91sam9"; |
| 14 | 14 | ||
| 15 | chosen { | 15 | chosen { |
| 16 | bootargs = "mem=64M console=ttyS0,115200 mtdparts=atmel_nand:128k(at91bootstrap),256k(barebox)ro,128k(bareboxenv),128k(bareboxenv2),4M(kernel),120M(rootfs),-(data) root=/dev/mtdblock5 rw rootfstype=ubifs"; | 16 | bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock5 rw rootfstype=ubifs"; |
| 17 | }; | 17 | }; |
| 18 | 18 | ||
| 19 | memory@20000000 { | 19 | memory { |
| 20 | reg = <0x20000000 0x4000000>; | 20 | reg = <0x20000000 0x4000000>; |
| 21 | }; | 21 | }; |
| 22 | 22 | ||
| 23 | clocks { | ||
| 24 | #address-cells = <1>; | ||
| 25 | #size-cells = <1>; | ||
| 26 | ranges; | ||
| 27 | |||
| 28 | main_clock: clock@0 { | ||
| 29 | compatible = "atmel,osc", "fixed-clock"; | ||
| 30 | clock-frequency = <12000000>; | ||
| 31 | }; | ||
| 32 | }; | ||
| 33 | |||
| 23 | ahb { | 34 | ahb { |
| 24 | apb { | 35 | apb { |
| 25 | dbgu: serial@fffff200 { | 36 | dbgu: serial@fffff200 { |
| @@ -30,6 +41,90 @@ · 4 unmodified lines | |||
| 30 | phy-mode = "rmii"; | 41 | phy-mode = "rmii"; |
| 31 | status = "okay"; | 42 | status = "okay"; |
| 32 | }; | 43 | }; |
| 44 | |||
| 45 | usb1: gadget@fffa4000 { | ||
| 46 | atmel,vbus-gpio = <&pioC 5 0>; | ||
| 47 | status = "okay"; | ||
| 48 | }; | ||
| 49 | }; | ||
| 50 | |||
| 51 | nand0: nand@40000000 { | ||
| 52 | nand-bus-width = <8>; | ||
| 53 | nand-ecc-mode = "soft"; | ||
| 54 | nand-on-flash-bbt; | ||
| 55 | status = "okay"; | ||
| 56 | |||
| 57 | at91bootstrap@0 { | ||
| 58 | label = "at91bootstrap"; | ||
| 59 | reg = <0x0 0x20000>; | ||
| 60 | }; | ||
| 61 | |||
| 62 | barebox@20000 { | ||
| 63 | label = "barebox"; | ||
| 64 | reg = <0x20000 0x40000>; | ||
| 65 | }; | ||
| 66 | |||
| 67 | bareboxenv@60000 { | ||
| 68 | label = "bareboxenv"; | ||
| 69 | reg = <0x60000 0x20000>; | ||
| 70 | }; | ||
| 71 | |||
| 72 | bareboxenv2@80000 { | ||
| 73 | label = "bareboxenv2"; | ||
| 74 | reg = <0x80000 0x20000>; | ||
| 75 | }; | ||
| 76 | |||
| 77 | kernel@a0000 { | ||
| 78 | label = "kernel"; | ||
| 79 | reg = <0xa0000 0x400000>; | ||
| 80 | }; | ||
| 81 | |||
| 82 | rootfs@4a0000 { | ||
| 83 | label = "rootfs"; | ||
| 84 | reg = <0x4a0000 0x7800000>; | ||
| 85 | }; | ||
| 86 | |||
| 87 | data@7ca0000 { | ||
| 88 | label = "data"; | ||
| 89 | reg = <0x7ca0000 0x8360000>; | ||
| 90 | }; | ||
| 91 | }; | ||
| 92 | |||
| 93 | usb0: ohci@00500000 { | ||
| 94 | num-ports = <2>; | ||
| 95 | status = "okay"; | ||
| 96 | }; | ||
| 97 | }; | ||
| 98 | |||
| 99 | leds { | ||
| 100 | compatible = "gpio-leds"; | ||
| 101 | |||
| 102 | user_led { | ||
| 103 | label = "user_led"; | ||
| 104 | gpios = <&pioB 21 1>; | ||
| 105 | linux,default-trigger = "heartbeat"; | ||
| 106 | }; | ||
| 107 | }; | ||
| 108 | |||
| 109 | gpio_keys { | ||
| 110 | compatible = "gpio-keys"; | ||
| 111 | #address-cells = <1>; | ||
| 112 | #size-cells = <0>; | ||
| 113 | |||
| 114 | user_pb { | ||
| 115 | label = "user_pb"; | ||
| 116 | gpios = <&pioB 10 1>; | ||
| 117 | linux,code = <28>; | ||
| 118 | gpio-key,wakeup; | ||
| 119 | }; | ||
| 120 | }; | ||
| 121 | |||
| 122 | i2c@0 { | ||
| 123 | status = "okay"; | ||
| 124 | |||
| 125 | rv3029c2@56 { | ||
| 126 | compatible = "rv3029c2"; | ||
| 127 | reg = <0x56>; | ||
| 33 | }; | 128 | }; |
| 34 | }; | 129 | }; |
| 35 | }; | 130 | }; |
| @@ -0,0 +1,201 @@ | |||
| 1 | /* | ||
| 2 | * ARM Ltd. Versatile Express | ||
| 3 | * | ||
| 4 | * Motherboard Express uATX | ||
| 5 | * V2M-P1 | ||
| 6 | * | ||
| 7 | * HBI-0190D | ||
| 8 | * | ||
| 9 | * RS1 memory map ("ARM Cortex-A Series memory map" in the board's | ||
| 10 | * Technical Reference Manual) | ||
| 11 | * | ||
| 12 | * WARNING! The hardware described in this file is independent from the | ||
| 13 | * original variant (vexpress-v2m.dtsi), but there is a strong | ||
| 14 | * correspondence between the two configurations. | ||
| 15 | * | ||
| 16 | * TAKE CARE WHEN MAINTAINING THIS FILE TO PROPAGATE ANY RELEVANT | ||
| 17 | * CHANGES TO vexpress-v2m.dtsi! | ||
| 18 | */ | ||
| 19 | |||
| 20 | / { | ||
| 21 | aliases { | ||
| 22 | arm,v2m_timer = &v2m_timer01; | ||
| 23 | }; | ||
| 24 | |||
| 25 | motherboard { | ||
| 26 | compatible = "simple-bus"; | ||
| 27 | arm,v2m-memory-map = "rs1"; | ||
| 28 | #address-cells = <2>; /* SMB chipselect number and offset */ | ||
| 29 | #size-cells = <1>; | ||
| 30 | #interrupt-cells = <1>; | ||
| 31 | |||
| 32 | flash@0,00000000 { | ||
| 33 | compatible = "arm,vexpress-flash", "cfi-flash"; | ||
| 34 | reg = <0 0x00000000 0x04000000>, | ||
| 35 | <4 0x00000000 0x04000000>; | ||
| 36 | bank-width = <4>; | ||
| 37 | }; | ||
| 38 | |||
| 39 | psram@1,00000000 { | ||
| 40 | compatible = "arm,vexpress-psram", "mtd-ram"; | ||
| 41 | reg = <1 0x00000000 0x02000000>; | ||
| 42 | bank-width = <4>; | ||
| 43 | }; | ||
| 44 | |||
| 45 | vram@2,00000000 { | ||
| 46 | compatible = "arm,vexpress-vram"; | ||
| 47 | reg = <2 0x00000000 0x00800000>; | ||
| 48 | }; | ||
| 49 | |||
| 50 | ethernet@2,02000000 { | ||
| 51 | compatible = "smsc,lan9118", "smsc,lan9115"; | ||
| 52 | reg = <2 0x02000000 0x10000>; | ||
| 53 | interrupts = <15>; | ||
| 54 | phy-mode = "mii"; | ||
| 55 | reg-io-width = <4>; | ||
| 56 | smsc,irq-active-high; | ||
| 57 | smsc,irq-push-pull; | ||
| 58 | }; | ||
| 59 | |||
| 60 | usb@2,03000000 { | ||
| 61 | compatible = "nxp,usb-isp1761"; | ||
| 62 | reg = <2 0x03000000 0x20000>; | ||
| 63 | interrupts = <16>; | ||
| 64 | port1-otg; | ||
| 65 | }; | ||
| 66 | |||
| 67 | iofpga@3,00000000 { | ||
| 68 | compatible = "arm,amba-bus", "simple-bus"; | ||
| 69 | #address-cells = <1>; | ||
| 70 | #size-cells = <1>; | ||
| 71 | ranges = <0 3 0 0x200000>; | ||
| 72 | |||
| 73 | sysreg@010000 { | ||
| 74 | compatible = "arm,vexpress-sysreg"; | ||
| 75 | reg = <0x010000 0x1000>; | ||
| 76 | }; | ||
| 77 | |||
| 78 | sysctl@020000 { | ||
| 79 | compatible = "arm,sp810", "arm,primecell"; | ||
| 80 | reg = <0x020000 0x1000>; | ||
| 81 | }; | ||
| 82 | |||
| 83 | /* PCI-E I2C bus */ | ||
| 84 | v2m_i2c_pcie: i2c@030000 { | ||
| 85 | compatible = "arm,versatile-i2c"; | ||
| 86 | reg = <0x030000 0x1000>; | ||
| 87 | |||
| 88 | #address-cells = <1>; | ||
| 89 | #size-cells = <0>; | ||
| 90 | |||
| 91 | pcie-switch@60 { | ||
| 92 | compatible = "idt,89hpes32h8"; | ||
| 93 | reg = <0x60>; | ||
| 94 | }; | ||
| 95 | }; | ||
| 96 | |||
| 97 | aaci@040000 { | ||
| 98 | compatible = "arm,pl041", "arm,primecell"; | ||
| 99 | reg = <0x040000 0x1000>; | ||
| 100 | interrupts = <11>; | ||
| 101 | }; | ||
| 102 | |||
| 103 | mmci@050000 { | ||
| 104 | compatible = "arm,pl180", "arm,primecell"; | ||
| 105 | reg = <0x050000 0x1000>; | ||
| 106 | interrupts = <9 10>; | ||
| 107 | }; | ||
| 108 | |||
| 109 | kmi@060000 { | ||
| 110 | compatible = "arm,pl050", "arm,primecell"; | ||
| 111 | reg = <0x060000 0x1000>; | ||
| 112 | interrupts = <12>; | ||
| 113 | }; | ||
| 114 | |||
| 115 | kmi@070000 { | ||
| 116 | compatible = "arm,pl050", "arm,primecell"; | ||
| 117 | reg = <0x070000 0x1000>; | ||
| 118 | interrupts = <13>; | ||
| 119 | }; | ||
| 120 | |||
| 121 | v2m_serial0: uart@090000 { | ||
| 122 | compatible = "arm,pl011", "arm,primecell"; | ||
| 123 | reg = <0x090000 0x1000>; | ||
| 124 | interrupts = <5>; | ||
| 125 | }; | ||
| 126 | |||
| 127 | v2m_serial1: uart@0a0000 { | ||
| 128 | compatible = "arm,pl011", "arm,primecell"; | ||
| 129 | reg = <0x0a0000 0x1000>; | ||
| 130 | interrupts = <6>; | ||
| 131 | }; | ||
| 132 | |||
| 133 | v2m_serial2: uart@0b0000 { | ||
| 134 | compatible = "arm,pl011", "arm,primecell"; | ||
| 135 | reg = <0x0b0000 0x1000>; | ||
| 136 | interrupts = <7>; | ||
| 137 | }; | ||
| 138 | |||
| 139 | v2m_serial3: uart@0c0000 { | ||
| 140 | compatible = "arm,pl011", "arm,primecell"; | ||
| 141 | reg = <0x0c0000 0x1000>; | ||
| 142 | interrupts = <8>; | ||
| 143 | }; | ||
| 144 | |||
| 145 | wdt@0f0000 { | ||
| 146 | compatible = "arm,sp805", "arm,primecell"; | ||
| 147 | reg = <0x0f0000 0x1000>; | ||
| 148 | interrupts = <0>; | ||
| 149 | }; | ||
| 150 | |||
| 151 | v2m_timer01: timer@110000 { | ||
| 152 | compatible = "arm,sp804", "arm,primecell"; | ||
| 153 | reg = <0x110000 0x1000>; | ||
| 154 | interrupts = <2>; | ||
| 155 | }; | ||
| 156 | |||
| 157 | v2m_timer23: timer@120000 { | ||
| 158 | compatible = "arm,sp804", "arm,primecell"; | ||
| 159 | reg = <0x120000 0x1000>; | ||
| 160 | }; | ||
| 161 | |||
| 162 | /* DVI I2C bus */ | ||
| 163 | v2m_i2c_dvi: i2c@160000 { | ||
| 164 | compatible = "arm,versatile-i2c"; | ||
| 165 | reg = <0x160000 0x1000>; | ||
| 166 | |||
| 167 | #address-cells = <1>; | ||
| 168 | #size-cells = <0>; | ||
| 169 | |||
| 170 | dvi-transmitter@39 { | ||
| 171 | compatible = "sil,sii9022-tpi", "sil,sii9022"; | ||
| 172 | reg = <0x39>; | ||
| 173 | }; | ||
| 174 | |||
| 175 | dvi-transmitter@60 { | ||
| 176 | compatible = "sil,sii9022-cpi", "sil,sii9022"; | ||
| 177 | reg = <0x60>; | ||
| 178 | }; | ||
| 179 | }; | ||
| 180 | |||
| 181 | rtc@170000 { | ||
| 182 | compatible = "arm,pl031", "arm,primecell"; | ||
| 183 | reg = <0x170000 0x1000>; | ||
| 184 | interrupts = <4>; | ||
| 185 | }; | ||
| 186 | |||
| 187 | compact-flash@1a0000 { | ||
| 188 | compatible = "arm,vexpress-cf", "ata-generic"; | ||
| 189 | reg = <0x1a0000 0x100 | ||
| 190 | 0x1a0100 0xf00>; | ||
| 191 | reg-shift = <2>; | ||
| 192 | }; | ||
| 193 | |||
| 194 | clcd@1f0000 { | ||
| 195 | compatible = "arm,pl111", "arm,primecell"; | ||
| 196 | reg = <0x1f0000 0x1000>; | ||
| 197 | interrupts = <14>; | ||
| 198 | }; | ||
| 199 | }; | ||
| 200 | }; | ||
| 201 | }; | ||
| @@ -0,0 +1,200 @@ | |||
| 1 | /* | ||
| 2 | * ARM Ltd. Versatile Express | ||
| 3 | * | ||
| 4 | * Motherboard Express uATX | ||
| 5 | * V2M-P1 | ||
| 6 | * | ||
| 7 | * HBI-0190D | ||
| 8 | * | ||
| 9 | * Original memory map ("Legacy memory map" in the board's | ||
| 10 | * Technical Reference Manual) | ||
| 11 | * | ||
| 12 | * WARNING! The hardware described in this file is independent from the | ||
| 13 | * RS1 variant (vexpress-v2m-rs1.dtsi), but there is a strong | ||
| 14 | * correspondence between the two configurations. | ||
| 15 | * | ||
| 16 | * TAKE CARE WHEN MAINTAINING THIS FILE TO PROPAGATE ANY RELEVANT | ||
| 17 | * CHANGES TO vexpress-v2m-rs1.dtsi! | ||
| 18 | */ | ||
| 19 | |||
| 20 | / { | ||
| 21 | aliases { | ||
| 22 | arm,v2m_timer = &v2m_timer01; | ||
| 23 | }; | ||
| 24 | |||
| 25 | motherboard { | ||
| 26 | compatible = "simple-bus"; | ||
| 27 | #address-cells = <2>; /* SMB chipselect number and offset */ | ||
| 28 | #size-cells = <1>; | ||
| 29 | #interrupt-cells = <1>; | ||
| 30 | |||
| 31 | flash@0,00000000 { | ||
| 32 | compatible = "arm,vexpress-flash", "cfi-flash"; | ||
| 33 | reg = <0 0x00000000 0x04000000>, | ||
| 34 | <1 0x00000000 0x04000000>; | ||
| 35 | bank-width = <4>; | ||
| 36 | }; | ||
| 37 | |||
| 38 | psram@2,00000000 { | ||
| 39 | compatible = "arm,vexpress-psram", "mtd-ram"; | ||
| 40 | reg = <2 0x00000000 0x02000000>; | ||
| 41 | bank-width = <4>; | ||
| 42 | }; | ||
| 43 | |||
| 44 | vram@3,00000000 { | ||
| 45 | compatible = "arm,vexpress-vram"; | ||
| 46 | reg = <3 0x00000000 0x00800000>; | ||
| 47 | }; | ||
| 48 | |||
| 49 | ethernet@3,02000000 { | ||
| 50 | compatible = "smsc,lan9118", "smsc,lan9115"; | ||
| 51 | reg = <3 0x02000000 0x10000>; | ||
| 52 | interrupts = <15>; | ||
| 53 | phy-mode = "mii"; | ||
| 54 | reg-io-width = <4>; | ||
| 55 | smsc,irq-active-high; | ||
| 56 | smsc,irq-push-pull; | ||
| 57 | }; | ||
| 58 | |||
| 59 | usb@3,03000000 { | ||
| 60 | compatible = "nxp,usb-isp1761"; | ||
| 61 | reg = <3 0x03000000 0x20000>; | ||
| 62 | interrupts = <16>; | ||
| 63 | port1-otg; | ||
| 64 | }; | ||
| 65 | |||
| 66 | iofpga@7,00000000 { | ||
| 67 | compatible = "arm,amba-bus", "simple-bus"; | ||
| 68 | #address-cells = <1>; | ||
| 69 | #size-cells = <1>; | ||
| 70 | ranges = <0 7 0 0x20000>; | ||
| 71 | |||
| 72 | sysreg@00000 { | ||
| 73 | compatible = "arm,vexpress-sysreg"; | ||
| 74 | reg = <0x00000 0x1000>; | ||
| 75 | }; | ||
| 76 | |||
| 77 | sysctl@01000 { | ||
| 78 | compatible = "arm,sp810", "arm,primecell"; | ||
| 79 | reg = <0x01000 0x1000>; | ||
| 80 | }; | ||
| 81 | |||
| 82 | /* PCI-E I2C bus */ | ||
| 83 | v2m_i2c_pcie: i2c@02000 { | ||
| 84 | compatible = "arm,versatile-i2c"; | ||
| 85 | reg = <0x02000 0x1000>; | ||
| 86 | |||
| 87 | #address-cells = <1>; | ||
| 88 | #size-cells = <0>; | ||
| 89 | |||
| 90 | pcie-switch@60 { | ||
| 91 | compatible = "idt,89hpes32h8"; | ||
| 92 | reg = <0x60>; | ||
| 93 | }; | ||
| 94 | }; | ||
| 95 | |||
| 96 | aaci@04000 { | ||
| 97 | compatible = "arm,pl041", "arm,primecell"; | ||
| 98 | reg = <0x04000 0x1000>; | ||
| 99 | interrupts = <11>; | ||
| 100 | }; | ||
| 101 | |||
| 102 | mmci@05000 { | ||
| 103 | compatible = "arm,pl180", "arm,primecell"; | ||
| 104 | reg = <0x05000 0x1000>; | ||
| 105 | interrupts = <9 10>; | ||
| 106 | }; | ||
| 107 | |||
| 108 | kmi@06000 { | ||
| 109 | compatible = "arm,pl050", "arm,primecell"; | ||
| 110 | reg = <0x06000 0x1000>; | ||
| 111 | interrupts = <12>; | ||
| 112 | }; | ||
| 113 | |||
| 114 | kmi@07000 { | ||
| 115 | compatible = "arm,pl050", "arm,primecell"; | ||
| 116 | reg = <0x07000 0x1000>; | ||
| 117 | interrupts = <13>; | ||
| 118 | }; | ||
| 119 | |||
| 120 | v2m_serial0: uart@09000 { | ||
| 121 | compatible = "arm,pl011", "arm,primecell"; | ||
| 122 | reg = <0x09000 0x1000>; | ||
| 123 | interrupts = <5>; | ||
| 124 | }; | ||
| 125 | |||
| 126 | v2m_serial1: uart@0a000 { | ||
| 127 | compatible = "arm,pl011", "arm,primecell"; | ||
| 128 | reg = <0x0a000 0x1000>; | ||
| 129 | interrupts = <6>; | ||
| 130 | }; | ||
| 131 | |||
| 132 | v2m_serial2: uart@0b000 { | ||
| 133 | compatible = "arm,pl011", "arm,primecell"; | ||
| 134 | reg = <0x0b000 0x1000>; | ||
| 135 | interrupts = <7>; | ||
| 136 | }; | ||
| 137 | |||
| 138 | v2m_serial3: uart@0c000 { | ||
| 139 | compatible = "arm,pl011", "arm,primecell"; | ||
| 140 | reg = <0x0c000 0x1000>; | ||
| 141 | interrupts = <8>; | ||
| 142 | }; | ||
| 143 | |||
| 144 | wdt@0f000 { | ||
| 145 | compatible = "arm,sp805", "arm,primecell"; | ||
| 146 | reg = <0x0f000 0x1000>; | ||
| 147 | interrupts = <0>; | ||
| 148 | }; | ||
| 149 | |||
| 150 | v2m_timer01: timer@11000 { | ||
| 151 | compatible = "arm,sp804", "arm,primecell"; | ||
| 152 | reg = <0x11000 0x1000>; | ||
| 153 | interrupts = <2>; | ||
| 154 | }; | ||
| 155 | |||
| 156 | v2m_timer23: timer@12000 { | ||
| 157 | compatible = "arm,sp804", "arm,primecell"; | ||
| 158 | reg = <0x12000 0x1000>; | ||
| 159 | }; | ||
| 160 | |||
| 161 | /* DVI I2C bus */ | ||
| 162 | v2m_i2c_dvi: i2c@16000 { | ||
| 163 | compatible = "arm,versatile-i2c"; | ||
| 164 | reg = <0x16000 0x1000>; | ||
| 165 | |||
| 166 | #address-cells = <1>; | ||
| 167 | #size-cells = <0>; | ||
| 168 | |||
| 169 | dvi-transmitter@39 { | ||
| 170 | compatible = "sil,sii9022-tpi", "sil,sii9022"; | ||
| 171 | reg = <0x39>; | ||
| 172 | }; | ||
| 173 | |||
| 174 | dvi-transmitter@60 { | ||
| 175 | compatible = "sil,sii9022-cpi", "sil,sii9022"; | ||
| 176 | reg = <0x60>; | ||
| 177 | }; | ||
| 178 | }; | ||
| 179 | |||
| 180 | rtc@17000 { | ||
| 181 | compatible = "arm,pl031", "arm,primecell"; | ||
| 182 | reg = <0x17000 0x1000>; | ||
| 183 | interrupts = <4>; | ||
| 184 | }; | ||
| 185 | |||
| 186 | compact-flash@1a000 { | ||
| 187 | compatible = "arm,vexpress-cf", "ata-generic"; | ||
| 188 | reg = <0x1a000 0x100 | ||
| 189 | 0x1a100 0xf00>; | ||
| 190 | reg-shift = <2>; | ||
| 191 | }; | ||
| 192 | |||
| 193 | clcd@1f000 { | ||
| 194 | compatible = "arm,pl111", "arm,primecell"; | ||
| 195 | reg = <0x1f000 0x1000>; | ||
| 196 | interrupts = <14>; | ||
| 197 | }; | ||
| 198 | }; | ||
| 199 | }; | ||
| 200 | }; | ||
| @@ -0,0 +1,157 @@ | |||
| 1 | /* | ||
| 2 | * ARM Ltd. Versatile Express | ||
| 3 | * | ||
| 4 | * CoreTile Express A15x2 (version with Test Chip 1) | ||
| 5 | * Cortex-A15 MPCore (V2P-CA15) | ||
| 6 | * | ||
| 7 | * HBI-0237A | ||
| 8 | */ | ||
| 9 | |||
| 10 | /dts-v1/; | ||
| 11 | |||
| 12 | / { | ||
| 13 | model = "V2P-CA15"; | ||
| 14 | arm,hbi = <0x237>; | ||
| 15 | compatible = "arm,vexpress,v2p-ca15,tc1", "arm,vexpress,v2p-ca15", "arm,vexpress"; | ||
| 16 | interrupt-parent = <&gic>; | ||
| 17 | #address-cells = <1>; | ||
| 18 | #size-cells = <1>; | ||
| 19 | |||
| 20 | chosen { }; | ||
| 21 | |||
| 22 | aliases { | ||
| 23 | serial0 = &v2m_serial0; | ||
| 24 | serial1 = &v2m_serial1; | ||
| 25 | serial2 = &v2m_serial2; | ||
| 26 | serial3 = &v2m_serial3; | ||
| 27 | i2c0 = &v2m_i2c_dvi; | ||
| 28 | i2c1 = &v2m_i2c_pcie; | ||
| 29 | }; | ||
| 30 | |||
| 31 | cpus { | ||
| 32 | #address-cells = <1>; | ||
| 33 | #size-cells = <0>; | ||
| 34 | |||
| 35 | cpu@0 { | ||
| 36 | device_type = "cpu"; | ||
| 37 | compatible = "arm,cortex-a15"; | ||
| 38 | reg = <0>; | ||
| 39 | }; | ||
| 40 | |||
| 41 | cpu@1 { | ||
| 42 | device_type = "cpu"; | ||
| 43 | compatible = "arm,cortex-a15"; | ||
| 44 | reg = <1>; | ||
| 45 | }; | ||
| 46 | }; | ||
| 47 | |||
| 48 | memory@80000000 { | ||
| 49 | device_type = "memory"; | ||
| 50 | reg = <0x80000000 0x40000000>; | ||
| 51 | }; | ||
| 52 | |||
| 53 | hdlcd@2b000000 { | ||
| 54 | compatible = "arm,hdlcd"; | ||
| 55 | reg = <0x2b000000 0x1000>; | ||
| 56 | interrupts = <0 85 4>; | ||
| 57 | }; | ||
| 58 | |||
| 59 | memory-controller@2b0a0000 { | ||
| 60 | compatible = "arm,pl341", "arm,primecell"; | ||
| 61 | reg = <0x2b0a0000 0x1000>; | ||
| 62 | }; | ||
| 63 | |||
| 64 | wdt@2b060000 { | ||
| 65 | compatible = "arm,sp805", "arm,primecell"; | ||
| 66 | reg = <0x2b060000 0x1000>; | ||
| 67 | interrupts = <98>; | ||
| 68 | }; | ||
| 69 | |||
| 70 | gic: interrupt-controller@2c001000 { | ||
| 71 | compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; | ||
| 72 | #interrupt-cells = <3>; | ||
| 73 | #address-cells = <0>; | ||
| 74 | interrupt-controller; | ||
| 75 | reg = <0x2c001000 0x1000>, | ||
| 76 | <0x2c002000 0x100>; | ||
| 77 | }; | ||
| 78 | |||
| 79 | memory-controller@7ffd0000 { | ||
| 80 | compatible = "arm,pl354", "arm,primecell"; | ||
| 81 | reg = <0x7ffd0000 0x1000>; | ||
| 82 | interrupts = <0 86 4>, | ||
| 83 | <0 87 4>; | ||
| 84 | }; | ||
| 85 | |||
| 86 | dma@7ffb0000 { | ||
| 87 | compatible = "arm,pl330", "arm,primecell"; | ||
| 88 | reg = <0x7ffb0000 0x1000>; | ||
| 89 | interrupts = <0 92 4>, | ||
| 90 | <0 88 4>, | ||
| 91 | <0 89 4>, | ||
| 92 | <0 90 4>, | ||
| 93 | <0 91 4>; | ||
| 94 | }; | ||
| 95 | |||
| 96 | pmu { | ||
| 97 | compatible = "arm,cortex-a15-pmu", "arm,cortex-a9-pmu"; | ||
| 98 | interrupts = <0 68 4>, | ||
| 99 | <0 69 4>; | ||
| 100 | }; | ||
| 101 | |||
| 102 | motherboard { | ||
| 103 | ranges = <0 0 0x08000000 0x04000000>, | ||
| 104 | <1 0 0x14000000 0x04000000>, | ||
| 105 | <2 0 0x18000000 0x04000000>, | ||
| 106 | <3 0 0x1c000000 0x04000000>, | ||
| 107 | <4 0 0x0c000000 0x04000000>, | ||
| 108 | <5 0 0x10000000 0x04000000>; | ||
| 109 | |||
| 110 | interrupt-map-mask = <0 0 63>; | ||
| 111 | interrupt-map = <0 0 0 &gic 0 0 4>, | ||
| 112 | <0 0 1 &gic 0 1 4>, | ||
| 113 | <0 0 2 &gic 0 2 4>, | ||
| 114 | <0 0 3 &gic 0 3 4>, | ||
| 115 | <0 0 4 &gic 0 4 4>, | ||
| 116 | <0 0 5 &gic 0 5 4>, | ||
| 117 | <0 0 6 &gic 0 6 4>, | ||
| 118 | <0 0 7 &gic 0 7 4>, | ||
| 119 | <0 0 8 &gic 0 8 4>, | ||
| 120 | <0 0 9 &gic 0 9 4>, | ||
| 121 | <0 0 10 &gic 0 10 4>, | ||
| 122 | <0 0 11 &gic 0 11 4>, | ||
| 123 | <0 0 12 &gic 0 12 4>, | ||
| 124 | <0 0 13 &gic 0 13 4>, | ||
| 125 | <0 0 14 &gic 0 14 4>, | ||
| 126 | <0 0 15 &gic 0 15 4>, | ||
| 127 | <0 0 16 &gic 0 16 4>, | ||
| 128 | <0 0 17 &gic 0 17 4>, | ||
| 129 | <0 0 18 &gic 0 18 4>, | ||
| 130 | <0 0 19 &gic 0 19 4>, | ||
| 131 | <0 0 20 &gic 0 20 4>, | ||
| 132 | <0 0 21 &gic 0 21 4>, | ||
| 133 | <0 0 22 &gic 0 22 4>, | ||
| 134 | <0 0 23 &gic 0 23 4>, | ||
| 135 | <0 0 24 &gic 0 24 4>, | ||
| 136 | <0 0 25 &gic 0 25 4>, | ||
| 137 | <0 0 26 &gic 0 26 4>, | ||
| 138 | <0 0 27 &gic 0 27 4>, | ||
| 139 | <0 0 28 &gic 0 28 4>, | ||
| 140 | <0 0 29 &gic 0 29 4>, | ||
| 141 | <0 0 30 &gic 0 30 4>, | ||
| 142 | <0 0 31 &gic 0 31 4>, | ||
| 143 | <0 0 32 &gic 0 32 4>, | ||
| 144 | <0 0 33 &gic 0 33 4>, | ||
| 145 | <0 0 34 &gic 0 34 4>, | ||
| 146 | <0 0 35 &gic 0 35 4>, | ||
| 147 | <0 0 36 &gic 0 36 4>, | ||
| 148 | <0 0 37 &gic 0 37 4>, | ||
| 149 | <0 0 38 &gic 0 38 4>, | ||
| 150 | <0 0 39 &gic 0 39 4>, | ||
| 151 | <0 0 40 &gic 0 40 4>, | ||
| 152 | <0 0 41 &gic 0 41 4>, | ||
| 153 | <0 0 42 &gic 0 42 4>; | ||
| 154 | }; | ||
| 155 | }; | ||
| 156 | |||
| 157 | /include/ "vexpress-v2m-rs1.dtsi" | ||
| @@ -0,0 +1,162 @@ | |||
| 1 | /* | ||
| 2 | * ARM Ltd. Versatile Express | ||
| 3 | * | ||
| 4 | * CoreTile Express A5x2 | ||
| 5 | * Cortex-A5 MPCore (V2P-CA5s) | ||
| 6 | * | ||
| 7 | * HBI-0225B | ||
| 8 | */ | ||
| 9 | |||
| 10 | /dts-v1/; | ||
| 11 | |||
| 12 | / { | ||
| 13 | model = "V2P-CA5s"; | ||
| 14 | arm,hbi = <0x225>; | ||
| 15 | compatible = "arm,vexpress,v2p-ca5s", "arm,vexpress"; | ||
| 16 | interrupt-parent = <&gic>; | ||
| 17 | #address-cells = <1>; | ||
| 18 | #size-cells = <1>; | ||
| 19 | |||
| 20 | chosen { }; | ||
| 21 | |||
| 22 | aliases { | ||
| 23 | serial0 = &v2m_serial0; | ||
| 24 | serial1 = &v2m_serial1; | ||
| 25 | serial2 = &v2m_serial2; | ||
| 26 | serial3 = &v2m_serial3; | ||
| 27 | i2c0 = &v2m_i2c_dvi; | ||
| 28 | i2c1 = &v2m_i2c_pcie; | ||
| 29 | }; | ||
| 30 | |||
| 31 | cpus { | ||
| 32 | #address-cells = <1>; | ||
| 33 | #size-cells = <0>; | ||
| 34 | |||
| 35 | cpu@0 { | ||
| 36 | device_type = "cpu"; | ||
| 37 | compatible = "arm,cortex-a5"; | ||
| 38 | reg = <0>; | ||
| 39 | next-level-cache = <&L2>; | ||
| 40 | }; | ||
| 41 | |||
| 42 | cpu@1 { | ||
| 43 | device_type = "cpu"; | ||
| 44 | compatible = "arm,cortex-a5"; | ||
| 45 | reg = <1>; | ||
| 46 | next-level-cache = <&L2>; | ||
| 47 | }; | ||
| 48 | }; | ||
| 49 | |||
| 50 | memory@80000000 { | ||
| 51 | device_type = "memory"; | ||
| 52 | reg = <0x80000000 0x40000000>; | ||
| 53 | }; | ||
| 54 | |||
| 55 | hdlcd@2a110000 { | ||
| 56 | compatible = "arm,hdlcd"; | ||
| 57 | reg = <0x2a110000 0x1000>; | ||
| 58 | interrupts = <0 85 4>; | ||
| 59 | }; | ||
| 60 | |||
| 61 | memory-controller@2a150000 { | ||
| 62 | compatible = "arm,pl341", "arm,primecell"; | ||
| 63 | reg = <0x2a150000 0x1000>; | ||
| 64 | }; | ||
| 65 | |||
| 66 | memory-controller@2a190000 { | ||
| 67 | compatible = "arm,pl354", "arm,primecell"; | ||
| 68 | reg = <0x2a190000 0x1000>; | ||
| 69 | interrupts = <0 86 4>, | ||
| 70 | <0 87 4>; | ||
| 71 | }; | ||
| 72 | |||
| 73 | scu@2c000000 { | ||
| 74 | compatible = "arm,cortex-a5-scu"; | ||
| 75 | reg = <0x2c000000 0x58>; | ||
| 76 | }; | ||
| 77 | |||
| 78 | timer@2c000600 { | ||
| 79 | compatible = "arm,cortex-a5-twd-timer"; | ||
| 80 | reg = <0x2c000600 0x38>; | ||
| 81 | interrupts = <1 2 0x304>, | ||
| 82 | <1 3 0x304>; | ||
| 83 | }; | ||
| 84 | |||
| 85 | gic: interrupt-controller@2c001000 { | ||
| 86 | compatible = "arm,corex-a5-gic", "arm,cortex-a9-gic"; | ||
| 87 | #interrupt-cells = <3>; | ||
| 88 | #address-cells = <0>; | ||
| 89 | interrupt-controller; | ||
| 90 | reg = <0x2c001000 0x1000>, | ||
| 91 | <0x2c000100 0x100>; | ||
| 92 | }; | ||
| 93 | |||
| 94 | L2: cache-controller@2c0f0000 { | ||
| 95 | compatible = "arm,pl310-cache"; | ||
| 96 | reg = <0x2c0f0000 0x1000>; | ||
| 97 | interrupts = <0 84 4>; | ||
| 98 | cache-level = <2>; | ||
| 99 | }; | ||
| 100 | |||
| 101 | pmu { | ||
| 102 | compatible = "arm,cortex-a5-pmu", "arm,cortex-a9-pmu"; | ||
| 103 | interrupts = <0 68 4>, | ||
| 104 | <0 69 4>; | ||
| 105 | }; | ||
| 106 | |||
| 107 | motherboard { | ||
| 108 | ranges = <0 0 0x08000000 0x04000000>, | ||
| 109 | <1 0 0x14000000 0x04000000>, | ||
| 110 | <2 0 0x18000000 0x04000000>, | ||
| 111 | <3 0 0x1c000000 0x04000000>, | ||
| 112 | <4 0 0x0c000000 0x04000000>, | ||
| 113 | <5 0 0x10000000 0x04000000>; | ||
| 114 | |||
| 115 | interrupt-map-mask = <0 0 63>; | ||
| 116 | interrupt-map = <0 0 0 &gic 0 0 4>, | ||
| 117 | <0 0 1 &gic 0 1 4>, | ||
| 118 | <0 0 2 &gic 0 2 4>, | ||
| 119 | <0 0 3 &gic 0 3 4>, | ||
| 120 | <0 0 4 &gic 0 4 4>, | ||
| 121 | <0 0 5 &gic 0 5 4>, | ||
| 122 | <0 0 6 &gic 0 6 4>, | ||
| 123 | <0 0 7 &gic 0 7 4>, | ||
| 124 | <0 0 8 &gic 0 8 4>, | ||
| 125 | <0 0 9 &gic 0 9 4>, | ||
| 126 | <0 0 10 &gic 0 10 4>, | ||
| 127 | <0 0 11 &gic 0 11 4>, | ||
| 128 | <0 0 12 &gic 0 12 4>, | ||
| 129 | <0 0 13 &gic 0 13 4>, | ||
| 130 | <0 0 14 &gic 0 14 4>, | ||
| 131 | <0 0 15 &gic 0 15 4>, | ||
| 132 | <0 0 16 &gic 0 16 4>, | ||
| 133 | <0 0 17 &gic 0 17 4>, | ||
| 134 | <0 0 18 &gic 0 18 4>, | ||
| 135 | <0 0 19 &gic 0 19 4>, | ||
| 136 | <0 0 20 &gic 0 20 4>, | ||
| 137 | <0 0 21 &gic 0 21 4>, | ||
| 138 | <0 0 22 &gic 0 22 4>, | ||
| 139 | <0 0 23 &gic 0 23 4>, | ||
| 140 | <0 0 24 &gic 0 24 4>, | ||
| 141 | <0 0 25 &gic 0 25 4>, | ||
| 142 | <0 0 26 &gic 0 26 4>, | ||
| 143 | <0 0 27 &gic 0 27 4>, | ||
| 144 | <0 0 28 &gic 0 28 4>, | ||
| 145 | <0 0 29 &gic 0 29 4>, | ||
| 146 | <0 0 30 &gic 0 30 4>, | ||
| 147 | <0 0 31 &gic 0 31 4>, | ||
| 148 | <0 0 32 &gic 0 32 4>, | ||
| 149 | <0 0 33 &gic 0 33 4>, | ||
| 150 | <0 0 34 &gic 0 34 4>, | ||
| 151 | <0 0 35 &gic 0 35 4>, | ||
| 152 | <0 0 36 &gic 0 36 4>, | ||
| 153 | <0 0 37 &gic 0 37 4>, | ||
| 154 | <0 0 38 &gic 0 38 4>, | ||
| 155 | <0 0 39 &gic 0 39 4>, | ||
| 156 | <0 0 40 &gic 0 40 4>, | ||
| 157 | <0 0 41 &gic 0 41 4>, | ||
| 158 | <0 0 42 &gic 0 42 4>; | ||
| 159 | }; | ||
| 160 | }; | ||
| 161 | |||
| 162 | /include/ "vexpress-v2m-rs1.dtsi" | ||
| @@ -0,0 +1,192 @@ | |||
| 1 | /* | ||
| 2 | * ARM Ltd. Versatile Express | ||
| 3 | * | ||
| 4 | * CoreTile Express A9x4 | ||
| 5 | * Cortex-A9 MPCore (V2P-CA9) | ||
| 6 | * | ||
| 7 | * HBI-0191B | ||
| 8 | */ | ||
| 9 | |||
| 10 | /dts-v1/; | ||
| 11 | |||
| 12 | / { | ||
| 13 | model = "V2P-CA9"; | ||
| 14 | arm,hbi = <0x191>; | ||
| 15 | compatible = "arm,vexpress,v2p-ca9", "arm,vexpress"; | ||
| 16 | interrupt-parent = <&gic>; | ||
| 17 | #address-cells = <1>; | ||
| 18 | #size-cells = <1>; | ||
| 19 | |||
| 20 | chosen { }; | ||
| 21 | |||
| 22 | aliases { | ||
| 23 | serial0 = &v2m_serial0; | ||
| 24 | serial1 = &v2m_serial1; | ||
| 25 | serial2 = &v2m_serial2; | ||
| 26 | serial3 = &v2m_serial3; | ||
| 27 | i2c0 = &v2m_i2c_dvi; | ||
| 28 | i2c1 = &v2m_i2c_pcie; | ||
| 29 | }; | ||
| 30 | |||
| 31 | cpus { | ||
| 32 | #address-cells = <1>; | ||
| 33 | #size-cells = <0>; | ||
| 34 | |||
| 35 | cpu@0 { | ||
| 36 | device_type = "cpu"; | ||
| 37 | compatible = "arm,cortex-a9"; | ||
| 38 | reg = <0>; | ||
| 39 | next-level-cache = <&L2>; | ||
| 40 | }; | ||
| 41 | |||
| 42 | cpu@1 { | ||
| 43 | device_type = "cpu"; | ||
| 44 | compatible = "arm,cortex-a9"; | ||
| 45 | reg = <1>; | ||
| 46 | next-level-cache = <&L2>; | ||
| 47 | }; | ||
| 48 | |||
| 49 | cpu@2 { | ||
| 50 | device_type = "cpu"; | ||
| 51 | compatible = "arm,cortex-a9"; | ||
| 52 | reg = <2>; | ||
| 53 | next-level-cache = <&L2>; | ||
| 54 | }; | ||
| 55 | |||
| 56 | cpu@3 { | ||
| 57 | device_type = "cpu"; | ||
| 58 | compatible = "arm,cortex-a9"; | ||
| 59 | reg = <3>; | ||
| 60 | next-level-cache = <&L2>; | ||
| 61 | }; | ||
| 62 | }; | ||
| 63 | |||
| 64 | memory@60000000 { | ||
| 65 | device_type = "memory"; | ||
| 66 | reg = <0x60000000 0x40000000>; | ||
| 67 | }; | ||
| 68 | |||
| 69 | clcd@10020000 { | ||
| 70 | compatible = "arm,pl111", "arm,primecell"; | ||
| 71 | reg = <0x10020000 0x1000>; | ||
| 72 | interrupts = <0 44 4>; | ||
| 73 | }; | ||
| 74 | |||
| 75 | memory-controller@100e0000 { | ||
| 76 | compatible = "arm,pl341", "arm,primecell"; | ||
| 77 | reg = <0x100e0000 0x1000>; | ||
| 78 | }; | ||
| 79 | |||
| 80 | memory-controller@100e1000 { | ||
| 81 | compatible = "arm,pl354", "arm,primecell"; | ||
| 82 | reg = <0x100e1000 0x1000>; | ||
| 83 | interrupts = <0 45 4>, | ||
| 84 | <0 46 4>; | ||
| 85 | }; | ||
| 86 | |||
| 87 | timer@100e4000 { | ||
| 88 | compatible = "arm,sp804", "arm,primecell"; | ||
| 89 | reg = <0x100e4000 0x1000>; | ||
| 90 | interrupts = <0 48 4>, | ||
| 91 | <0 49 4>; | ||
| 92 | }; | ||
| 93 | |||
| 94 | watchdog@100e5000 { | ||
| 95 | compatible = "arm,sp805", "arm,primecell"; | ||
| 96 | reg = <0x100e5000 0x1000>; | ||
| 97 | interrupts = <0 51 4>; | ||
| 98 | }; | ||
| 99 | |||
| 100 | scu@1e000000 { | ||
| 101 | compatible = "arm,cortex-a9-scu"; | ||
| 102 | reg = <0x1e000000 0x58>; | ||
| 103 | }; | ||
| 104 | |||
| 105 | timer@1e000600 { | ||
| 106 | compatible = "arm,cortex-a9-twd-timer"; | ||
| 107 | reg = <0x1e000600 0x20>; | ||
| 108 | interrupts = <1 2 0xf04>, | ||
| 109 | <1 3 0xf04>; | ||
| 110 | }; | ||
| 111 | |||
| 112 | gic: interrupt-controller@1e001000 { | ||
| 113 | compatible = "arm,cortex-a9-gic"; | ||
| 114 | #interrupt-cells = <3>; | ||
| 115 | #address-cells = <0>; | ||
| 116 | interrupt-controller; | ||
| 117 | reg = <0x1e001000 0x1000>, | ||
| 118 | <0x1e000100 0x100>; | ||
| 119 | }; | ||
| 120 | |||
| 121 | L2: cache-controller@1e00a000 { | ||
| 122 | compatible = "arm,pl310-cache"; | ||
| 123 | reg = <0x1e00a000 0x1000>; | ||
| 124 | interrupts = <0 43 4>; | ||
| 125 | cache-level = <2>; | ||
| 126 | arm,data-latency = <1 1 1>; | ||
| 127 | arm,tag-latency = <1 1 1>; | ||
| 128 | }; | ||
| 129 | |||
| 130 | pmu { | ||
| 131 | compatible = "arm,cortex-a9-pmu"; | ||
| 132 | interrupts = <0 60 4>, | ||
| 133 | <0 61 4>, | ||
| 134 | <0 62 4>, | ||
| 135 | <0 63 4>; | ||
| 136 | }; | ||
| 137 | |||
| 138 | motherboard { | ||
| 139 | ranges = <0 0 0x40000000 0x04000000>, | ||
| 140 | <1 0 0x44000000 0x04000000>, | ||
| 141 | <2 0 0x48000000 0x04000000>, | ||
| 142 | <3 0 0x4c000000 0x04000000>, | ||
| 143 | <7 0 0x10000000 0x00020000>; | ||
| 144 | |||
| 145 | interrupt-map-mask = <0 0 63>; | ||
| 146 | interrupt-map = <0 0 0 &gic 0 0 4>, | ||
| 147 | <0 0 1 &gic 0 1 4>, | ||
| 148 | <0 0 2 &gic 0 2 4>, | ||
| 149 | <0 0 3 &gic 0 3 4>, | ||
| 150 | <0 0 4 &gic 0 4 4>, | ||
| 151 | <0 0 5 &gic 0 5 4>, | ||
| 152 | <0 0 6 &gic 0 6 4>, | ||
| 153 | <0 0 7 &gic 0 7 4>, | ||
| 154 | <0 0 8 &gic 0 8 4>, | ||
| 155 | <0 0 9 &gic 0 9 4>, | ||
| 156 | <0 0 10 &gic 0 10 4>, | ||
| 157 | <0 0 11 &gic 0 11 4>, | ||
| 158 | <0 0 12 &gic 0 12 4>, | ||
| 159 | <0 0 13 &gic 0 13 4>, | ||
| 160 | <0 0 14 &gic 0 14 4>, | ||
| 161 | <0 0 15 &gic 0 15 4>, | ||
| 162 | <0 0 16 &gic 0 16 4>, | ||
| 163 | <0 0 17 &gic 0 17 4>, | ||
| 164 | <0 0 18 &gic 0 18 4>, | ||
| 165 | <0 0 19 &gic 0 19 4>, | ||
| 166 | <0 0 20 &gic 0 20 4>, | ||
| 167 | <0 0 21 &gic 0 21 4>, | ||
| 168 | <0 0 22 &gic 0 22 4>, | ||
| 169 | <0 0 23 &gic 0 23 4>, | ||
| 170 | <0 0 24 &gic 0 24 4>, | ||
| 171 | <0 0 25 &gic 0 25 4>, | ||
| 172 | <0 0 26 &gic 0 26 4>, | ||
| 173 | <0 0 27 &gic 0 27 4>, | ||
| 174 | <0 0 28 &gic 0 28 4>, | ||
| 175 | <0 0 29 &gic 0 29 4>, | ||
| 176 | <0 0 30 &gic 0 30 4>, | ||
| 177 | <0 0 31 &gic 0 31 4>, | ||
| 178 | <0 0 32 &gic 0 32 4>, | ||
| 179 | <0 0 33 &gic 0 33 4>, | ||
| 180 | <0 0 34 &gic 0 34 4>, | ||
| 181 | <0 0 35 &gic 0 35 4>, | ||
| 182 | <0 0 36 &gic 0 36 4>, | ||
| 183 | <0 0 37 &gic 0 37 4>, | ||
| 184 | <0 0 38 &gic 0 38 4>, | ||
| 185 | <0 0 39 &gic 0 39 4>, | ||
| 186 | <0 0 40 &gic 0 40 4>, | ||
| 187 | <0 0 41 &gic 0 41 4>, | ||
| 188 | <0 0 42 &gic 0 42 4>; | ||
| 189 | }; | ||
| 190 | }; | ||
| 191 | |||
| 192 | /include/ "vexpress-v2m.dtsi" | ||
| @@ -24,9 +24,6 @@ config ARM_VIC_NR · 23 unmodified lines | |||
| 24 | config ICST | 24 | config ICST |
| 25 | bool | 25 | bool |
| 26 | 26 | ||
| 27 | config PL330 | ||
| 28 | bool | ||
| 29 | |||
| 30 | config SA1111 | 27 | config SA1111 |
| 31 | bool | 28 | bool |
| 32 | select DMABOUNCE if !ARCH_PXA | 29 | select DMABOUNCE if !ARCH_PXA |
| @@ -35,9 +32,6 @@ config DMABOUNCE · 2 unmodified lines | |||
| 35 | bool | 32 | bool |
| 36 | select ZONE_DMA | 33 | select ZONE_DMA |
| 37 | 34 | ||
| 38 | config TIMER_ACORN | ||
| 39 | bool | ||
| 40 | |||
| 41 | config SHARP_LOCOMO | 35 | config SHARP_LOCOMO |
| 42 | bool | 36 | bool |
| 43 | 37 | ||
| @@ -5,11 +5,9 @@ · 4 unmodified lines | |||
| 5 | obj-$(CONFIG_ARM_GIC) += gic.o | 5 | obj-$(CONFIG_ARM_GIC) += gic.o |
| 6 | obj-$(CONFIG_ARM_VIC) += vic.o | 6 | obj-$(CONFIG_ARM_VIC) += vic.o |
| 7 | obj-$(CONFIG_ICST) += icst.o | 7 | obj-$(CONFIG_ICST) += icst.o |
| 8 | obj-$(CONFIG_PL330) += pl330.o | ||
| 9 | obj-$(CONFIG_SA1111) += sa1111.o | 8 | obj-$(CONFIG_SA1111) += sa1111.o |
| 10 | obj-$(CONFIG_PCI_HOST_VIA82C505) += via82c505.o | 9 | obj-$(CONFIG_PCI_HOST_VIA82C505) += via82c505.o |
| 11 | obj-$(CONFIG_DMABOUNCE) += dmabounce.o | 10 | obj-$(CONFIG_DMABOUNCE) += dmabounce.o |
| 12 | obj-$(CONFIG_TIMER_ACORN) += time-acorn.o | ||
| 13 | obj-$(CONFIG_SHARP_LOCOMO) += locomo.o | 11 | obj-$(CONFIG_SHARP_LOCOMO) += locomo.o |
| 14 | obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o | 12 | obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o |
| 15 | obj-$(CONFIG_SHARP_SCOOP) += scoop.o | 13 | obj-$(CONFIG_SHARP_SCOOP) += scoop.o |
| @@ -686,13 +686,12 @@ void __init gic_init_bases(unsigned int gic_nr, int irq_start, · 685 unmodified lines | |||
| 686 | * For primary GICs, skip over SGIs. | 686 | * For primary GICs, skip over SGIs. |
| 687 | * For secondary GICs, skip over PPIs, too. | 687 | * For secondary GICs, skip over PPIs, too. |
| 688 | */ | 688 | */ |
| 689 | hwirq_base = 32; | 689 | if (gic_nr == 0 && (irq_start & 31) > 0) { |
| 690 | if (gic_nr == 0) { | 690 | hwirq_base = 16; |
| 691 | if ((irq_start & 31) > 0) { | 691 | if (irq_start != -1) |
| 692 | hwirq_base = 16; | 692 | irq_start = (irq_start & ~31) + 16; |
| 693 | if (irq_start != -1) | 693 | } else { |
| 694 | irq_start = (irq_start & ~31) + 16; | 694 | hwirq_base = 32; |
| 695 | } | ||
| 696 | } | 695 | } |
| 697 | 696 | ||
| 698 | /* | 697 | /* |
| @@ -299,8 +299,8 @@ int __init it8152_pci_setup(int nr, struct pci_sys_data *sys) · 298 unmodified lines | |||
| 299 | goto err1; | 299 | goto err1; |
| 300 | } | 300 | } |
| 301 | 301 | ||
| 302 | pci_add_resource(&sys->resources, &it8152_io); | 302 | pci_add_resource_offset(&sys->resources, &it8152_io, sys->io_offset); |
| 303 | pci_add_resource(&sys->resources, &it8152_mem); | 303 | pci_add_resource_offset(&sys->resources, &it8152_mem, sys->mem_offset); |
| 304 | 304 | ||
| 305 | if (platform_notify || platform_notify_remove) { | 305 | if (platform_notify || platform_notify_remove) { |
| 306 | printk(KERN_ERR "PCI: Can't use platform_notify\n"); | 306 | printk(KERN_ERR "PCI: Can't use platform_notify\n"); |
| @@ -1,1960 +0,0 @@ | |||
| 1 | /* linux/arch/arm/common/pl330.c | ||
| 2 | * | ||
| 3 | * Copyright (C) 2010 Samsung Electronics Co Ltd. | ||
| 4 | * Jaswinder Singh <jassi.brar@samsung.com> | ||
| 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 as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 19 | */ | ||
| 20 | |||
| 21 | #include <linux/kernel.h> | ||
| 22 | #include <linux/init.h> | ||
| 23 | #include <linux/slab.h> | ||
| 24 | #include <linux/module.h> | ||
| 25 | #include <linux/string.h> | ||
| 26 | #include <linux/io.h> | ||
| 27 | #include <linux/delay.h> | ||
| 28 | #include <linux/interrupt.h> | ||
| 29 | #include <linux/dma-mapping.h> | ||
| 30 | |||
| 31 | #include <asm/hardware/pl330.h> | ||
| 32 | |||
| 33 | /* Register and Bit field Definitions */ | ||
| 34 | #define DS 0x0 | ||
| 35 | #define DS_ST_STOP 0x0 | ||
| 36 | #define DS_ST_EXEC 0x1 | ||
| 37 | #define DS_ST_CMISS 0x2 | ||
| 38 | #define DS_ST_UPDTPC 0x3 | ||
| 39 | #define DS_ST_WFE 0x4 | ||
| 40 | #define DS_ST_ATBRR 0x5 | ||
| 41 | #define DS_ST_QBUSY 0x6 | ||
| 42 | #define DS_ST_WFP 0x7 | ||
| 43 | #define DS_ST_KILL 0x8 | ||
| 44 | #define DS_ST_CMPLT 0x9 | ||
| 45 | #define DS_ST_FLTCMP 0xe | ||
| 46 | #define DS_ST_FAULT 0xf | ||
| 47 | |||
| 48 | #define DPC 0x4 | ||
| 49 | #define INTEN 0x20 | ||
| 50 | #define ES 0x24 | ||
| 51 | #define INTSTATUS 0x28 | ||
| 52 | #define INTCLR 0x2c | ||
| 53 | #define FSM 0x30 | ||
| 54 | #define FSC 0x34 | ||
| 55 | #define FTM 0x38 | ||
| 56 | |||
| 57 | #define _FTC 0x40 | ||
| 58 | #define FTC(n) (_FTC + (n)*0x4) | ||
| 59 | |||
| 60 | #define _CS 0x100 | ||
| 61 | #define CS(n) (_CS + (n)*0x8) | ||
| 62 | #define CS_CNS (1 << 21) | ||
| 63 | |||
| 64 | #define _CPC 0x104 | ||
| 65 | #define CPC(n) (_CPC + (n)*0x8) | ||
| 66 | |||
| 67 | #define _SA 0x400 | ||
| 68 | #define SA(n) (_SA + (n)*0x20) | ||
| 69 | |||
| 70 | #define _DA 0x404 | ||
| 71 | #define DA(n) (_DA + (n)*0x20) | ||
| 72 | |||
| 73 | #define _CC 0x408 | ||
| 74 | #define CC(n) (_CC + (n)*0x20) | ||
| 75 | |||
| 76 | #define CC_SRCINC (1 << 0) | ||
| 77 | #define CC_DSTINC (1 << 14) | ||
| 78 | #define CC_SRCPRI (1 << 8) | ||
| 79 | #define CC_DSTPRI (1 << 22) | ||
| 80 | #define CC_SRCNS (1 << 9) | ||
| 81 | #define CC_DSTNS (1 << 23) | ||
| 82 | #define CC_SRCIA (1 << 10) | ||
| 83 | #define CC_DSTIA (1 << 24) | ||
| 84 | #define CC_SRCBRSTLEN_SHFT 4 | ||
| 85 | #define CC_DSTBRSTLEN_SHFT 18 | ||
| 86 | #define CC_SRCBRSTSIZE_SHFT 1 | ||
| 87 | #define CC_DSTBRSTSIZE_SHFT 15 | ||
| 88 | #define CC_SRCCCTRL_SHFT 11 | ||
| 89 | #define CC_SRCCCTRL_MASK 0x7 | ||
| 90 | #define CC_DSTCCTRL_SHFT 25 | ||
| 91 | #define CC_DRCCCTRL_MASK 0x7 | ||
| 92 | #define CC_SWAP_SHFT 28 | ||
| 93 | |||
| 94 | #define _LC0 0x40c | ||
| 95 | #define LC0(n) (_LC0 + (n)*0x20) | ||
| 96 | |||
| 97 | #define _LC1 0x410 | ||
| 98 | #define LC1(n) (_LC1 + (n)*0x20) | ||
| 99 | |||
| 100 | #define DBGSTATUS 0xd00 | ||
| 101 | #define DBG_BUSY (1 << 0) | ||
| 102 | |||
| 103 | #define DBGCMD 0xd04 | ||
| 104 | #define DBGINST0 0xd08 | ||
| 105 | #define DBGINST1 0xd0c | ||
| 106 | |||
| 107 | #define CR0 0xe00 | ||
| 108 | #define CR1 0xe04 | ||
| 109 | #define CR2 0xe08 | ||
| 110 | #define CR3 0xe0c | ||
| 111 | #define CR4 0xe10 | ||
| 112 | #define CRD 0xe14 | ||
| 113 | |||
| 114 | #define PERIPH_ID 0xfe0 | ||
| 115 | #define PCELL_ID 0xff0 | ||
| 116 | |||
| 117 | #define CR0_PERIPH_REQ_SET (1 << 0) | ||
| 118 | #define CR0_BOOT_EN_SET (1 << 1) | ||
| 119 | #define CR0_BOOT_MAN_NS (1 << 2) | ||
| 120 | #define CR0_NUM_CHANS_SHIFT 4 | ||
| 121 | #define CR0_NUM_CHANS_MASK 0x7 | ||
| 122 | #define CR0_NUM_PERIPH_SHIFT 12 | ||
| 123 | #define CR0_NUM_PERIPH_MASK 0x1f | ||
| 124 | #define CR0_NUM_EVENTS_SHIFT 17 | ||
| 125 | #define CR0_NUM_EVENTS_MASK 0x1f | ||
| 126 | |||
| 127 | #define CR1_ICACHE_LEN_SHIFT 0 | ||
| 128 | #define CR1_ICACHE_LEN_MASK 0x7 | ||
| 129 | #define CR1_NUM_ICACHELINES_SHIFT 4 | ||
| 130 | #define CR1_NUM_ICACHELINES_MASK 0xf | ||
| 131 | |||
| 132 | #define CRD_DATA_WIDTH_SHIFT 0 | ||
| 133 | #define CRD_DATA_WIDTH_MASK 0x7 | ||
| 134 | #define CRD_WR_CAP_SHIFT 4 | ||
| 135 | #define CRD_WR_CAP_MASK 0x7 | ||
| 136 | #define CRD_WR_Q_DEP_SHIFT 8 | ||
| 137 | #define CRD_WR_Q_DEP_MASK 0xf | ||
| 138 | #define CRD_RD_CAP_SHIFT 12 | ||
| 139 | #define CRD_RD_CAP_MASK 0x7 | ||
| 140 | #define CRD_RD_Q_DEP_SHIFT 16 | ||
| 141 | #define CRD_RD_Q_DEP_MASK 0xf | ||
| 142 | #define CRD_DATA_BUFF_SHIFT 20 | ||
| 143 | #define CRD_DATA_BUFF_MASK 0x3ff | ||
| 144 | |||
| 145 | #define PART 0x330 | ||
| 146 | #define DESIGNER 0x41 | ||
| 147 | #define REVISION 0x0 | ||
| 148 | #define INTEG_CFG 0x0 | ||
| 149 | #define PERIPH_ID_VAL ((PART << 0) | (DESIGNER << 12)) | ||
| 150 | |||
| 151 | #define PCELL_ID_VAL 0xb105f00d | ||
| 152 | |||
| 153 | #define PL330_STATE_STOPPED (1 << 0) | ||
| 154 | #define PL330_STATE_EXECUTING (1 << 1) | ||
| 155 | #define PL330_STATE_WFE (1 << 2) | ||
| 156 | #define PL330_STATE_FAULTING (1 << 3) | ||
| 157 | #define PL330_STATE_COMPLETING (1 << 4) | ||
| 158 | #define PL330_STATE_WFP (1 << 5) | ||
| 159 | #define PL330_STATE_KILLING (1 << 6) | ||
| 160 | #define PL330_STATE_FAULT_COMPLETING (1 << 7) | ||
| 161 | #define PL330_STATE_CACHEMISS (1 << 8) | ||
| 162 | #define PL330_STATE_UPDTPC (1 << 9) | ||
| 163 | #define PL330_STATE_ATBARRIER (1 << 10) | ||
| 164 | #define PL330_STATE_QUEUEBUSY (1 << 11) | ||
| 165 | #define PL330_STATE_INVALID (1 << 15) | ||
| 166 | |||
| 167 | #define PL330_STABLE_STATES (PL330_STATE_STOPPED | PL330_STATE_EXECUTING \ | ||
| 168 | | PL330_STATE_WFE | PL330_STATE_FAULTING) | ||
| 169 | |||
| 170 | #define CMD_DMAADDH 0x54 | ||
| 171 | #define CMD_DMAEND 0x00 | ||
| 172 | #define CMD_DMAFLUSHP 0x35 | ||
| 173 | #define CMD_DMAGO 0xa0 | ||
| 174 | #define CMD_DMALD 0x04 | ||
| 175 | #define CMD_DMALDP 0x25 | ||
| 176 | #define CMD_DMALP 0x20 | ||
| 177 | #define CMD_DMALPEND 0x28 | ||
| 178 | #define CMD_DMAKILL 0x01 | ||
| 179 | #define CMD_DMAMOV 0xbc | ||
| 180 | #define CMD_DMANOP 0x18 | ||
| 181 | #define CMD_DMARMB 0x12 | ||
| 182 | #define CMD_DMASEV 0x34 | ||
| 183 | #define CMD_DMAST 0x08 | ||
| 184 | #define CMD_DMASTP 0x29 | ||
| 185 | #define CMD_DMASTZ 0x0c | ||
| 186 | #define CMD_DMAWFE 0x36 | ||
| 187 | #define CMD_DMAWFP 0x30 | ||
| 188 | #define CMD_DMAWMB 0x13 | ||
| 189 | |||
| 190 | #define SZ_DMAADDH 3 | ||
| 191 | #define SZ_DMAEND 1 | ||
| 192 | #define SZ_DMAFLUSHP 2 | ||
| 193 | #define SZ_DMALD 1 | ||
| 194 | #define SZ_DMALDP 2 | ||
| 195 | #define SZ_DMALP 2 | ||
| 196 | #define SZ_DMALPEND 2 | ||
| 197 | #define SZ_DMAKILL 1 | ||
| 198 | #define SZ_DMAMOV 6 | ||
| 199 | #define SZ_DMANOP 1 | ||
| 200 | #define SZ_DMARMB 1 | ||
| 201 | #define SZ_DMASEV 2 | ||
| 202 | #define SZ_DMAST 1 | ||
| 203 | #define SZ_DMASTP 2 | ||
| 204 | #define SZ_DMASTZ 1 | ||
| 205 | #define SZ_DMAWFE 2 | ||
| 206 | #define SZ_DMAWFP 2 | ||
| 207 | #define SZ_DMAWMB 1 | ||
| 208 | #define SZ_DMAGO 6 | ||
| 209 | |||
| 210 | #define BRST_LEN(ccr) ((((ccr) >> CC_SRCBRSTLEN_SHFT) & 0xf) + 1) | ||
| 211 | #define BRST_SIZE(ccr) (1 << (((ccr) >> CC_SRCBRSTSIZE_SHFT) & 0x7)) | ||
| 212 | |||
| 213 | #define BYTE_TO_BURST(b, ccr) ((b) / BRST_SIZE(ccr) / BRST_LEN(ccr)) | ||
| 214 | #define BURST_TO_BYTE(c, ccr) ((c) * BRST_SIZE(ccr) * BRST_LEN(ccr)) | ||
| 215 | |||
| 216 | /* | ||
| 217 | * With 256 bytes, we can do more than 2.5MB and 5MB xfers per req | ||
| 218 | * at 1byte/burst for P<->M and M<->M respectively. | ||
| 219 | * For typical scenario, at 1word/burst, 10MB and 20MB xfers per req | ||
| 220 | * should be enough for P<->M and M<->M respectively. | ||
| 221 | */ | ||
| 222 | #define MCODE_BUFF_PER_REQ 256 | ||
| 223 | |||
| 224 | /* If the _pl330_req is available to the client */ | ||
| 225 | #define IS_FREE(req) (*((u8 *)((req)->mc_cpu)) == CMD_DMAEND) | ||
| 226 | |||
| 227 | /* Use this _only_ to wait on transient states */ | ||
| 228 | #define UNTIL(t, s) while (!(_state(t) & (s))) cpu_relax(); | ||
| 229 | |||
| 230 | #ifdef PL330_DEBUG_MCGEN | ||
| 231 | static unsigned cmd_line; | ||
| 232 | #define PL330_DBGCMD_DUMP(off, x...) do { \ | ||
| 233 | printk("%x:", cmd_line); \ | ||
| 234 | printk(x); \ | ||
| 235 | cmd_line += off; \ | ||
| 236 | } while (0) | ||
| 237 | #define PL330_DBGMC_START(addr) (cmd_line = addr) | ||
| 238 | #else | ||
| 239 | #define PL330_DBGCMD_DUMP(off, x...) do {} while (0) | ||
| 240 | #define PL330_DBGMC_START(addr) do {} while (0) | ||
| 241 | #endif | ||
| 242 | |||
| 243 | struct _xfer_spec { | ||
| 244 | u32 ccr; | ||
| 245 | struct pl330_req *r; | ||
| 246 | struct pl330_xfer *x; | ||
| 247 | }; | ||
| 248 | |||
| 249 | enum dmamov_dst { | ||
| 250 | SAR = 0, | ||
| 251 | CCR, | ||
| 252 | DAR, | ||
| 253 | }; | ||
| 254 | |||
| 255 | enum pl330_dst { | ||
| 256 | SRC = 0, | ||
| 257 | DST, | ||
| 258 | }; | ||
| 259 | |||
| 260 | enum pl330_cond { | ||
| 261 | SINGLE, | ||
| 262 | BURST, | ||
| 263 | ALWAYS, | ||
| 264 | }; | ||
| 265 | |||
| 266 | struct _pl330_req { | ||
| 267 | u32 mc_bus; | ||
| 268 | void *mc_cpu; | ||
| 269 | /* Number of bytes taken to setup MC for the req */ | ||
| 270 | u32 mc_len; | ||
| 271 | struct pl330_req *r; | ||
| 272 | /* Hook to attach to DMAC's list of reqs with due callback */ | ||
| 273 | struct list_head rqd; | ||
| 274 | }; | ||
| 275 | |||
| 276 | /* ToBeDone for tasklet */ | ||
| 277 | struct _pl330_tbd { | ||
| 278 | bool reset_dmac; | ||
| 279 | bool reset_mngr; | ||
| 280 | u8 reset_chan; | ||
| 281 | }; | ||
| 282 | |||
| 283 | /* A DMAC Thread */ | ||
| 284 | struct pl330_thread { | ||
| 285 | u8 id; | ||
| 286 | int ev; | ||
| 287 | /* If the channel is not yet acquired by any client */ | ||
| 288 | bool free; | ||
| 289 | /* Parent DMAC */ | ||
| 290 | struct pl330_dmac *dmac; | ||
| 291 | /* Only two at a time */ | ||
| 292 | struct _pl330_req req[2]; | ||
| 293 | /* Index of the last enqueued request */ | ||
| 294 | unsigned lstenq; | ||
| 295 | /* Index of the last submitted request or -1 if the DMA is stopped */ | ||
| 296 | int req_running; | ||
| 297 | }; | ||
| 298 | |||
| 299 | enum pl330_dmac_state { | ||
| 300 | UNINIT, | ||
| 301 | INIT, | ||
| 302 | DYING, | ||
| 303 | }; | ||
| 304 | |||
| 305 | /* A DMAC */ | ||
| 306 | struct pl330_dmac { | ||
| 307 | spinlock_t lock; | ||
| 308 | /* Holds list of reqs with due callbacks */ | ||
| 309 | struct list_head req_done; | ||
| 310 | /* Pointer to platform specific stuff */ | ||
| 311 | struct pl330_info *pinfo; | ||
| 312 | /* Maximum possible events/irqs */ | ||
| 313 | int events[32]; | ||
| 314 | /* BUS address of MicroCode buffer */ | ||
| 315 | u32 mcode_bus; | ||
| 316 | /* CPU address of MicroCode buffer */ | ||
| 317 | void *mcode_cpu; | ||
| 318 | /* List of all Channel threads */ | ||
| 319 | struct pl330_thread *channels; | ||
| 320 | /* Pointer to the MANAGER thread */ | ||
| 321 | struct pl330_thread *manager; | ||
| 322 | /* To handle bad news in interrupt */ | ||
| 323 | struct tasklet_struct tasks; | ||
| 324 | struct _pl330_tbd dmac_tbd; | ||
| 325 | /* State of DMAC operation */ | ||
| 326 | enum pl330_dmac_state state; | ||
| 327 | }; | ||
| 328 | |||
| 329 | static inline void _callback(struct pl330_req *r, enum pl330_op_err err) | ||
| 330 | { | ||
| 331 | if (r && r->xfer_cb) | ||
| 332 | r->xfer_cb(r->token, err); | ||
| 333 | } | ||
| 334 | |||
| 335 | static inline bool _queue_empty(struct pl330_thread *thrd) | ||
| 336 | { | ||
| 337 | return (IS_FREE(&thrd->req[0]) && IS_FREE(&thrd->req[1])) | ||
| 338 | ? true : false; | ||
| 339 | } | ||
| 340 | |||
| 341 | static inline bool _queue_full(struct pl330_thread *thrd) | ||
| 342 | { | ||
| 343 | return (IS_FREE(&thrd->req[0]) || IS_FREE(&thrd->req[1])) | ||
| 344 | ? false : true; | ||
| 345 | } | ||
| 346 | |||
| 347 | static inline bool is_manager(struct pl330_thread *thrd) | ||
| 348 | { | ||
| 349 | struct pl330_dmac *pl330 = thrd->dmac; | ||
| 350 | |||
| 351 | /* MANAGER is indexed at the end */ | ||
| 352 | if (thrd->id == pl330->pinfo->pcfg.num_chan) | ||
| 353 | return true; | ||
| 354 | else | ||
| 355 | return false; | ||
| 356 | } | ||
| 357 | |||
| 358 | /* If manager of the thread is in Non-Secure mode */ | ||
| 359 | static inline bool _manager_ns(struct pl330_thread *thrd) | ||
| 360 | { | ||
| 361 | struct pl330_dmac *pl330 = thrd->dmac; | ||
| 362 | |||
| 363 | return (pl330->pinfo->pcfg.mode & DMAC_MODE_NS) ? true : false; | ||
| 364 | } | ||
| 365 | |||
| 366 | static inline u32 get_id(struct pl330_info *pi, u32 off) | ||
| 367 | { | ||
| 368 | void __iomem *regs = pi->base; | ||
| 369 | u32 id = 0; | ||
| 370 | |||
| 371 | id |= (readb(regs + off + 0x0) << 0); | ||
| 372 | id |= (readb(regs + off + 0x4) << 8); | ||
| 373 | id |= (readb(regs + off + 0x8) << 16); | ||
| 374 | id |= (readb(regs + off + 0xc) << 24); | ||
| 375 | |||
| 376 | return id; | ||
| 377 | } | ||
| 378 | |||
| 379 | static inline u32 _emit_ADDH(unsigned dry_run, u8 buf[], | ||
| 380 | enum pl330_dst da, u16 val) | ||
| 381 | { | ||
| 382 | if (dry_run) | ||
| 383 | return SZ_DMAADDH; | ||
| 384 | |||
| 385 | buf[0] = CMD_DMAADDH; | ||
| 386 | buf[0] |= (da << 1); | ||
| 387 | *((u16 *)&buf[1]) = val; | ||
| 388 | |||
| 389 | PL330_DBGCMD_DUMP(SZ_DMAADDH, "\tDMAADDH %s %u\n", | ||
| 390 | da == 1 ? "DA" : "SA", val); | ||
| 391 | |||
| 392 | return SZ_DMAADDH; | ||
| 393 | } | ||
| 394 | |||
| 395 | static inline u32 _emit_END(unsigned dry_run, u8 buf[]) | ||
| 396 | { | ||
| 397 | if (dry_run) | ||
| 398 | return SZ_DMAEND; | ||
| 399 | |||
| 400 | buf[0] = CMD_DMAEND; | ||
| 401 | |||
| 402 | PL330_DBGCMD_DUMP(SZ_DMAEND, "\tDMAEND\n"); | ||
| 403 | |||
| 404 | return SZ_DMAEND; | ||
| 405 | } | ||
| 406 | |||
| 407 | static inline u32 _emit_FLUSHP(unsigned dry_run, u8 buf[], u8 peri) | ||
| 408 | { | ||
| 409 | if (dry_run) | ||
| 410 | return SZ_DMAFLUSHP; | ||
| 411 | |||
| 412 | buf[0] = CMD_DMAFLUSHP; | ||
| 413 | |||
| 414 | peri &= 0x1f; | ||
| 415 | peri <<= 3; | ||
| 416 | buf[1] = peri; | ||
| 417 | |||
| 418 | PL330_DBGCMD_DUMP(SZ_DMAFLUSHP, "\tDMAFLUSHP %u\n", peri >> 3); | ||
| 419 | |||
| 420 | return SZ_DMAFLUSHP; | ||
| 421 | } | ||
| 422 | |||
| 423 | static inline u32 _emit_LD(unsigned dry_run, u8 buf[], enum pl330_cond cond) | ||
| 424 | { | ||
| 425 | if (dry_run) | ||
| 426 | return SZ_DMALD; | ||
| 427 | |||
| 428 | buf[0] = CMD_DMALD; | ||
| 429 | |||
| 430 | if (cond == SINGLE) | ||
| 431 | buf[0] |= (0 << 1) | (1 << 0); | ||
| 432 | else if (cond == BURST) | ||
| 433 | buf[0] |= (1 << 1) | (1 << 0); | ||
| 434 | |||
| 435 | PL330_DBGCMD_DUMP(SZ_DMALD, "\tDMALD%c\n", | ||
| 436 | cond == SINGLE ? 'S' : (cond == BURST ? 'B' : 'A')); | ||
| 437 | |||
| 438 | return SZ_DMALD; | ||
| 439 | } | ||
| 440 | |||
| 441 | static inline u32 _emit_LDP(unsigned dry_run, u8 buf[], | ||
| 442 | enum pl330_cond cond, u8 peri) | ||
| 443 | { | ||
| 444 | if (dry_run) | ||
| 445 | return SZ_DMALDP; | ||
| 446 | |||
| 447 | buf[0] = CMD_DMALDP; | ||
| 448 | |||
| 449 | if (cond == BURST) | ||
| 450 | buf[0] |= (1 << 1); | ||
| 451 | |||
| 452 | peri &= 0x1f; | ||
| 453 | peri <<= 3; | ||
| 454 | buf[1] = peri; | ||
| 455 | |||
| 456 | PL330_DBGCMD_DUMP(SZ_DMALDP, "\tDMALDP%c %u\n", | ||
| 457 | cond == SINGLE ? 'S' : 'B', peri >> 3); | ||
| 458 | |||
| 459 | return SZ_DMALDP; | ||
| 460 | } | ||
| 461 | |||
| 462 | static inline u32 _emit_LP(unsigned dry_run, u8 buf[], | ||
| 463 | unsigned loop, u8 cnt) | ||
| 464 | { | ||
| 465 | if (dry_run) | ||
| 466 | return SZ_DMALP; | ||
| 467 | |||
| 468 | buf[0] = CMD_DMALP; | ||
| 469 | |||
| 470 | if (loop) | ||
| 471 | buf[0] |= (1 << 1); | ||
| 472 | |||
| 473 | cnt--; /* DMAC increments by 1 internally */ | ||
| 474 | buf[1] = cnt; | ||
| 475 | |||
| 476 | PL330_DBGCMD_DUMP(SZ_DMALP, "\tDMALP_%c %u\n", loop ? '1' : '0', cnt); | ||
| 477 | |||
| 478 | return SZ_DMALP; | ||
| 479 | } | ||
| 480 | |||
| 481 | struct _arg_LPEND { | ||
| 482 | enum pl330_cond cond; | ||
| 483 | bool forever; | ||
| 484 | unsigned loop; | ||
| 485 | u8 bjump; | ||
| 486 | }; | ||
| 487 | |||
| 488 | static inline u32 _emit_LPEND(unsigned dry_run, u8 buf[], | ||
| 489 | const struct _arg_LPEND *arg) | ||
| 490 | { | ||
| 491 | enum pl330_cond cond = arg->cond; | ||
| 492 | bool forever = arg->forever; | ||
| 493 | unsigned loop = arg->loop; | ||
| 494 | u8 bjump = arg->bjump; | ||
| 495 | |||
| 496 | if (dry_run) | ||
| 497 | return SZ_DMALPEND; | ||
| 498 | |||
| 499 | buf[0] = CMD_DMALPEND; | ||
| 500 | |||
| 501 | if (loop) | ||
| 502 | buf[0] |= (1 << 2); | ||
| 503 | |||
| 504 | if (!forever) | ||
| 505 | buf[0] |= (1 << 4); | ||
| 506 | |||
| 507 | if (cond == SINGLE) | ||
| 508 | buf[0] |= (0 << 1) | (1 << 0); | ||
| 509 | else if (cond == BURST) | ||
| 510 | buf[0] |= (1 << 1) | (1 << 0); | ||
| 511 | |||
| 512 | buf[1] = bjump; | ||
| 513 | |||
| 514 | PL330_DBGCMD_DUMP(SZ_DMALPEND, "\tDMALP%s%c_%c bjmpto_%x\n", | ||
| 515 | forever ? "FE" : "END", | ||
| 516 | cond == SINGLE ? 'S' : (cond == BURST ? 'B' : 'A'), | ||
| 517 | loop ? '1' : '0', | ||
| 518 | bjump); | ||
| 519 | |||
| 520 | return SZ_DMALPEND; | ||
| 521 | } | ||
| 522 | |||
| 523 | static inline u32 _emit_KILL(unsigned dry_run, u8 buf[]) | ||
| 524 | { | ||
| 525 | if (dry_run) | ||
| 526 | return SZ_DMAKILL; | ||
| 527 | |||
| 528 | buf[0] = CMD_DMAKILL; | ||
| 529 | |||
| 530 | return SZ_DMAKILL; | ||
| 531 | } | ||
| 532 | |||
| 533 | static inline u32 _emit_MOV(unsigned dry_run, u8 buf[], | ||
| 534 | enum dmamov_dst dst, u32 val) | ||
| 535 | { | ||
| 536 | if (dry_run) | ||
| 537 | return SZ_DMAMOV; | ||
| 538 | |||
| 539 | buf[0] = CMD_DMAMOV; | ||
| 540 | buf[1] = dst; | ||
| 541 | *((u32 *)&buf[2]) = val; | ||
| 542 | |||
| 543 | PL330_DBGCMD_DUMP(SZ_DMAMOV, "\tDMAMOV %s 0x%x\n", | ||
| 544 | dst == SAR ? "SAR" : (dst == DAR ? "DAR" : "CCR"), val); | ||
| 545 | |||
| 546 | return SZ_DMAMOV; | ||
| 547 | } | ||
| 548 | |||
| 549 | static inline u32 _emit_NOP(unsigned dry_run, u8 buf[]) | ||
| 550 | { | ||
| 551 | if (dry_run) | ||
| 552 | return SZ_DMANOP; | ||
| 553 | |||
| 554 | buf[0] = CMD_DMANOP; | ||
| 555 | |||
| 556 | PL330_DBGCMD_DUMP(SZ_DMANOP, "\tDMANOP\n"); | ||
| 557 | |||
| 558 | return SZ_DMANOP; | ||
| 559 | } | ||
| 560 | |||
| 561 | static inline u32 _emit_RMB(unsigned dry_run, u8 buf[]) | ||
| 562 | { | ||
| 563 | if (dry_run) | ||
| 564 | return SZ_DMARMB; | ||
| 565 | |||
| 566 | buf[0] = CMD_DMARMB; | ||
| 567 | |||
| 568 | PL330_DBGCMD_DUMP(SZ_DMARMB, "\tDMARMB\n"); | ||
| 569 | |||
| 570 | return SZ_DMARMB; | ||
| 571 | } | ||
| 572 | |||
| 573 | static inline u32 _emit_SEV(unsigned dry_run, u8 buf[], u8 ev) | ||
| 574 | { | ||
| 575 | if (dry_run) | ||
| 576 | return SZ_DMASEV; | ||
| 577 | |||
| 578 | buf[0] = CMD_DMASEV; | ||
| 579 | |||
| 580 | ev &= 0x1f; | ||
| 581 | ev <<= 3; | ||
| 582 | buf[1] = ev; | ||
| 583 | |||
| 584 | PL330_DBGCMD_DUMP(SZ_DMASEV, "\tDMASEV %u\n", ev >> 3); | ||
| 585 | |||
| 586 | return SZ_DMASEV; | ||
| 587 | } | ||
| 588 | |||
| 589 | static inline u32 _emit_ST(unsigned dry_run, u8 buf[], enum pl330_cond cond) | ||
| 590 | { | ||
| 591 | if (dry_run) | ||
| 592 | return SZ_DMAST; | ||
| 593 | |||
| 594 | buf[0] = CMD_DMAST; | ||
| 595 | |||
| 596 | if (cond == SINGLE) | ||
| 597 | buf[0] |= (0 << 1) | (1 << 0); | ||
| 598 | else if (cond == BURST) | ||
| 599 | buf[0] |= (1 << 1) | (1 << 0); | ||
| 600 | |||
| 601 | PL330_DBGCMD_DUMP(SZ_DMAST, "\tDMAST%c\n", | ||
| 602 | cond == SINGLE ? 'S' : (cond == BURST ? 'B' : 'A')); | ||
| 603 | |||
| 604 | return SZ_DMAST; | ||
| 605 | } | ||
| 606 | |||
| 607 | static inline u32 _emit_STP(unsigned dry_run, u8 buf[], | ||
| 608 | enum pl330_cond cond, u8 peri) | ||
| 609 | { | ||
| 610 | if (dry_run) | ||
| 611 | return SZ_DMASTP; | ||
| 612 | |||
| 613 | buf[0] = CMD_DMASTP; | ||
| 614 | |||
| 615 | if (cond == BURST) | ||
| 616 | buf[0] |= (1 << 1); | ||
| 617 | |||
| 618 | peri &= 0x1f; | ||
| 619 | peri <<= 3; | ||
| 620 | buf[1] = peri; | ||
| 621 | |||
| 622 | PL330_DBGCMD_DUMP(SZ_DMASTP, "\tDMASTP%c %u\n", | ||
| 623 | cond == SINGLE ? 'S' : 'B', peri >> 3); | ||
| 624 | |||
| 625 | return SZ_DMASTP; | ||
| 626 | } | ||
| 627 | |||
| 628 | static inline u32 _emit_STZ(unsigned dry_run, u8 buf[]) | ||
| 629 | { | ||
| 630 | if (dry_run) | ||
| 631 | return SZ_DMASTZ; | ||
| 632 | |||
| 633 | buf[0] = CMD_DMASTZ; | ||
| 634 | |||
| 635 | PL330_DBGCMD_DUMP(SZ_DMASTZ, "\tDMASTZ\n"); | ||
| 636 | |||
| 637 | return SZ_DMASTZ; | ||
| 638 | } | ||
| 639 | |||
| 640 | static inline u32 _emit_WFE(unsigned dry_run, u8 buf[], u8 ev, | ||
| 641 | unsigned invalidate) | ||
| 642 | { | ||
| 643 | if (dry_run) | ||
| 644 | return SZ_DMAWFE; | ||
| 645 | |||
| 646 | buf[0] = CMD_DMAWFE; | ||
| 647 | |||
| 648 | ev &= 0x1f; | ||
| 649 | ev <<= 3; | ||
| 650 | buf[1] = ev; | ||
| 651 | |||
| 652 | if (invalidate) | ||
| 653 | buf[1] |= (1 << 1); | ||
| 654 | |||
| 655 | PL330_DBGCMD_DUMP(SZ_DMAWFE, "\tDMAWFE %u%s\n", | ||
| 656 | ev >> 3, invalidate ? ", I" : ""); | ||
| 657 | |||
| 658 | return SZ_DMAWFE; | ||
| 659 | } | ||
| 660 | |||
| 661 | static inline u32 _emit_WFP(unsigned dry_run, u8 buf[], | ||
| 662 | enum pl330_cond cond, u8 peri) | ||
| 663 | { | ||
| 664 | if (dry_run) | ||
| 665 | return SZ_DMAWFP; | ||
| 666 | |||
| 667 | buf[0] = CMD_DMAWFP; | ||
| 668 | |||
| 669 | if (cond == SINGLE) | ||
| 670 | buf[0] |= (0 << 1) | (0 << 0); | ||
| 671 | else if (cond == BURST) | ||
| 672 | buf[0] |= (1 << 1) | (0 << 0); | ||
| 673 | else | ||
| 674 | buf[0] |= (0 << 1) | (1 << 0); | ||
| 675 | |||
| 676 | peri &= 0x1f; | ||
| 677 | peri <<= 3; | ||
| 678 | buf[1] = peri; | ||
| 679 | |||
| 680 | PL330_DBGCMD_DUMP(SZ_DMAWFP, "\tDMAWFP%c %u\n", | ||
| 681 | cond == SINGLE ? 'S' : (cond == BURST ? 'B' : 'P'), peri >> 3); | ||
| 682 | |||
| 683 | return SZ_DMAWFP; | ||
| 684 | } | ||
| 685 | |||
| 686 | static inline u32 _emit_WMB(unsigned dry_run, u8 buf[]) | ||
| 687 | { | ||
| 688 | if (dry_run) | ||
| 689 | return SZ_DMAWMB; | ||
| 690 | |||
| 691 | buf[0] = CMD_DMAWMB; | ||
| 692 | |||
| 693 | PL330_DBGCMD_DUMP(SZ_DMAWMB, "\tDMAWMB\n"); | ||
| 694 | |||
| 695 | return SZ_DMAWMB; | ||
| 696 | } | ||
| 697 | |||
| 698 | struct _arg_GO { | ||
| 699 | u8 chan; | ||
| 700 | u32 addr; | ||
| 701 | unsigned ns; | ||
| 702 | }; | ||
| 703 | |||
| 704 | static inline u32 _emit_GO(unsigned dry_run, u8 buf[], | ||
| 705 | const struct _arg_GO *arg) | ||
| 706 | { | ||
| 707 | u8 chan = arg->chan; | ||
| 708 | u32 addr = arg->addr; | ||
| 709 | unsigned ns = arg->ns; | ||
| 710 | |||
| 711 | if (dry_run) | ||
| 712 | return SZ_DMAGO; | ||
| 713 | |||
| 714 | buf[0] = CMD_DMAGO; | ||
| 715 | buf[0] |= (ns << 1); | ||
| 716 | |||
| 717 | buf[1] = chan & 0x7; | ||
| 718 | |||
| 719 | *((u32 *)&buf[2]) = addr; | ||
| 720 | |||
| 721 | return SZ_DMAGO; | ||
| 722 | } | ||
| 723 | |||
| 724 | #define msecs_to_loops(t) (loops_per_jiffy / 1000 * HZ * t) | ||
| 725 | |||
| 726 | /* Returns Time-Out */ | ||
| 727 | static bool _until_dmac_idle(struct pl330_thread *thrd) | ||
| 728 | { | ||
| 729 | void __iomem *regs = thrd->dmac->pinfo->base; | ||
| 730 | unsigned long loops = msecs_to_loops(5); | ||
| 731 | |||
| 732 | do { | ||
| 733 | /* Until Manager is Idle */ | ||
| 734 | if (!(readl(regs + DBGSTATUS) & DBG_BUSY)) | ||
| 735 | break; | ||
| 736 | |||
| 737 | cpu_relax(); | ||
| 738 | } while (--loops); | ||
| 739 | |||
| 740 | if (!loops) | ||
| 741 | return true; | ||
| 742 | |||
| 743 | return false; | ||
| 744 | } | ||
| 745 | |||
| 746 | static inline void _execute_DBGINSN(struct pl330_thread *thrd, | ||
| 747 | u8 insn[], bool as_manager) | ||
| 748 | { | ||
| 749 | void __iomem *regs = thrd->dmac->pinfo->base; | ||
| 750 | u32 val; | ||
| 751 | |||
| 752 | val = (insn[0] << 16) | (insn[1] << 24); | ||
| 753 | if (!as_manager) { | ||
| 754 | val |= (1 << 0); | ||
| 755 | val |= (thrd->id << 8); /* Channel Number */ | ||
| 756 | } | ||
| 757 | writel(val, regs + DBGINST0); | ||
| 758 | |||
| 759 | val = *((u32 *)&insn[2]); | ||
| 760 | writel(val, regs + DBGINST1); | ||
| 761 | |||
| 762 | /* If timed out due to halted state-machine */ | ||
| 763 | if (_until_dmac_idle(thrd)) { | ||
| 764 | dev_err(thrd->dmac->pinfo->dev, "DMAC halted!\n"); | ||
| 765 | return; | ||
| 766 | } | ||
| 767 | |||
| 768 | /* Get going */ | ||
| 769 | writel(0, regs + DBGCMD); | ||
| 770 | } | ||
| 771 | |||
| 772 | /* | ||
| 773 | * Mark a _pl330_req as free. | ||
| 774 | * We do it by writing DMAEND as the first instruction | ||
| 775 | * because no valid request is going to have DMAEND as | ||
| 776 | * its first instruction to execute. | ||
| 777 | */ | ||
| 778 | static void mark_free(struct pl330_thread *thrd, int idx) | ||
| 779 | { | ||
| 780 | struct _pl330_req *req = &thrd->req[idx]; | ||
| 781 | |||
| 782 | _emit_END(0, req->mc_cpu); | ||
| 783 | req->mc_len = 0; | ||
| 784 | |||
| 785 | thrd->req_running = -1; | ||
| 786 | } | ||
| 787 | |||
| 788 | static inline u32 _state(struct pl330_thread *thrd) | ||
| 789 | { | ||
| 790 | void __iomem *regs = thrd->dmac->pinfo->base; | ||
| 791 | u32 val; | ||
| 792 | |||
| 793 | if (is_manager(thrd)) | ||
| 794 | val = readl(regs + DS) & 0xf; | ||
| 795 | else | ||
| 796 | val = readl(regs + CS(thrd->id)) & 0xf; | ||
| 797 | |||
| 798 | switch (val) { | ||
| 799 | case DS_ST_STOP: | ||
| 800 | return PL330_STATE_STOPPED; | ||
| 801 | case DS_ST_EXEC: | ||
| 802 | return PL330_STATE_EXECUTING; | ||
| 803 | case DS_ST_CMISS: | ||
| 804 | return PL330_STATE_CACHEMISS; | ||
| 805 | case DS_ST_UPDTPC: | ||
| 806 | return PL330_STATE_UPDTPC; | ||
| 807 | case DS_ST_WFE: | ||
| 808 | return PL330_STATE_WFE; | ||
| 809 | case DS_ST_FAULT: | ||
| 810 | return PL330_STATE_FAULTING; | ||
| 811 | case DS_ST_ATBRR: | ||
| 812 | if (is_manager(thrd)) | ||
| 813 | return PL330_STATE_INVALID; | ||
| 814 | else | ||
| 815 | return PL330_STATE_ATBARRIER; | ||
| 816 | case DS_ST_QBUSY: | ||
| 817 | if (is_manager(thrd)) | ||
| 818 | return PL330_STATE_INVALID; | ||
| 819 | else | ||
| 820 | return PL330_STATE_QUEUEBUSY; | ||
| 821 | case DS_ST_WFP: | ||
| 822 | if (is_manager(thrd)) | ||
| 823 | return PL330_STATE_INVALID; | ||
| 824 | else | ||
| 825 | return PL330_STATE_WFP; | ||
| 826 | case DS_ST_KILL: | ||
| 827 | if (is_manager(thrd)) | ||
| 828 | return PL330_STATE_INVALID; | ||
| 829 | else | ||
| 830 | return PL330_STATE_KILLING; | ||
| 831 | case DS_ST_CMPLT: | ||
| 832 | if (is_manager(thrd)) | ||
| 833 | return PL330_STATE_INVALID; | ||
| 834 | else | ||
| 835 | return PL330_STATE_COMPLETING; | ||
| 836 | case DS_ST_FLTCMP: | ||
| 837 | if (is_manager(thrd)) | ||
| 838 | return PL330_STATE_INVALID; | ||
| 839 | else | ||
| 840 | return PL330_STATE_FAULT_COMPLETING; | ||
| 841 | default: | ||
| 842 | return PL330_STATE_INVALID; | ||
| 843 | } | ||
| 844 | } | ||
| 845 | |||
| 846 | static void _stop(struct pl330_thread *thrd) | ||
| 847 | { | ||
| 848 | void __iomem *regs = thrd->dmac->pinfo->base; | ||
| 849 | u8 insn[6] = {0, 0, 0, 0, 0, 0}; | ||
| 850 | |||
| 851 | if (_state(thrd) == PL330_STATE_FAULT_COMPLETING) | ||
| 852 | UNTIL(thrd, PL330_STATE_FAULTING | PL330_STATE_KILLING); | ||
| 853 | |||
| 854 | /* Return if nothing needs to be done */ | ||
| 855 | if (_state(thrd) == PL330_STATE_COMPLETING | ||
| 856 | || _state(thrd) == PL330_STATE_KILLING | ||
| 857 | || _state(thrd) == PL330_STATE_STOPPED) | ||
| 858 | return; | ||
| 859 | |||
| 860 | _emit_KILL(0, insn); | ||
| 861 | |||
| 862 | /* Stop generating interrupts for SEV */ | ||
| 863 | writel(readl(regs + INTEN) & ~(1 << thrd->ev), regs + INTEN); | ||
| 864 | |||
| 865 | _execute_DBGINSN(thrd, insn, is_manager(thrd)); | ||
| 866 | } | ||
| 867 | |||
| 868 | /* Start doing req 'idx' of thread 'thrd' */ | ||
| 869 | static bool _trigger(struct pl330_thread *thrd) | ||
| 870 | { | ||
| 871 | void __iomem *regs = thrd->dmac->pinfo->base; | ||
| 872 | struct _pl330_req *req; | ||
| 873 | struct pl330_req *r; | ||
| 874 | struct _arg_GO go; | ||
| 875 | unsigned ns; | ||
| 876 | u8 insn[6] = {0, 0, 0, 0, 0, 0}; | ||
| 877 | int idx; | ||
| 878 | |||
| 879 | /* Return if already ACTIVE */ | ||
| 880 | if (_state(thrd) != PL330_STATE_STOPPED) | ||
| 881 | return true; | ||
| 882 | |||
| 883 | idx = 1 - thrd->lstenq; | ||
| 884 | if (!IS_FREE(&thrd->req[idx])) | ||
| 885 | req = &thrd->req[idx]; | ||
| 886 | else { | ||
| 887 | idx = thrd->lstenq; | ||
| 888 | if (!IS_FREE(&thrd->req[idx])) | ||
| 889 | req = &thrd->req[idx]; | ||
| 890 | else | ||
| 891 | req = NULL; | ||
| 892 | } | ||
| 893 | |||
| 894 | /* Return if no request */ | ||
| 895 | if (!req || !req->r) | ||
| 896 | return true; | ||
| 897 | |||
| 898 | r = req->r; | ||
| 899 | |||
| 900 | if (r->cfg) | ||
| 901 | ns = r->cfg->nonsecure ? 1 : 0; | ||
| 902 | else if (readl(regs + CS(thrd->id)) & CS_CNS) | ||
| 903 | ns = 1; | ||
| 904 | else | ||
| 905 | ns = 0; | ||
| 906 | |||
| 907 | /* See 'Abort Sources' point-4 at Page 2-25 */ | ||
| 908 | if (_manager_ns(thrd) && !ns) | ||
| 909 | dev_info(thrd->dmac->pinfo->dev, "%s:%d Recipe for ABORT!\n", | ||
| 910 | __func__, __LINE__); | ||
| 911 | |||
| 912 | go.chan = thrd->id; | ||
| 913 | go.addr = req->mc_bus; | ||
| 914 | go.ns = ns; | ||
| 915 | _emit_GO(0, insn, &go); | ||
| 916 | |||
| 917 | /* Set to generate interrupts for SEV */ | ||
| 918 | writel(readl(regs + INTEN) | (1 << thrd->ev), regs + INTEN); | ||
| 919 | |||
| 920 | /* Only manager can execute GO */ | ||
| 921 | _execute_DBGINSN(thrd, insn, true); | ||
| 922 | |||
| 923 | thrd->req_running = idx; | ||
| 924 | |||
| 925 | return true; | ||
| 926 | } | ||
| 927 | |||
| 928 | static bool _start(struct pl330_thread *thrd) | ||
| 929 | { | ||
| 930 | switch (_state(thrd)) { | ||
| 931 | case PL330_STATE_FAULT_COMPLETING: | ||
| 932 | UNTIL(thrd, PL330_STATE_FAULTING | PL330_STATE_KILLING); | ||
| 933 | |||
| 934 | if (_state(thrd) == PL330_STATE_KILLING) | ||
| 935 | UNTIL(thrd, PL330_STATE_STOPPED) | ||
| 936 | |||
| 937 | case PL330_STATE_FAULTING: | ||
| 938 | _stop(thrd); | ||
| 939 | |||
| 940 | case PL330_STATE_KILLING: | ||
| 941 | case PL330_STATE_COMPLETING: | ||
| 942 | UNTIL(thrd, PL330_STATE_STOPPED) | ||
| 943 | |||
| 944 | case PL330_STATE_STOPPED: | ||
| 945 | return _trigger(thrd); | ||
| 946 | |||
| 947 | case PL330_STATE_WFP: | ||
| 948 | case PL330_STATE_QUEUEBUSY: | ||
| 949 | case PL330_STATE_ATBARRIER: | ||
| 950 | case PL330_STATE_UPDTPC: | ||
| 951 | case PL330_STATE_CACHEMISS: | ||
| 952 | case PL330_STATE_EXECUTING: | ||
| 953 | return true; | ||
| 954 | |||
| 955 | case PL330_STATE_WFE: /* For RESUME, nothing yet */ | ||
| 956 | default: | ||
| 957 | return false; | ||
| 958 | } | ||
| 959 | } | ||
| 960 | |||
| 961 | static inline int _ldst_memtomem(unsigned dry_run, u8 buf[], | ||
| 962 | const struct _xfer_spec *pxs, int cyc) | ||
| 963 | { | ||
| 964 | int off = 0; | ||
| 965 | |||
| 966 | while (cyc--) { | ||
| 967 | off += _emit_LD(dry_run, &buf[off], ALWAYS); | ||
| 968 | off += _emit_RMB(dry_run, &buf[off]); | ||
| 969 | off += _emit_ST(dry_run, &buf[off], ALWAYS); | ||
| 970 | off += _emit_WMB(dry_run, &buf[off]); | ||
| 971 | } | ||
| 972 | |||
| 973 | return off; | ||
| 974 | } | ||
| 975 | |||
| 976 | static inline int _ldst_devtomem(unsigned dry_run, u8 buf[], | ||
| 977 | const struct _xfer_spec *pxs, int cyc) | ||
| 978 | { | ||
| 979 | int off = 0; | ||
| 980 | |||
| 981 | while (cyc--) { | ||
| 982 | off += _emit_WFP(dry_run, &buf[off], SINGLE, pxs->r->peri); | ||
| 983 | off += _emit_LDP(dry_run, &buf[off], SINGLE, pxs->r->peri); | ||
| 984 | off += _emit_ST(dry_run, &buf[off], ALWAYS); | ||
| 985 | off += _emit_FLUSHP(dry_run, &buf[off], pxs->r->peri); | ||
| 986 | } | ||
| 987 | |||
| 988 | return off; | ||
| 989 | } | ||
| 990 | |||
| 991 | static inline int _ldst_memtodev(unsigned dry_run, u8 buf[], | ||
| 992 | const struct _xfer_spec *pxs, int cyc) | ||
| 993 | { | ||
| 994 | int off = 0; | ||
| 995 | |||
| 996 | while (cyc--) { | ||
| 997 | off += _emit_WFP(dry_run, &buf[off], SINGLE, pxs->r->peri); | ||
| 998 | off += _emit_LD(dry_run, &buf[off], ALWAYS); | ||
| 999 | off += _emit_STP(dry_run, &buf[off], SINGLE, pxs->r->peri); | ||
| 1000 | off += _emit_FLUSHP(dry_run, &buf[off], pxs->r->peri); | ||
| 1001 | } | ||
| 1002 | |||
| 1003 | return off; | ||
| 1004 | } | ||
| 1005 | |||
| 1006 | static int _bursts(unsigned dry_run, u8 buf[], | ||
| 1007 | const struct _xfer_spec *pxs, int cyc) | ||
| 1008 | { | ||
| 1009 | int off = 0; | ||
| 1010 | |||
| 1011 | switch (pxs->r->rqtype) { | ||
| 1012 | case MEMTODEV: | ||
| 1013 | off += _ldst_memtodev(dry_run, &buf[off], pxs, cyc); | ||
| 1014 | break; | ||
| 1015 | case DEVTOMEM: | ||
| 1016 | off += _ldst_devtomem(dry_run, &buf[off], pxs, cyc); | ||
| 1017 | break; | ||
| 1018 | case MEMTOMEM: | ||
| 1019 | off += _ldst_memtomem(dry_run, &buf[off], pxs, cyc); | ||
| 1020 | break; | ||
| 1021 | default: | ||
| 1022 | off += 0x40000000; /* Scare off the Client */ | ||
| 1023 | break; | ||
| 1024 | } | ||
| 1025 | |||
| 1026 | return off; | ||
| 1027 | } | ||
| 1028 | |||
| 1029 | /* Returns bytes consumed and updates bursts */ | ||
| 1030 | static inline int _loop(unsigned dry_run, u8 buf[], | ||
| 1031 | unsigned long *bursts, const struct _xfer_spec *pxs) | ||
| 1032 | { | ||
| 1033 | int cyc, cycmax, szlp, szlpend, szbrst, off; | ||
| 1034 | unsigned lcnt0, lcnt1, ljmp0, ljmp1; | ||
| 1035 | struct _arg_LPEND lpend; | ||
| 1036 | |||
| 1037 | /* Max iterations possible in DMALP is 256 */ | ||
| 1038 | if (*bursts >= 256*256) { | ||
| 1039 | lcnt1 = 256; | ||
| 1040 | lcnt0 = 256; | ||
| 1041 | cyc = *bursts / lcnt1 / lcnt0; | ||
| 1042 | } else if (*bursts > 256) { | ||
| 1043 | lcnt1 = 256; | ||
| 1044 | lcnt0 = *bursts / lcnt1; | ||
| 1045 | cyc = 1; | ||
| 1046 | } else { | ||
| 1047 | lcnt1 = *bursts; | ||
| 1048 | lcnt0 = 0; | ||
| 1049 | cyc = 1; | ||
| 1050 | } | ||
| 1051 | |||
| 1052 | szlp = _emit_LP(1, buf, 0, 0); | ||
| 1053 | szbrst = _bursts(1, buf, pxs, 1); | ||
| 1054 | |||
| 1055 | lpend.cond = ALWAYS; | ||
| 1056 | lpend.forever = false; | ||
| 1057 | lpend.loop = 0; | ||
| 1058 | lpend.bjump = 0; | ||
| 1059 | szlpend = _emit_LPEND(1, buf, &lpend); | ||
| 1060 | |||
| 1061 | if (lcnt0) { | ||
| 1062 | szlp *= 2; | ||
| 1063 | szlpend *= 2; | ||
| 1064 | } | ||
| 1065 | |||
| 1066 | /* | ||
| 1067 | * Max bursts that we can unroll due to limit on the | ||
| 1068 | * size of backward jump that can be encoded in DMALPEND | ||
| 1069 | * which is 8-bits and hence 255 | ||
| 1070 | */ | ||
| 1071 | cycmax = (255 - (szlp + szlpend)) / szbrst; | ||
| 1072 | |||
| 1073 | cyc = (cycmax < cyc) ? cycmax : cyc; | ||
| 1074 | |||
| 1075 | off = 0; | ||
| 1076 | |||
| 1077 | if (lcnt0) { | ||
| 1078 | off += _emit_LP(dry_run, &buf[off], 0, lcnt0); | ||
| 1079 | ljmp0 = off; | ||
| 1080 | } | ||
| 1081 | |||
| 1082 | off += _emit_LP(dry_run, &buf[off], 1, lcnt1); | ||
| 1083 | ljmp1 = off; | ||
| 1084 | |||
| 1085 | off += _bursts(dry_run, &buf[off], pxs, cyc); | ||
| 1086 | |||
| 1087 | lpend.cond = ALWAYS; | ||
| 1088 | lpend.forever = false; | ||
| 1089 | lpend.loop = 1; | ||
| 1090 | lpend.bjump = off - ljmp1; | ||
| 1091 | off += _emit_LPEND(dry_run, &buf[off], &lpend); | ||
| 1092 | |||
| 1093 | if (lcnt0) { | ||
| 1094 | lpend.cond = ALWAYS; | ||
| 1095 | lpend.forever = false; | ||
| 1096 | lpend.loop = 0; | ||
| 1097 | lpend.bjump = off - ljmp0; | ||
| 1098 | off += _emit_LPEND(dry_run, &buf[off], &lpend); | ||
| 1099 | } | ||
| 1100 | |||
| 1101 | *bursts = lcnt1 * cyc; | ||
| 1102 | if (lcnt0) | ||
| 1103 | *bursts *= lcnt0; | ||
| 1104 | |||
| 1105 | return off; | ||
| 1106 | } | ||
| 1107 | |||
| 1108 | static inline int _setup_loops(unsigned dry_run, u8 buf[], | ||
| 1109 | const struct _xfer_spec *pxs) | ||
| 1110 | { | ||
| 1111 | struct pl330_xfer *x = pxs->x; | ||
| 1112 | u32 ccr = pxs->ccr; | ||
| 1113 | unsigned long c, bursts = BYTE_TO_BURST(x->bytes, ccr); | ||
| 1114 | int off = 0; | ||
| 1115 | |||
| 1116 | while (bursts) { | ||
| 1117 | c = bursts; | ||
| 1118 | off += _loop(dry_run, &buf[off], &c, pxs); | ||
| 1119 | bursts -= c; | ||
| 1120 | } | ||
| 1121 | |||
| 1122 | return off; | ||
| 1123 | } | ||
| 1124 | |||
| 1125 | static inline int _setup_xfer(unsigned dry_run, u8 buf[], | ||
| 1126 | const struct _xfer_spec *pxs) | ||
| 1127 | { | ||
| 1128 | struct pl330_xfer *x = pxs->x; | ||
| 1129 | int off = 0; | ||
| 1130 | |||
| 1131 | /* DMAMOV SAR, x->src_addr */ | ||
| 1132 | off += _emit_MOV(dry_run, &buf[off], SAR, x->src_addr); | ||
| 1133 | /* DMAMOV DAR, x->dst_addr */ | ||
| 1134 | off += _emit_MOV(dry_run, &buf[off], DAR, x->dst_addr); | ||
| 1135 | |||
| 1136 | /* Setup Loop(s) */ | ||
| 1137 | off += _setup_loops(dry_run, &buf[off], pxs); | ||
| 1138 | |||
| 1139 | return off; | ||
| 1140 | } | ||
| 1141 | |||
| 1142 | /* | ||
| 1143 | * A req is a sequence of one or more xfer units. | ||
| 1144 | * Returns the number of bytes taken to setup the MC for the req. | ||
| 1145 | */ | ||
| 1146 | static int _setup_req(unsigned dry_run, struct pl330_thread *thrd, | ||
| 1147 | unsigned index, struct _xfer_spec *pxs) | ||
| 1148 | { | ||
| 1149 | struct _pl330_req *req = &thrd->req[index]; | ||
| 1150 | struct pl330_xfer *x; | ||
| 1151 | u8 *buf = req->mc_cpu; | ||
| 1152 | int off = 0; | ||
| 1153 | |||
| 1154 | PL330_DBGMC_START(req->mc_bus); | ||
| 1155 | |||
| 1156 | /* DMAMOV CCR, ccr */ | ||
| 1157 | off += _emit_MOV(dry_run, &buf[off], CCR, pxs->ccr); | ||
| 1158 | |||
| 1159 | x = pxs->r->x; | ||
| 1160 | do { | ||
| 1161 | /* Error if xfer length is not aligned at burst size */ | ||
| 1162 | if (x->bytes % (BRST_SIZE(pxs->ccr) * BRST_LEN(pxs->ccr))) | ||
| 1163 | return -EINVAL; | ||
| 1164 | |||
| 1165 | pxs->x = x; | ||
| 1166 | off += _setup_xfer(dry_run, &buf[off], pxs); | ||
| 1167 | |||
| 1168 | x = x->next; | ||
| 1169 | } while (x); | ||
| 1170 | |||
| 1171 | /* DMASEV peripheral/event */ | ||
| 1172 | off += _emit_SEV(dry_run, &buf[off], thrd->ev); | ||
| 1173 | /* DMAEND */ | ||
| 1174 | off += _emit_END(dry_run, &buf[off]); | ||
| 1175 | |||
| 1176 | return off; | ||
| 1177 | } | ||
| 1178 | |||
| 1179 | static inline u32 _prepare_ccr(const struct pl330_reqcfg *rqc) | ||
| 1180 | { | ||
| 1181 | u32 ccr = 0; | ||
| 1182 | |||
| 1183 | if (rqc->src_inc) | ||
| 1184 | ccr |= CC_SRCINC; | ||
| 1185 | |||
| 1186 | if (rqc->dst_inc) | ||
| 1187 | ccr |= CC_DSTINC; | ||
| 1188 | |||
| 1189 | /* We set same protection levels for Src and DST for now */ | ||
| 1190 | if (rqc->privileged) | ||
| 1191 | ccr |= CC_SRCPRI | CC_DSTPRI; | ||
| 1192 | if (rqc->nonsecure) | ||
| 1193 | ccr |= CC_SRCNS | CC_DSTNS; | ||
| 1194 | if (rqc->insnaccess) | ||
| 1195 | ccr |= CC_SRCIA | CC_DSTIA; | ||
| 1196 | |||
| 1197 | ccr |= (((rqc->brst_len - 1) & 0xf) << CC_SRCBRSTLEN_SHFT); | ||
| 1198 | ccr |= (((rqc->brst_len - 1) & 0xf) << CC_DSTBRSTLEN_SHFT); | ||
| 1199 | |||
| 1200 | ccr |= (rqc->brst_size << CC_SRCBRSTSIZE_SHFT); | ||
| 1201 | ccr |= (rqc->brst_size << CC_DSTBRSTSIZE_SHFT); | ||
| 1202 | |||
| 1203 | ccr |= (rqc->scctl << CC_SRCCCTRL_SHFT); | ||
| 1204 | ccr |= (rqc->dcctl << CC_DSTCCTRL_SHFT); | ||
| 1205 | |||
| 1206 | ccr |= (rqc->swap << CC_SWAP_SHFT); | ||
| 1207 | |||
| 1208 | return ccr; | ||
| 1209 | } | ||
| 1210 | |||
| 1211 | static inline bool _is_valid(u32 ccr) | ||
| 1212 | { | ||
| 1213 | enum pl330_dstcachectrl dcctl; | ||
| 1214 | enum pl330_srccachectrl scctl; | ||
| 1215 | |||
| 1216 | dcctl = (ccr >> CC_DSTCCTRL_SHFT) & CC_DRCCCTRL_MASK; | ||
| 1217 | scctl = (ccr >> CC_SRCCCTRL_SHFT) & CC_SRCCCTRL_MASK; | ||
| 1218 | |||
| 1219 | if (dcctl == DINVALID1 || dcctl == DINVALID2 | ||
| 1220 | || scctl == SINVALID1 || scctl == SINVALID2) | ||
| 1221 | return false; | ||
| 1222 | else | ||
| 1223 | return true; | ||
| 1224 | } | ||
| 1225 | |||
| 1226 | /* | ||
| 1227 | * Submit a list of xfers after which the client wants notification. | ||
| 1228 | * Client is not notified after each xfer unit, just once after all | ||
| 1229 | * xfer units are done or some error occurs. | ||
| 1230 | */ | ||
| 1231 | int pl330_submit_req(void *ch_id, struct pl330_req *r) | ||
| 1232 | { | ||
| 1233 | struct pl330_thread *thrd = ch_id; | ||
| 1234 | struct pl330_dmac *pl330; | ||
| 1235 | struct pl330_info *pi; | ||
| 1236 | struct _xfer_spec xs; | ||
| 1237 | unsigned long flags; | ||
| 1238 | void __iomem *regs; | ||
| 1239 | unsigned idx; | ||
| 1240 | u32 ccr; | ||
| 1241 | int ret = 0; | ||
| 1242 | |||
| 1243 | /* No Req or Unacquired Channel or DMAC */ | ||
| 1244 | if (!r || !thrd || thrd->free) | ||
| 1245 | return -EINVAL; | ||
| 1246 | |||
| 1247 | pl330 = thrd->dmac; | ||
| 1248 | pi = pl330->pinfo; | ||
| 1249 | regs = pi->base; | ||
| 1250 | |||
| 1251 | if (pl330->state == DYING | ||
| 1252 | || pl330->dmac_tbd.reset_chan & (1 << thrd->id)) { | ||
| 1253 | dev_info(thrd->dmac->pinfo->dev, "%s:%d\n", | ||
| 1254 | __func__, __LINE__); | ||
| 1255 | return -EAGAIN; | ||
| 1256 | } | ||
| 1257 | |||
| 1258 | /* If request for non-existing peripheral */ | ||
| 1259 | if (r->rqtype != MEMTOMEM && r->peri >= pi->pcfg.num_peri) { | ||
| 1260 | dev_info(thrd->dmac->pinfo->dev, | ||
| 1261 | "%s:%d Invalid peripheral(%u)!\n", | ||
| 1262 | __func__, __LINE__, r->peri); | ||
| 1263 | return -EINVAL; | ||
| 1264 | } | ||
| 1265 | |||
| 1266 | spin_lock_irqsave(&pl330->lock, flags); | ||
| 1267 | |||
| 1268 | if (_queue_full(thrd)) { | ||
| 1269 | ret = -EAGAIN; | ||
| 1270 | goto xfer_exit; | ||
| 1271 | } | ||
| 1272 | |||
| 1273 | /* Prefer Secure Channel */ | ||
| 1274 | if (!_manager_ns(thrd)) | ||
| 1275 | r->cfg->nonsecure = 0; | ||
| 1276 | else | ||
| 1277 | r->cfg->nonsecure = 1; | ||
| 1278 | |||
| 1279 | /* Use last settings, if not provided */ | ||
| 1280 | if (r->cfg) | ||
| 1281 | ccr = _prepare_ccr(r->cfg); | ||
| 1282 | else | ||
| 1283 | ccr = readl(regs + CC(thrd->id)); | ||
| 1284 | |||
| 1285 | /* If this req doesn't have valid xfer settings */ | ||
| 1286 | if (!_is_valid(ccr)) { | ||
| 1287 | ret = -EINVAL; | ||
| 1288 | dev_info(thrd->dmac->pinfo->dev, "%s:%d Invalid CCR(%x)!\n", | ||
| 1289 | __func__, __LINE__, ccr); | ||
| 1290 | goto xfer_exit; | ||
| 1291 | } | ||
| 1292 | |||
| 1293 | idx = IS_FREE(&thrd->req[0]) ? 0 : 1; | ||
| 1294 | |||
| 1295 | xs.ccr = ccr; | ||
| 1296 | xs.r = r; | ||
| 1297 | |||
| 1298 | /* First dry run to check if req is acceptable */ | ||
| 1299 | ret = _setup_req(1, thrd, idx, &xs); | ||
| 1300 | if (ret < 0) | ||
| 1301 | goto xfer_exit; | ||
| 1302 | |||
| 1303 | if (ret > pi->mcbufsz / 2) { | ||
| 1304 | dev_info(thrd->dmac->pinfo->dev, | ||
| 1305 | "%s:%d Trying increasing mcbufsz\n", | ||
| 1306 | __func__, __LINE__); | ||
| 1307 | ret = -ENOMEM; | ||
| 1308 | goto xfer_exit; | ||
| 1309 | } | ||
| 1310 | |||
| 1311 | /* Hook the request */ | ||
| 1312 | thrd->lstenq = idx; | ||
| 1313 | thrd->req[idx].mc_len = _setup_req(0, thrd, idx, &xs); | ||
| 1314 | thrd->req[idx].r = r; | ||
| 1315 | |||
| 1316 | ret = 0; | ||
| 1317 | |||
| 1318 | xfer_exit: | ||
| 1319 | spin_unlock_irqrestore(&pl330->lock, flags); | ||
| 1320 | |||
| 1321 | return ret; | ||
| 1322 | } | ||
| 1323 | EXPORT_SYMBOL(pl330_submit_req); | ||
| 1324 | |||
| 1325 | static void pl330_dotask(unsigned long data) | ||
| 1326 | { | ||
| 1327 | struct pl330_dmac *pl330 = (struct pl330_dmac *) data; | ||
| 1328 | struct pl330_info *pi = pl330->pinfo; | ||
| 1329 | unsigned long flags; | ||
| 1330 | int i; | ||
| 1331 | |||
| 1332 | spin_lock_irqsave(&pl330->lock, flags); | ||
| 1333 | |||
| 1334 | /* The DMAC itself gone nuts */ | ||
| 1335 | if (pl330->dmac_tbd.reset_dmac) { | ||
| 1336 | pl330->state = DYING; | ||
| 1337 | /* Reset the manager too */ | ||
| 1338 | pl330->dmac_tbd.reset_mngr = true; | ||
| 1339 | /* Clear the reset flag */ | ||
| 1340 | pl330->dmac_tbd.reset_dmac = false; | ||
| 1341 | } | ||
| 1342 | |||
| 1343 | if (pl330->dmac_tbd.reset_mngr) { | ||
| 1344 | _stop(pl330->manager); | ||
| 1345 | /* Reset all channels */ | ||
| 1346 | pl330->dmac_tbd.reset_chan = (1 << pi->pcfg.num_chan) - 1; | ||
| 1347 | /* Clear the reset flag */ | ||
| 1348 | pl330->dmac_tbd.reset_mngr = false; | ||
| 1349 | } | ||
| 1350 | |||
| 1351 | for (i = 0; i < pi->pcfg.num_chan; i++) { | ||
| 1352 | |||
| 1353 | if (pl330->dmac_tbd.reset_chan & (1 << i)) { | ||
| 1354 | struct pl330_thread *thrd = &pl330->channels[i]; | ||
| 1355 | void __iomem *regs = pi->base; | ||
| 1356 | enum pl330_op_err err; | ||
| 1357 | |||
| 1358 | _stop(thrd); | ||
| 1359 | |||
| 1360 | if (readl(regs + FSC) & (1 << thrd->id)) | ||
| 1361 | err = PL330_ERR_FAIL; | ||
| 1362 | else | ||
| 1363 | err = PL330_ERR_ABORT; | ||
| 1364 | |||
| 1365 | spin_unlock_irqrestore(&pl330->lock, flags); | ||
| 1366 | |||
| 1367 | _callback(thrd->req[1 - thrd->lstenq].r, err); | ||
| 1368 | _callback(thrd->req[thrd->lstenq].r, err); | ||
| 1369 | |||
| 1370 | spin_lock_irqsave(&pl330->lock, flags); | ||
| 1371 | |||
| 1372 | thrd->req[0].r = NULL; | ||
| 1373 | thrd->req[1].r = NULL; | ||
| 1374 | mark_free(thrd, 0); | ||
| 1375 | mark_free(thrd, 1); | ||
| 1376 | |||
| 1377 | /* Clear the reset flag */ | ||
| 1378 | pl330->dmac_tbd.reset_chan &= ~(1 << i); | ||
| 1379 | } | ||
| 1380 | } | ||
| 1381 | |||
| 1382 | spin_unlock_irqrestore(&pl330->lock, flags); | ||
| 1383 | |||
| 1384 | return; | ||
| 1385 | } | ||
| 1386 | |||
| 1387 | /* Returns 1 if state was updated, 0 otherwise */ | ||
| 1388 | int pl330_update(const struct pl330_info *pi) | ||
| 1389 | { | ||
| 1390 | struct _pl330_req *rqdone; | ||
| 1391 | struct pl330_dmac *pl330; | ||
| 1392 | unsigned long flags; | ||
| 1393 | void __iomem *regs; | ||
| 1394 | u32 val; | ||
| 1395 | int id, ev, ret = 0; | ||
| 1396 | |||
| 1397 | if (!pi || !pi->pl330_data) | ||
| 1398 | return 0; | ||
| 1399 | |||
| 1400 | regs = pi->base; | ||
| 1401 | pl330 = pi->pl330_data; | ||
| 1402 | |||
| 1403 | spin_lock_irqsave(&pl330->lock, flags); | ||
| 1404 | |||
| 1405 | val = readl(regs + FSM) & 0x1; | ||
| 1406 | if (val) | ||
| 1407 | pl330->dmac_tbd.reset_mngr = true; | ||
| 1408 | else | ||
| 1409 | pl330->dmac_tbd.reset_mngr = false; | ||
| 1410 | |||
| 1411 | val = readl(regs + FSC) & ((1 << pi->pcfg.num_chan) - 1); | ||
| 1412 | pl330->dmac_tbd.reset_chan |= val; | ||
| 1413 | if (val) { | ||
| 1414 | int i = 0; | ||
| 1415 | while (i < pi->pcfg.num_chan) { | ||
| 1416 | if (val & (1 << i)) { | ||
| 1417 | dev_info(pi->dev, | ||
| 1418 | "Reset Channel-%d\t CS-%x FTC-%x\n", | ||
| 1419 | i, readl(regs + CS(i)), | ||
| 1420 | readl(regs + FTC(i))); | ||
| 1421 | _stop(&pl330->channels[i]); | ||
| 1422 | } | ||
| 1423 | i++; | ||
| 1424 | } | ||
| 1425 | } | ||
| 1426 | |||
| 1427 | /* Check which event happened i.e, thread notified */ | ||
| 1428 | val = readl(regs + ES); | ||
| 1429 | if (pi->pcfg.num_events < 32 | ||
| 1430 | && val & ~((1 << pi->pcfg.num_events) - 1)) { | ||
| 1431 | pl330->dmac_tbd.reset_dmac = true; | ||
| 1432 | dev_err(pi->dev, "%s:%d Unexpected!\n", __func__, __LINE__); | ||
| 1433 | ret = 1; | ||
| 1434 | goto updt_exit; | ||
| 1435 | } | ||
| 1436 | |||
| 1437 | for (ev = 0; ev < pi->pcfg.num_events; ev++) { | ||
| 1438 | if (val & (1 << ev)) { /* Event occurred */ | ||
| 1439 | struct pl330_thread *thrd; | ||
| 1440 | u32 inten = readl(regs + INTEN); | ||
| 1441 | int active; | ||
| 1442 | |||
| 1443 | /* Clear the event */ | ||
| 1444 | if (inten & (1 << ev)) | ||
| 1445 | writel(1 << ev, regs + INTCLR); | ||
| 1446 | |||
| 1447 | ret = 1; | ||
| 1448 | |||
| 1449 | id = pl330->events[ev]; | ||
| 1450 | |||
| 1451 | thrd = &pl330->channels[id]; | ||
| 1452 | |||
| 1453 | active = thrd->req_running; | ||
| 1454 | if (active == -1) /* Aborted */ | ||
| 1455 | continue; | ||
| 1456 | |||
| 1457 | rqdone = &thrd->req[active]; | ||
| 1458 | mark_free(thrd, active); | ||
| 1459 | |||
| 1460 | /* Get going again ASAP */ | ||
| 1461 | _start(thrd); | ||
| 1462 | |||
| 1463 | /* For now, just make a list of callbacks to be done */ | ||
| 1464 | list_add_tail(&rqdone->rqd, &pl330->req_done); | ||
| 1465 | } | ||
| 1466 | } | ||
| 1467 | |||
| 1468 | /* Now that we are in no hurry, do the callbacks */ | ||
| 1469 | while (!list_empty(&pl330->req_done)) { | ||
| 1470 | struct pl330_req *r; | ||
| 1471 | |||
| 1472 | rqdone = container_of(pl330->req_done.next, | ||
| 1473 | struct _pl330_req, rqd); | ||
| 1474 | |||
| 1475 | list_del_init(&rqdone->rqd); | ||
| 1476 | |||
| 1477 | /* Detach the req */ | ||
| 1478 | r = rqdone->r; | ||
| 1479 | rqdone->r = NULL; | ||
| 1480 | |||
| 1481 | spin_unlock_irqrestore(&pl330->lock, flags); | ||
| 1482 | _callback(r, PL330_ERR_NONE); | ||
| 1483 | spin_lock_irqsave(&pl330->lock, flags); | ||
| 1484 | } | ||
| 1485 | |||
| 1486 | updt_exit: | ||
| 1487 | spin_unlock_irqrestore(&pl330->lock, flags); | ||
| 1488 | |||
| 1489 | if (pl330->dmac_tbd.reset_dmac | ||
| 1490 | || pl330->dmac_tbd.reset_mngr | ||
| 1491 | || pl330->dmac_tbd.reset_chan) { | ||
| 1492 | ret = 1; | ||
| 1493 | tasklet_schedule(&pl330->tasks); | ||
| 1494 | } | ||
| 1495 | |||
| 1496 | return ret; | ||
| 1497 | } | ||
| 1498 | EXPORT_SYMBOL(pl330_update); | ||
| 1499 | |||
| 1500 | int pl330_chan_ctrl(void *ch_id, enum pl330_chan_op op) | ||
| 1501 | { | ||
| 1502 | struct pl330_thread *thrd = ch_id; | ||
| 1503 | struct pl330_dmac *pl330; | ||
| 1504 | unsigned long flags; | ||
| 1505 | int ret = 0, active; | ||
| 1506 | |||
| 1507 | if (!thrd || thrd->free || thrd->dmac->state == DYING) | ||
| 1508 | return -EINVAL; | ||
| 1509 | |||
| 1510 | pl330 = thrd->dmac; | ||
| 1511 | active = thrd->req_running; | ||
| 1512 | |||
| 1513 | spin_lock_irqsave(&pl330->lock, flags); | ||
| 1514 | |||
| 1515 | switch (op) { | ||
| 1516 | case PL330_OP_FLUSH: | ||
| 1517 | /* Make sure the channel is stopped */ | ||
| 1518 | _stop(thrd); | ||
| 1519 | |||
| 1520 | thrd->req[0].r = NULL; | ||
| 1521 | thrd->req[1].r = NULL; | ||
| 1522 | mark_free(thrd, 0); | ||
| 1523 | mark_free(thrd, 1); | ||
| 1524 | break; | ||
| 1525 | |||
| 1526 | case PL330_OP_ABORT: | ||
| 1527 | /* Make sure the channel is stopped */ | ||
| 1528 | _stop(thrd); | ||
| 1529 | |||
| 1530 | /* ABORT is only for the active req */ | ||
| 1531 | if (active == -1) | ||
| 1532 | break; | ||
| 1533 | |||
| 1534 | thrd->req[active].r = NULL; | ||
| 1535 | mark_free(thrd, active); | ||
| 1536 | |||
| 1537 | /* Start the next */ | ||
| 1538 | case PL330_OP_START: | ||
| 1539 | if ((active == -1) && !_start(thrd)) | ||
| 1540 | ret = -EIO; | ||
| 1541 | break; | ||
| 1542 | |||
| 1543 | default: | ||
| 1544 | ret = -EINVAL; | ||
| 1545 | } | ||
| 1546 | |||
| 1547 | spin_unlock_irqrestore(&pl330->lock, flags); | ||
| 1548 | return ret; | ||
| 1549 | } | ||
| 1550 | EXPORT_SYMBOL(pl330_chan_ctrl); | ||
| 1551 | |||
| 1552 | int pl330_chan_status(void *ch_id, struct pl330_chanstatus *pstatus) | ||
| 1553 | { | ||
| 1554 | struct pl330_thread *thrd = ch_id; | ||
| 1555 | struct pl330_dmac *pl330; | ||
| 1556 | struct pl330_info *pi; | ||
| 1557 | void __iomem *regs; | ||
| 1558 | int active; | ||
| 1559 | u32 val; | ||
| 1560 | |||
| 1561 | if (!pstatus || !thrd || thrd->free) | ||
| 1562 | return -EINVAL; | ||
| 1563 | |||
| 1564 | pl330 = thrd->dmac; | ||
| 1565 | pi = pl330->pinfo; | ||
| 1566 | regs = pi->base; | ||
| 1567 | |||
| 1568 | /* The client should remove the DMAC and add again */ | ||
| 1569 | if (pl330->state == DYING) | ||
| 1570 | pstatus->dmac_halted = true; | ||
| 1571 | else | ||
| 1572 | pstatus->dmac_halted = false; | ||
| 1573 | |||
| 1574 | val = readl(regs + FSC); | ||
| 1575 | if (val & (1 << thrd->id)) | ||
| 1576 | pstatus->faulting = true; | ||
| 1577 | else | ||
| 1578 | pstatus->faulting = false; | ||
| 1579 | |||
| 1580 | active = thrd->req_running; | ||
| 1581 | |||
| 1582 | if (active == -1) { | ||
| 1583 | /* Indicate that the thread is not running */ | ||
| 1584 | pstatus->top_req = NULL; | ||
| 1585 | pstatus->wait_req = NULL; | ||
| 1586 | } else { | ||
| 1587 | pstatus->top_req = thrd->req[active].r; | ||
| 1588 | pstatus->wait_req = !IS_FREE(&thrd->req[1 - active]) | ||
| 1589 | ? thrd->req[1 - active].r : NULL; | ||
| 1590 | } | ||
| 1591 | |||
| 1592 | pstatus->src_addr = readl(regs + SA(thrd->id)); | ||
| 1593 | pstatus->dst_addr = readl(regs + DA(thrd->id)); | ||
| 1594 | |||
| 1595 | return 0; | ||
| 1596 | } | ||
| 1597 | EXPORT_SYMBOL(pl330_chan_status); | ||
| 1598 | |||
| 1599 | /* Reserve an event */ | ||
| 1600 | static inline int _alloc_event(struct pl330_thread *thrd) | ||
| 1601 | { | ||
| 1602 | struct pl330_dmac *pl330 = thrd->dmac; | ||
| 1603 | struct pl330_info *pi = pl330->pinfo; | ||
| 1604 | int ev; | ||
| 1605 | |||
| 1606 | for (ev = 0; ev < pi->pcfg.num_events; ev++) | ||
| 1607 | if (pl330->events[ev] == -1) { | ||
| 1608 | pl330->events[ev] = thrd->id; | ||
| 1609 | return ev; | ||
| 1610 | } | ||
| 1611 | |||
| 1612 | return -1; | ||
| 1613 | } | ||
| 1614 | |||
| 1615 | static bool _chan_ns(const struct pl330_info *pi, int i) | ||
| 1616 | { | ||
| 1617 | return pi->pcfg.irq_ns & (1 << i); | ||
| 1618 | } | ||
| 1619 | |||
| 1620 | /* Upon success, returns IdentityToken for the | ||
| 1621 | * allocated channel, NULL otherwise. | ||
| 1622 | */ | ||
| 1623 | void *pl330_request_channel(const struct pl330_info *pi) | ||
| 1624 | { | ||
| 1625 | struct pl330_thread *thrd = NULL; | ||
| 1626 | struct pl330_dmac *pl330; | ||
| 1627 | unsigned long flags; | ||
| 1628 | int chans, i; | ||
| 1629 | |||
| 1630 | if (!pi || !pi->pl330_data) | ||
| 1631 | return NULL; | ||
| 1632 | |||
| 1633 | pl330 = pi->pl330_data; | ||
| 1634 | |||
| 1635 | if (pl330->state == DYING) | ||
| 1636 | return NULL; | ||
| 1637 | |||
| 1638 | chans = pi->pcfg.num_chan; | ||
| 1639 | |||
| 1640 | spin_lock_irqsave(&pl330->lock, flags); | ||
| 1641 | |||
| 1642 | for (i = 0; i < chans; i++) { | ||
| 1643 | thrd = &pl330->channels[i]; | ||
| 1644 | if ((thrd->free) && (!_manager_ns(thrd) || | ||
| 1645 | _chan_ns(pi, i))) { | ||
| 1646 | thrd->ev = _alloc_event(thrd); | ||
| 1647 | if (thrd->ev >= 0) { | ||
| 1648 | thrd->free = false; | ||
| 1649 | thrd->lstenq = 1; | ||
| 1650 | thrd->req[0].r = NULL; | ||
| 1651 | mark_free(thrd, 0); | ||
| 1652 | thrd->req[1].r = NULL; | ||
| 1653 | mark_free(thrd, 1); | ||
| 1654 | break; | ||
| 1655 | } | ||
| 1656 | } | ||
| 1657 | thrd = NULL; | ||
| 1658 | } | ||
| 1659 | |||
| 1660 | spin_unlock_irqrestore(&pl330->lock, flags); | ||
| 1661 | |||
| 1662 | return thrd; | ||
| 1663 | } | ||
| 1664 | EXPORT_SYMBOL(pl330_request_channel); | ||
| 1665 | |||
| 1666 | /* Release an event */ | ||
| 1667 | static inline void _free_event(struct pl330_thread *thrd, int ev) | ||
| 1668 | { | ||
| 1669 | struct pl330_dmac *pl330 = thrd->dmac; | ||
| 1670 | struct pl330_info *pi = pl330->pinfo; | ||
| 1671 | |||
| 1672 | /* If the event is valid and was held by the thread */ | ||
| 1673 | if (ev >= 0 && ev < pi->pcfg.num_events | ||
| 1674 | && pl330->events[ev] == thrd->id) | ||
| 1675 | pl330->events[ev] = -1; | ||
| 1676 | } | ||
| 1677 | |||
| 1678 | void pl330_release_channel(void *ch_id) | ||
| 1679 | { | ||
| 1680 | struct pl330_thread *thrd = ch_id; | ||
| 1681 | struct pl330_dmac *pl330; | ||
| 1682 | unsigned long flags; | ||
| 1683 | |||
| 1684 | if (!thrd || thrd->free) | ||
| 1685 | return; | ||
| 1686 | |||
| 1687 | _stop(thrd); | ||
| 1688 | |||
| 1689 | _callback(thrd->req[1 - thrd->lstenq].r, PL330_ERR_ABORT); | ||
| 1690 | _callback(thrd->req[thrd->lstenq].r, PL330_ERR_ABORT); | ||
| 1691 | |||
| 1692 | pl330 = thrd->dmac; | ||
| 1693 | |||
| 1694 | spin_lock_irqsave(&pl330->lock, flags); | ||
| 1695 | _free_event(thrd, thrd->ev); | ||
| 1696 | thrd->free = true; | ||
| 1697 | spin_unlock_irqrestore(&pl330->lock, flags); | ||
| 1698 | } | ||
| 1699 | EXPORT_SYMBOL(pl330_release_channel); | ||
| 1700 | |||
| 1701 | /* Initialize the structure for PL330 configuration, that can be used | ||
| 1702 | * by the client driver the make best use of the DMAC | ||
| 1703 | */ | ||
| 1704 | static void read_dmac_config(struct pl330_info *pi) | ||
| 1705 | { | ||
| 1706 | void __iomem *regs = pi->base; | ||
| 1707 | u32 val; | ||
| 1708 | |||
| 1709 | val = readl(regs + CRD) >> CRD_DATA_WIDTH_SHIFT; | ||
| 1710 | val &= CRD_DATA_WIDTH_MASK; | ||
| 1711 | pi->pcfg.data_bus_width = 8 * (1 << val); | ||
| 1712 | |||
| 1713 | val = readl(regs + CRD) >> CRD_DATA_BUFF_SHIFT; | ||
| 1714 | val &= CRD_DATA_BUFF_MASK; | ||
| 1715 | pi->pcfg.data_buf_dep = val + 1; | ||
| 1716 | |||
| 1717 | val = readl(regs + CR0) >> CR0_NUM_CHANS_SHIFT; | ||
| 1718 | val &= CR0_NUM_CHANS_MASK; | ||
| 1719 | val += 1; | ||
| 1720 | pi->pcfg.num_chan = val; | ||
| 1721 | |||
| 1722 | val = readl(regs + CR0); | ||
| 1723 | if (val & CR0_PERIPH_REQ_SET) { | ||
| 1724 | val = (val >> CR0_NUM_PERIPH_SHIFT) & CR0_NUM_PERIPH_MASK; | ||
| 1725 | val += 1; | ||
| 1726 | pi->pcfg.num_peri = val; | ||
| 1727 | pi->pcfg.peri_ns = readl(regs + CR4); | ||
| 1728 | } else { | ||
| 1729 | pi->pcfg.num_peri = 0; | ||
| 1730 | } | ||
| 1731 | |||
| 1732 | val = readl(regs + CR0); | ||
| 1733 | if (val & CR0_BOOT_MAN_NS) | ||
| 1734 | pi->pcfg.mode |= DMAC_MODE_NS; | ||
| 1735 | else | ||
| 1736 | pi->pcfg.mode &= ~DMAC_MODE_NS; | ||
| 1737 | |||
| 1738 | val = readl(regs + CR0) >> CR0_NUM_EVENTS_SHIFT; | ||
| 1739 | val &= CR0_NUM_EVENTS_MASK; | ||
| 1740 | val += 1; | ||
| 1741 | pi->pcfg.num_events = val; | ||
| 1742 | |||
| 1743 | pi->pcfg.irq_ns = readl(regs + CR3); | ||
| 1744 | |||
| 1745 | pi->pcfg.periph_id = get_id(pi, PERIPH_ID); | ||
| 1746 | pi->pcfg.pcell_id = get_id(pi, PCELL_ID); | ||
| 1747 | } | ||
| 1748 | |||
| 1749 | static inline void _reset_thread(struct pl330_thread *thrd) | ||
| 1750 | { | ||
| 1751 | struct pl330_dmac *pl330 = thrd->dmac; | ||
| 1752 | struct pl330_info *pi = pl330->pinfo; | ||
| 1753 | |||
| 1754 | thrd->req[0].mc_cpu = pl330->mcode_cpu | ||
| 1755 | + (thrd->id * pi->mcbufsz); | ||
| 1756 | thrd->req[0].mc_bus = pl330->mcode_bus | ||
| 1757 | + (thrd->id * pi->mcbufsz); | ||
| 1758 | thrd->req[0].r = NULL; | ||
| 1759 | mark_free(thrd, 0); | ||
| 1760 | |||
| 1761 | thrd->req[1].mc_cpu = thrd->req[0].mc_cpu | ||
| 1762 | + pi->mcbufsz / 2; | ||
| 1763 | thrd->req[1].mc_bus = thrd->req[0].mc_bus | ||
| 1764 | + pi->mcbufsz / 2; | ||
| 1765 | thrd->req[1].r = NULL; | ||
| 1766 | mark_free(thrd, 1); | ||
| 1767 | } | ||
| 1768 | |||
| 1769 | static int dmac_alloc_threads(struct pl330_dmac *pl330) | ||
| 1770 | { | ||
| 1771 | struct pl330_info *pi = pl330->pinfo; | ||
| 1772 | int chans = pi->pcfg.num_chan; | ||
| 1773 | struct pl330_thread *thrd; | ||
| 1774 | int i; | ||
| 1775 | |||
| 1776 | /* Allocate 1 Manager and 'chans' Channel threads */ | ||
| 1777 | pl330->channels = kzalloc((1 + chans) * sizeof(*thrd), | ||
| 1778 | GFP_KERNEL); | ||
| 1779 | if (!pl330->channels) | ||
| 1780 | return -ENOMEM; | ||
| 1781 | |||
| 1782 | /* Init Channel threads */ | ||
| 1783 | for (i = 0; i < chans; i++) { | ||
| 1784 | thrd = &pl330->channels[i]; | ||
| 1785 | thrd->id = i; | ||
| 1786 | thrd->dmac = pl330; | ||
| 1787 | _reset_thread(thrd); | ||
| 1788 | thrd->free = true; | ||
| 1789 | } | ||
| 1790 | |||
| 1791 | /* MANAGER is indexed at the end */ | ||
| 1792 | thrd = &pl330->channels[chans]; | ||
| 1793 | thrd->id = chans; | ||
| 1794 | thrd->dmac = pl330; | ||
| 1795 | thrd->free = false; | ||
| 1796 | pl330->manager = thrd; | ||
| 1797 | |||
| 1798 | return 0; | ||
| 1799 | } | ||
| 1800 | |||
| 1801 | static int dmac_alloc_resources(struct pl330_dmac *pl330) | ||
| 1802 | { | ||
| 1803 | struct pl330_info *pi = pl330->pinfo; | ||
| 1804 | int chans = pi->pcfg.num_chan; | ||
| 1805 | int ret; | ||
| 1806 | |||
| 1807 | /* | ||
| 1808 | * Alloc MicroCode buffer for 'chans' Channel threads. | ||
| 1809 | * A channel's buffer offset is (Channel_Id * MCODE_BUFF_PERCHAN) | ||
| 1810 | */ | ||
| 1811 | pl330->mcode_cpu = dma_alloc_coherent(pi->dev, | ||
| 1812 | chans * pi->mcbufsz, | ||
| 1813 | &pl330->mcode_bus, GFP_KERNEL); | ||
| 1814 | if (!pl330->mcode_cpu) { | ||
| 1815 | dev_err(pi->dev, "%s:%d Can't allocate memory!\n", | ||
| 1816 | __func__, __LINE__); | ||
| 1817 | return -ENOMEM; | ||
| 1818 | } | ||
| 1819 | |||
| 1820 | ret = dmac_alloc_threads(pl330); | ||
| 1821 | if (ret) { | ||
| 1822 | dev_err(pi->dev, "%s:%d Can't to create channels for DMAC!\n", | ||
| 1823 | __func__, __LINE__); | ||
| 1824 | dma_free_coherent(pi->dev, | ||
| 1825 | chans * pi->mcbufsz, | ||
| 1826 | pl330->mcode_cpu, pl330->mcode_bus); | ||
| 1827 | return ret; | ||
| 1828 | } | ||
| 1829 | |||
| 1830 | return 0; | ||
| 1831 | } | ||
| 1832 | |||
| 1833 | int pl330_add(struct pl330_info *pi) | ||
| 1834 | { | ||
| 1835 | struct pl330_dmac *pl330; | ||
| 1836 | void __iomem *regs; | ||
| 1837 | int i, ret; | ||
| 1838 | |||
| 1839 | if (!pi || !pi->dev) | ||
| 1840 | return -EINVAL; | ||
| 1841 | |||
| 1842 | /* If already added */ | ||
| 1843 | if (pi->pl330_data) | ||
| 1844 | return -EINVAL; | ||
| 1845 | |||
| 1846 | /* | ||
| 1847 | * If the SoC can perform reset on the DMAC, then do it | ||
| 1848 | * before reading its configuration. | ||
| 1849 | */ | ||
| 1850 | if (pi->dmac_reset) | ||
| 1851 | pi->dmac_reset(pi); | ||
| 1852 | |||
| 1853 | regs = pi->base; | ||
| 1854 | |||
| 1855 | /* Check if we can handle this DMAC */ | ||
| 1856 | if ((get_id(pi, PERIPH_ID) & 0xfffff) != PERIPH_ID_VAL | ||
| 1857 | || get_id(pi, PCELL_ID) != PCELL_ID_VAL) { | ||
| 1858 | dev_err(pi->dev, "PERIPH_ID 0x%x, PCELL_ID 0x%x !\n", | ||
| 1859 | get_id(pi, PERIPH_ID), get_id(pi, PCELL_ID)); | ||
| 1860 | return -EINVAL; | ||
| 1861 | } | ||
| 1862 | |||
| 1863 | /* Read the configuration of the DMAC */ | ||
| 1864 | read_dmac_config(pi); | ||
| 1865 | |||
| 1866 | if (pi->pcfg.num_events == 0) { | ||
| 1867 | dev_err(pi->dev, "%s:%d Can't work without events!\n", | ||
| 1868 | __func__, __LINE__); | ||
| 1869 | return -EINVAL; | ||
| 1870 | } | ||
| 1871 | |||
| 1872 | pl330 = kzalloc(sizeof(*pl330), GFP_KERNEL); | ||
| 1873 | if (!pl330) { | ||
| 1874 | dev_err(pi->dev, "%s:%d Can't allocate memory!\n", | ||
| 1875 | __func__, __LINE__); | ||
| 1876 | return -ENOMEM; | ||
| 1877 | } | ||
| 1878 | |||
| 1879 | /* Assign the info structure and private data */ | ||
| 1880 | pl330->pinfo = pi; | ||
| 1881 | pi->pl330_data = pl330; | ||
| 1882 | |||
| 1883 | spin_lock_init(&pl330->lock); | ||
| 1884 | |||
| 1885 | INIT_LIST_HEAD(&pl330->req_done); | ||
| 1886 | |||
| 1887 | /* Use default MC buffer size if not provided */ | ||
| 1888 | if (!pi->mcbufsz) | ||
| 1889 | pi->mcbufsz = MCODE_BUFF_PER_REQ * 2; | ||
| 1890 | |||
| 1891 | /* Mark all events as free */ | ||
| 1892 | for (i = 0; i < pi->pcfg.num_events; i++) | ||
| 1893 | pl330->events[i] = -1; | ||
| 1894 | |||
| 1895 | /* Allocate resources needed by the DMAC */ | ||
| 1896 | ret = dmac_alloc_resources(pl330); | ||
| 1897 | if (ret) { | ||
| 1898 | dev_err(pi->dev, "Unable to create channels for DMAC\n"); | ||
| 1899 | kfree(pl330); | ||
| 1900 | return ret; | ||
| 1901 | } | ||
| 1902 | |||
| 1903 | tasklet_init(&pl330->tasks, pl330_dotask, (unsigned long) pl330); | ||
| 1904 | |||
| 1905 | pl330->state = INIT; | ||
| 1906 | |||
| 1907 | return 0; | ||
| 1908 | } | ||
| 1909 | EXPORT_SYMBOL(pl330_add); | ||
| 1910 | |||
| 1911 | static int dmac_free_threads(struct pl330_dmac *pl330) | ||
| 1912 | { | ||
| 1913 | struct pl330_info *pi = pl330->pinfo; | ||
| 1914 | int chans = pi->pcfg.num_chan; | ||
| 1915 | struct pl330_thread *thrd; | ||
| 1916 | int i; | ||
| 1917 | |||
| 1918 | /* Release Channel threads */ | ||
| 1919 | for (i = 0; i < chans; i++) { | ||
| 1920 | thrd = &pl330->channels[i]; | ||
| 1921 | pl330_release_channel((void *)thrd); | ||
| 1922 | } | ||
| 1923 | |||
| 1924 | /* Free memory */ | ||
| 1925 | kfree(pl330->channels); | ||
| 1926 | |||
| 1927 | return 0; | ||
| 1928 | } | ||
| 1929 | |||
| 1930 | static void dmac_free_resources(struct pl330_dmac *pl330) | ||
| 1931 | { | ||
| 1932 | struct pl330_info *pi = pl330->pinfo; | ||
| 1933 | int chans = pi->pcfg.num_chan; | ||
| 1934 | |||
| 1935 | dmac_free_threads(pl330); | ||
| 1936 | |||
| 1937 | dma_free_coherent(pi->dev, chans * pi->mcbufsz, | ||
| 1938 | pl330->mcode_cpu, pl330->mcode_bus); | ||
| 1939 | } | ||
| 1940 | |||
| 1941 | void pl330_del(struct pl330_info *pi) | ||
| 1942 | { | ||
| 1943 | struct pl330_dmac *pl330; | ||
| 1944 | |||
| 1945 | if (!pi || !pi->pl330_data) | ||
| 1946 | return; | ||
| 1947 | |||
| 1948 | pl330 = pi->pl330_data; | ||
| 1949 | |||
| 1950 | pl330->state = UNINIT; | ||
| 1951 | |||
| 1952 | tasklet_kill(&pl330->tasks); | ||
| 1953 | |||
| 1954 | /* Free DMAC resources */ | ||
| 1955 | dmac_free_resources(pl330); | ||
| 1956 | |||
| 1957 | kfree(pl330); | ||
| 1958 | pi->pl330_data = NULL; | ||
| 1959 | } | ||
| 1960 | EXPORT_SYMBOL(pl330_del); | ||
| @@ -16,6 +16,7 @@ · 15 unmodified lines | |||
| 16 | */ | 16 | */ |
| 17 | #include <linux/module.h> | 17 | #include <linux/module.h> |
| 18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
| 19 | #include <linux/irq.h> | ||
| 19 | #include <linux/kernel.h> | 20 | #include <linux/kernel.h> |
| 20 | #include <linux/delay.h> | 21 | #include <linux/delay.h> |
| 21 | #include <linux/errno.h> | 22 | #include <linux/errno.h> |
| @@ -28,9 +29,8 @@ · 6 unmodified lines | |||
| 28 | #include <linux/io.h> | 29 | #include <linux/io.h> |
| 29 | 30 | ||
| 30 | #include <mach/hardware.h> | 31 | #include <mach/hardware.h> |
| 31 | #include <asm/mach-types.h> | ||
| 32 | #include <asm/irq.h> | ||
| 33 | #include <asm/mach/irq.h> | 32 | #include <asm/mach/irq.h> |
| 33 | #include <asm/mach-types.h> | ||
| 34 | #include <asm/sizes.h> | 34 | #include <asm/sizes.h> |
| 35 | 35 | ||
| 36 | #include <asm/hardware/sa1111.h> | 36 | #include <asm/hardware/sa1111.h> |
| @@ -86,8 +86,10 @@ · 49 unmodified lines | |||
| 86 | #define IRQ_S1_CD_VALID (52) | 86 | #define IRQ_S1_CD_VALID (52) |
| 87 | #define IRQ_S0_BVD1_STSCHG (53) | 87 | #define IRQ_S0_BVD1_STSCHG (53) |
| 88 | #define IRQ_S1_BVD1_STSCHG (54) | 88 | #define IRQ_S1_BVD1_STSCHG (54) |
| 89 | #define SA1111_IRQ_NR (55) | ||
| 89 | 90 | ||
| 90 | extern void __init sa1110_mb_enable(void); | 91 | extern void sa1110_mb_enable(void); |
| 92 | extern void sa1110_mb_disable(void); | ||
| 91 | 93 | ||
| 92 | /* | 94 | /* |
| 93 | * We keep the following data for the overall SA1111. Note that the | 95 | * We keep the following data for the overall SA1111. Note that the |
| @@ -104,6 +106,7 @@ struct sa1111 { · 10 unmodified lines | |||
| 104 | int irq_base; /* base for cascaded on-chip IRQs */ | 106 | int irq_base; /* base for cascaded on-chip IRQs */ |
| 105 | spinlock_t lock; | 107 | spinlock_t lock; |
| 106 | void __iomem *base; | 108 | void __iomem *base; |
| 109 | struct sa1111_platform_data *pdata; | ||
| 107 | #ifdef CONFIG_PM | 110 | #ifdef CONFIG_PM |
| 108 | void *saved_state; | 111 | void *saved_state; |
| 109 | #endif | 112 | #endif |
| @@ -118,6 +121,7 @@ static struct sa1111 *g_sa1111; · 8 unmodified lines | |||
| 118 | struct sa1111_dev_info { | 121 | struct sa1111_dev_info { |
| 119 | unsigned long offset; | 122 | unsigned long offset; |
| 120 | unsigned long skpcr_mask; | 123 | unsigned long skpcr_mask; |
| 124 | bool dma; | ||
| 121 | unsigned int devid; | 125 | unsigned int devid; |
| 122 | unsigned int irq[6]; | 126 | unsigned int irq[6]; |
| 123 | }; | 127 | }; |
| @@ -126,6 +130,7 @@ static struct sa1111_dev_info sa1111_devices[] = { · 2 unmodified lines | |||
| 126 | { | 130 | { |
| 127 | .offset = SA1111_USB, | 131 | .offset = SA1111_USB, |
| 128 | .skpcr_mask = SKPCR_UCLKEN, | 132 | .skpcr_mask = SKPCR_UCLKEN, |
| 133 | .dma = true, | ||
| 129 | .devid = SA1111_DEVID_USB, | 134 | .devid = SA1111_DEVID_USB, |
| 130 | .irq = { | 135 | .irq = { |
| 131 | IRQ_USBPWR, | 136 | IRQ_USBPWR, |
| @@ -139,6 +144,7 @@ static struct sa1111_dev_info sa1111_devices[] = { · 7 unmodified lines | |||
| 139 | { | 144 | { |
| 140 | .offset = 0x0600, | 145 | .offset = 0x0600, |
| 141 | .skpcr_mask = SKPCR_I2SCLKEN | SKPCR_L3CLKEN, | 146 | .skpcr_mask = SKPCR_I2SCLKEN | SKPCR_L3CLKEN, |
| 147 | .dma = true, | ||
| 142 | .devid = SA1111_DEVID_SAC, | 148 | .devid = SA1111_DEVID_SAC, |
| 143 | .irq = { | 149 | .irq = { |
| 144 | AUDXMTDMADONEA, | 150 | AUDXMTDMADONEA, |
| @@ -155,7 +161,7 @@ static struct sa1111_dev_info sa1111_devices[] = { · 10 unmodified lines | |||
| 155 | { | 161 | { |
| 156 | .offset = SA1111_KBD, | 162 | .offset = SA1111_KBD, |
| 157 | .skpcr_mask = SKPCR_PTCLKEN, | 163 | .skpcr_mask = SKPCR_PTCLKEN, |
| 158 | .devid = SA1111_DEVID_PS2, | 164 | .devid = SA1111_DEVID_PS2_KBD, |
| 159 | .irq = { | 165 | .irq = { |
| 160 | IRQ_TPRXINT, | 166 | IRQ_TPRXINT, |
| 161 | IRQ_TPTXINT | 167 | IRQ_TPTXINT |
| @@ -164,7 +170,7 @@ static struct sa1111_dev_info sa1111_devices[] = { · 2 unmodified lines | |||
| 164 | { | 170 | { |
| 165 | .offset = SA1111_MSE, | 171 | .offset = SA1111_MSE, |
| 166 | .skpcr_mask = SKPCR_PMCLKEN, | 172 | .skpcr_mask = SKPCR_PMCLKEN, |
| 167 | .devid = SA1111_DEVID_PS2, | 173 | .devid = SA1111_DEVID_PS2_MSE, |
| 168 | .irq = { | 174 | .irq = { |
| 169 | IRQ_MSRXINT, | 175 | IRQ_MSRXINT, |
| 170 | IRQ_MSTXINT | 176 | IRQ_MSTXINT |
| @@ -434,16 +440,28 @@ static struct irq_chip sa1111_high_chip = { · 263 unmodified lines | |||
| 434 | .irq_set_wake = sa1111_wake_highirq, | 440 | .irq_set_wake = sa1111_wake_highirq, |
| 435 | }; | 441 | }; |
| 436 | 442 | ||
| 437 | static void sa1111_setup_irq(struct sa1111 *sachip) | 443 | static int sa1111_setup_irq(struct sa1111 *sachip, unsigned irq_base) |
| 438 | { | 444 | { |
| 439 | void __iomem *irqbase = sachip->base + SA1111_INTC; | 445 | void __iomem *irqbase = sachip->base + SA1111_INTC; |
| 440 | unsigned int irq; | 446 | unsigned i, irq; |
| 447 | int ret; | ||
| 441 | 448 | ||
| 442 | /* | 449 | /* |
| 443 | * We're guaranteed that this region hasn't been taken. | 450 | * We're guaranteed that this region hasn't been taken. |
| 444 | */ | 451 | */ |
| 445 | request_mem_region(sachip->phys + SA1111_INTC, 512, "irq"); | 452 | request_mem_region(sachip->phys + SA1111_INTC, 512, "irq"); |
| 446 | 453 | ||
| 454 | ret = irq_alloc_descs(-1, irq_base, SA1111_IRQ_NR, -1); | ||
| 455 | if (ret <= 0) { | ||
| 456 | dev_err(sachip->dev, "unable to allocate %u irqs: %d\n", | ||
| 457 | SA1111_IRQ_NR, ret); | ||
| 458 | if (ret == 0) | ||
| 459 | ret = -EINVAL; | ||
| 460 | return ret; | ||
| 461 | } | ||
| 462 | |||
| 463 | sachip->irq_base = ret; | ||
| 464 | |||
| 447 | /* disable all IRQs */ | 465 | /* disable all IRQs */ |
| 448 | sa1111_writel(0, irqbase + SA1111_INTEN0); | 466 | sa1111_writel(0, irqbase + SA1111_INTEN0); |
| 449 | sa1111_writel(0, irqbase + SA1111_INTEN1); | 467 | sa1111_writel(0, irqbase + SA1111_INTEN1); |
| @@ -463,14 +481,16 @@ static void sa1111_setup_irq(struct sa1111 *sachip) · 13 unmodified lines | |||
| 463 | sa1111_writel(~0, irqbase + SA1111_INTSTATCLR0); | 481 | sa1111_writel(~0, irqbase + SA1111_INTSTATCLR0); |
| 464 | sa1111_writel(~0, irqbase + SA1111_INTSTATCLR1); | 482 | sa1111_writel(~0, irqbase + SA1111_INTSTATCLR1); |
| 465 | 483 | ||
| 466 | for (irq = IRQ_GPAIN0; irq <= SSPROR; irq++) { | 484 | for (i = IRQ_GPAIN0; i <= SSPROR; i++) { |
| 485 | irq = sachip->irq_base + i; | ||
| 467 | irq_set_chip_and_handler(irq, &sa1111_low_chip, | 486 | irq_set_chip_and_handler(irq, &sa1111_low_chip, |
| 468 | handle_edge_irq); | 487 | handle_edge_irq); |
| 469 | irq_set_chip_data(irq, sachip); | 488 | irq_set_chip_data(irq, sachip); |
| 470 | set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); | 489 | set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); |
| 471 | } | 490 | } |
| 472 | 491 | ||
| 473 | for (irq = AUDXMTDMADONEA; irq <= IRQ_S1_BVD1_STSCHG; irq++) { | 492 | for (i = AUDXMTDMADONEA; i <= IRQ_S1_BVD1_STSCHG; i++) { |
| 493 | irq = sachip->irq_base + i; | ||
| 474 | irq_set_chip_and_handler(irq, &sa1111_high_chip, | 494 | irq_set_chip_and_handler(irq, &sa1111_high_chip, |
| 475 | handle_edge_irq); | 495 | handle_edge_irq); |
| 476 | irq_set_chip_data(irq, sachip); | 496 | irq_set_chip_data(irq, sachip); |
| @@ -483,6 +503,11 @@ static void sa1111_setup_irq(struct sa1111 *sachip) · 6 unmodified lines | |||
| 483 | irq_set_irq_type(sachip->irq, IRQ_TYPE_EDGE_RISING); | 503 | irq_set_irq_type(sachip->irq, IRQ_TYPE_EDGE_RISING); |
| 484 | irq_set_handler_data(sachip->irq, sachip); | 504 | irq_set_handler_data(sachip->irq, sachip); |
| 485 | irq_set_chained_handler(sachip->irq, sa1111_irq_handler); | 505 | irq_set_chained_handler(sachip->irq, sa1111_irq_handler); |
| 506 | |||
| 507 | dev_info(sachip->dev, "Providing IRQ%u-%u\n", | ||
| 508 | sachip->irq_base, sachip->irq_base + SA1111_IRQ_NR - 1); | ||
| 509 | |||
| 510 | return 0; | ||
| 486 | } | 511 | } |
| 487 | 512 | ||
| 488 | /* | 513 | /* |
| @@ -581,41 +606,10 @@ sa1111_configure_smc(struct sa1111 *sachip, int sdram, unsigned int drac, · 92 unmodified lines | |||
| 581 | } | 606 | } |
| 582 | #endif | 607 | #endif |
| 583 | 608 | ||
| 584 | #ifdef CONFIG_DMABOUNCE | ||
| 585 | /* | ||
| 586 | * According to the "Intel StrongARM SA-1111 Microprocessor Companion | ||
| 587 | * Chip Specification Update" (June 2000), erratum #7, there is a | ||
| 588 | * significant bug in the SA1111 SDRAM shared memory controller. If | ||
| 589 | * an access to a region of memory above 1MB relative to the bank base, | ||
| 590 | * it is important that address bit 10 _NOT_ be asserted. Depending | ||
| 591 | * on the configuration of the RAM, bit 10 may correspond to one | ||
| 592 | * of several different (processor-relative) address bits. | ||
| 593 | * | ||
| 594 | * This routine only identifies whether or not a given DMA address | ||
| 595 | * is susceptible to the bug. | ||
| 596 | * | ||
| 597 | * This should only get called for sa1111_device types due to the | ||
| 598 | * way we configure our device dma_masks. | ||
| 599 | */ | ||
| 600 | static int sa1111_needs_bounce(struct device *dev, dma_addr_t addr, size_t size) | ||
| 601 | { | ||
| 602 | /* | ||
| 603 | * Section 4.6 of the "Intel StrongARM SA-1111 Development Module | ||
| 604 | * User's Guide" mentions that jumpers R51 and R52 control the | ||
| 605 | * target of SA-1111 DMA (either SDRAM bank 0 on Assabet, or | ||
| 606 | * SDRAM bank 1 on Neponset). The default configuration selects | ||
| 607 | * Assabet, so any address in bank 1 is necessarily invalid. | ||
| 608 | */ | ||
| 609 | return (machine_is_assabet() || machine_is_pfs168()) && | ||
| 610 | (addr >= 0xc8000000 || (addr + size) >= 0xc8000000); | ||
| 611 | } | ||
| 612 | #endif | ||
| 613 | |||
| 614 | static void sa1111_dev_release(struct device *_dev) | 609 | static void sa1111_dev_release(struct device *_dev) |
| 615 | { | 610 | { |
| 616 | struct sa1111_dev *dev = SA1111_DEV(_dev); | 611 | struct sa1111_dev *dev = SA1111_DEV(_dev); |
| 617 | 612 | ||
| 618 | release_resource(&dev->res); | ||
| 619 | kfree(dev); | 613 | kfree(dev); |
| 620 | } | 614 | } |
| 621 | 615 | ||
| @@ -624,67 +618,58 @@ sa1111_init_one_child(struct sa1111 *sachip, struct resource *parent, · 2 unmodified lines | |||
| 624 | struct sa1111_dev_info *info) | 618 | struct sa1111_dev_info *info) |
| 625 | { | 619 | { |
| 626 | struct sa1111_dev *dev; | 620 | struct sa1111_dev *dev; |
| 621 | unsigned i; | ||
| 627 | int ret; | 622 | int ret; |
| 628 | 623 | ||
| 629 | dev = kzalloc(sizeof(struct sa1111_dev), GFP_KERNEL); | 624 | dev = kzalloc(sizeof(struct sa1111_dev), GFP_KERNEL); |
| 630 | if (!dev) { | 625 | if (!dev) { |
| 631 | ret = -ENOMEM; | 626 | ret = -ENOMEM; |
| 632 | goto out; | 627 | goto err_alloc; |
| 633 | } | 628 | } |
| 634 | 629 | ||
| 630 | device_initialize(&dev->dev); | ||
| 635 | dev_set_name(&dev->dev, "%4.4lx", info->offset); | 631 | dev_set_name(&dev->dev, "%4.4lx", info->offset); |
| 636 | dev->devid = info->devid; | 632 | dev->devid = info->devid; |
| 637 | dev->dev.parent = sachip->dev; | 633 | dev->dev.parent = sachip->dev; |
| 638 | dev->dev.bus = &sa1111_bus_type; | 634 | dev->dev.bus = &sa1111_bus_type; |
| 639 | dev->dev.release = sa1111_dev_release; | 635 | dev->dev.release = sa1111_dev_release; |
| 640 | dev->dev.coherent_dma_mask = sachip->dev->coherent_dma_mask; | ||
| 641 | dev->res.start = sachip->phys + info->offset; | 636 | dev->res.start = sachip->phys + info->offset; |
| 642 | dev->res.end = dev->res.start + 511; | 637 | dev->res.end = dev->res.start + 511; |
| 643 | dev->res.name = dev_name(&dev->dev); | 638 | dev->res.name = dev_name(&dev->dev); |
| 644 | dev->res.flags = IORESOURCE_MEM; | 639 | dev->res.flags = IORESOURCE_MEM; |
| 645 | dev->mapbase = sachip->base + info->offset; | 640 | dev->mapbase = sachip->base + info->offset; |
| 646 | dev->skpcr_mask = info->skpcr_mask; | 641 | dev->skpcr_mask = info->skpcr_mask; |
| 647 | memmove(dev->irq, info->irq, sizeof(dev->irq)); | ||
| 648 | |||
| 649 | ret = request_resource(parent, &dev->res); | ||
| 650 | if (ret) { | ||
| 651 | printk("SA1111: failed to allocate resource for %s\n", | ||
| 652 | dev->res.name); | ||
| 653 | dev_set_name(&dev->dev, NULL); | ||
| 654 | kfree(dev); | ||
| 655 | goto out; | ||
| 656 | } | ||
| 657 | |||
| 658 | 642 | ||
| 659 | ret = device_register(&dev->dev); | 643 | for (i = 0; i < ARRAY_SIZE(info->irq); i++) |
| 660 | if (ret) { | 644 | dev->irq[i] = sachip->irq_base + info->irq[i]; |
| 661 | release_resource(&dev->res); | ||
| 662 | kfree(dev); | ||
| 663 | goto out; | ||
| 664 | } | ||
| 665 | 645 | ||
| 666 | #ifdef CONFIG_DMABOUNCE | ||
| 667 | /* | 646 | /* |
| 668 | * If the parent device has a DMA mask associated with it, | 647 | * If the parent device has a DMA mask associated with it, and |
| 669 | * propagate it down to the children. | 648 | * this child supports DMA, propagate it down to the children. |
| 670 | */ | 649 | */ |
| 671 | if (sachip->dev->dma_mask) { | 650 | if (info->dma && sachip->dev->dma_mask) { |
| 672 | dev->dma_mask = *sachip->dev->dma_mask; | 651 | dev->dma_mask = *sachip->dev->dma_mask; |
| 673 | dev->dev.dma_mask = &dev->dma_mask; | 652 | dev->dev.dma_mask = &dev->dma_mask; |
| 653 | dev->dev.coherent_dma_mask = sachip->dev->coherent_dma_mask; | ||
| 654 | } | ||
| 674 | 655 | ||
| 675 | if (dev->dma_mask != 0xffffffffUL) { | 656 | ret = request_resource(parent, &dev->res); |
| 676 | ret = dmabounce_register_dev(&dev->dev, 1024, 4096, | 657 | if (ret) { |
| 677 | sa1111_needs_bounce); | 658 | dev_err(sachip->dev, "failed to allocate resource for %s\n", |
| 678 | if (ret) { | 659 | dev->res.name); |
| 679 | dev_err(&dev->dev, "SA1111: Failed to register" | 660 | goto err_resource; |
| 680 | " with dmabounce\n"); | ||
| 681 | device_unregister(&dev->dev); | ||
| 682 | } | ||
| 683 | } | ||
| 684 | } | 661 | } |
| 685 | #endif | ||
| 686 | 662 | ||
| 687 | out: | 663 | ret = device_add(&dev->dev); |
| 664 | if (ret) | ||
| 665 | goto err_add; | ||
| 666 | return 0; | ||
| 667 | |||
| 668 | err_add: | ||
| 669 | release_resource(&dev->res); | ||
| 670 | err_resource: | ||
| 671 | put_device(&dev->dev); | ||
| 672 | err_alloc: | ||
| 688 | return ret; | 673 | return ret; |
| 689 | } | 674 | } |
| 690 | 675 | ||
| @@ -698,16 +683,21 @@ out: · 7 unmodified lines | |||
| 698 | * Returns: | 683 | * Returns: |
| 699 | * %-ENODEV device not found. | 684 | * %-ENODEV device not found. |
| 700 | * %-EBUSY physical address already marked in-use. | 685 | * %-EBUSY physical address already marked in-use. |
| 686 | * %-EINVAL no platform data passed | ||
| 701 | * %0 successful. | 687 | * %0 successful. |
| 702 | */ | 688 | */ |
| 703 | static int __devinit | 689 | static int __devinit |
| 704 | __sa1111_probe(struct device *me, struct resource *mem, int irq) | 690 | __sa1111_probe(struct device *me, struct resource *mem, int irq) |
| 705 | { | 691 | { |
| 692 | struct sa1111_platform_data *pd = me->platform_data; | ||
| 706 | struct sa1111 *sachip; | 693 | struct sa1111 *sachip; |
| 707 | unsigned long id; | 694 | unsigned long id; |
| 708 | unsigned int has_devs; | 695 | unsigned int has_devs; |
| 709 | int i, ret = -ENODEV; | 696 | int i, ret = -ENODEV; |
| 710 | 697 | ||
| 698 | if (!pd) | ||
| 699 | return -EINVAL; | ||
| 700 | |||
| 711 | sachip = kzalloc(sizeof(struct sa1111), GFP_KERNEL); | 701 | sachip = kzalloc(sizeof(struct sa1111), GFP_KERNEL); |
| 712 | if (!sachip) | 702 | if (!sachip) |
| 713 | return -ENOMEM; | 703 | return -ENOMEM; |
| @@ -727,6 +717,7 @@ __sa1111_probe(struct device *me, struct resource *mem, int irq) · 13 unmodified lines | |||
| 727 | sachip->dev = me; | 717 | sachip->dev = me; |
| 728 | dev_set_drvdata(sachip->dev, sachip); | 718 | dev_set_drvdata(sachip->dev, sachip); |
| 729 | 719 | ||
| 720 | sachip->pdata = pd; | ||
| 730 | sachip->phys = mem->start; | 721 | sachip->phys = mem->start; |
| 731 | sachip->irq = irq; | 722 | sachip->irq = irq; |
| 732 | 723 | ||
| @@ -759,6 +750,16 @@ __sa1111_probe(struct device *me, struct resource *mem, int irq) · 26 unmodified lines | |||
| 759 | */ | 750 | */ |
| 760 | sa1111_wake(sachip); | 751 | sa1111_wake(sachip); |
| 761 | 752 | ||
| 753 | /* | ||
| 754 | * The interrupt controller must be initialised before any | ||
| 755 | * other device to ensure that the interrupts are available. | ||
| 756 | */ | ||
| 757 | if (sachip->irq != NO_IRQ) { | ||
| 758 | ret = sa1111_setup_irq(sachip, pd->irq_base); | ||
| 759 | if (ret) | ||
| 760 | goto err_unmap; | ||
| 761 | } | ||
| 762 | |||
| 762 | #ifdef CONFIG_ARCH_SA1100 | 763 | #ifdef CONFIG_ARCH_SA1100 |
| 763 | { | 764 | { |
| 764 | unsigned int val; | 765 | unsigned int val; |
| @@ -789,24 +790,14 @@ __sa1111_probe(struct device *me, struct resource *mem, int irq) · 24 unmodified lines | |||
| 789 | } | 790 | } |
| 790 | #endif | 791 | #endif |
| 791 | 792 | ||
| 792 | /* | ||
| 793 | * The interrupt controller must be initialised before any | ||
| 794 | * other device to ensure that the interrupts are available. | ||
| 795 | */ | ||
| 796 | if (sachip->irq != NO_IRQ) | ||
| 797 | sa1111_setup_irq(sachip); | ||
| 798 | |||
| 799 | g_sa1111 = sachip; | 793 | g_sa1111 = sachip; |
| 800 | 794 | ||
| 801 | has_devs = ~0; | 795 | has_devs = ~0; |
| 802 | if (machine_is_assabet() || machine_is_jornada720() || | 796 | if (pd) |
| 803 | machine_is_badge4()) | 797 | has_devs &= ~pd->disable_devs; |
| 804 | has_devs &= ~(1 << 4); | ||
| 805 | else | ||
| 806 | has_devs &= ~(1 << 1); | ||
| 807 | 798 | ||
| 808 | for (i = 0; i < ARRAY_SIZE(sa1111_devices); i++) | 799 | for (i = 0; i < ARRAY_SIZE(sa1111_devices); i++) |
| 809 | if (has_devs & (1 << i)) | 800 | if (sa1111_devices[i].devid & has_devs) |
| 810 | sa1111_init_one_child(sachip, mem, &sa1111_devices[i]); | 801 | sa1111_init_one_child(sachip, mem, &sa1111_devices[i]); |
| 811 | 802 | ||
| 812 | return 0; | 803 | return 0; |
| @@ -824,7 +815,10 @@ __sa1111_probe(struct device *me, struct resource *mem, int irq) · 11 unmodified lines | |||
| 824 | 815 | ||
| 825 | static int sa1111_remove_one(struct device *dev, void *data) | 816 | static int sa1111_remove_one(struct device *dev, void *data) |
| 826 | { | 817 | { |
| 827 | device_unregister(dev); | 818 | struct sa1111_dev *sadev = SA1111_DEV(dev); |
| 819 | device_del(&sadev->dev); | ||
| 820 | release_resource(&sadev->res); | ||
| 821 | put_device(&sadev->dev); | ||
| 828 | return 0; | 822 | return 0; |
| 829 | } | 823 | } |
| 830 | 824 | ||
| @@ -846,6 +840,7 @@ static void __sa1111_remove(struct sa1111 *sachip) · 15 unmodified lines | |||
| 846 | if (sachip->irq != NO_IRQ) { | 840 | if (sachip->irq != NO_IRQ) { |
| 847 | irq_set_chained_handler(sachip->irq, NULL); | 841 | irq_set_chained_handler(sachip->irq, NULL); |
| 848 | irq_set_handler_data(sachip->irq, NULL); | 842 | irq_set_handler_data(sachip->irq, NULL); |
| 843 | irq_free_descs(sachip->irq_base, SA1111_IRQ_NR); | ||
| 849 | 844 | ||
| 850 | release_mem_region(sachip->phys + SA1111_INTC, 512); | 845 | release_mem_region(sachip->phys + SA1111_INTC, 512); |
| 851 | } | 846 | } |
| @@ -904,6 +899,9 @@ static int sa1111_suspend(struct platform_device *dev, pm_message_t state) · 52 unmodified lines | |||
| 904 | save->skpwm0 = sa1111_readl(base + SA1111_SKPWM0); | 899 | save->skpwm0 = sa1111_readl(base + SA1111_SKPWM0); |
| 905 | save->skpwm1 = sa1111_readl(base + SA1111_SKPWM1); | 900 | save->skpwm1 = sa1111_readl(base + SA1111_SKPWM1); |
| 906 | 901 | ||
| 902 | sa1111_writel(0, sachip->base + SA1111_SKPWM0); | ||
| 903 | sa1111_writel(0, sachip->base + SA1111_SKPWM1); | ||
| 904 | |||
| 907 | base = sachip->base + SA1111_INTC; | 905 | base = sachip->base + SA1111_INTC; |
| 908 | save->intpol0 = sa1111_readl(base + SA1111_INTPOL0); | 906 | save->intpol0 = sa1111_readl(base + SA1111_INTPOL0); |
| 909 | save->intpol1 = sa1111_readl(base + SA1111_INTPOL1); | 907 | save->intpol1 = sa1111_readl(base + SA1111_INTPOL1); |
| @@ -919,13 +917,15 @@ static int sa1111_suspend(struct platform_device *dev, pm_message_t state) · 9 unmodified lines | |||
| 919 | */ | 917 | */ |
| 920 | val = sa1111_readl(sachip->base + SA1111_SKCR); | 918 | val = sa1111_readl(sachip->base + SA1111_SKCR); |
| 921 | sa1111_writel(val | SKCR_SLEEP, sachip->base + SA1111_SKCR); | 919 | sa1111_writel(val | SKCR_SLEEP, sachip->base + SA1111_SKCR); |
| 922 | sa1111_writel(0, sachip->base + SA1111_SKPWM0); | ||
| 923 | sa1111_writel(0, sachip->base + SA1111_SKPWM1); | ||
| 924 | 920 | ||
| 925 | clk_disable(sachip->clk); | 921 | clk_disable(sachip->clk); |
| 926 | 922 | ||
| 927 | spin_unlock_irqrestore(&sachip->lock, flags); | 923 | spin_unlock_irqrestore(&sachip->lock, flags); |
| 928 | 924 | ||
| 925 | #ifdef CONFIG_ARCH_SA1100 | ||
| 926 | sa1110_mb_disable(); | ||
| 927 | #endif | ||
| 928 | |||
| 929 | return 0; | 929 | return 0; |
| 930 | } | 930 | } |
| 931 | 931 | ||
| @@ -966,6 +966,11 @@ static int sa1111_resume(struct platform_device *dev) · 34 unmodified lines | |||
| 966 | */ | 966 | */ |
| 967 | sa1111_wake(sachip); | 967 | sa1111_wake(sachip); |
| 968 | 968 | ||
| 969 | #ifdef CONFIG_ARCH_SA1100 | ||
| 970 | /* Enable the memory bus request/grant signals */ | ||
| 971 | sa1110_mb_enable(); | ||
| 972 | #endif | ||
| 973 | |||
| 969 | /* | 974 | /* |
| 970 | * Only lock for write ops. Also, sa1111_wake must be called with | 975 | * Only lock for write ops. Also, sa1111_wake must be called with |
| 971 | * released spinlock! | 976 | * released spinlock! |
| @@ -1053,6 +1058,7 @@ static struct platform_driver sa1111_device_driver = { · 81 unmodified lines | |||
| 1053 | .resume = sa1111_resume, | 1058 | .resume = sa1111_resume, |
| 1054 | .driver = { | 1059 | .driver = { |
| 1055 | .name = "sa1111", | 1060 | .name = "sa1111", |
| 1061 | .owner = THIS_MODULE, | ||
| 1056 | }, | 1062 | }, |
| 1057 | }; | 1063 | }; |
| 1058 | 1064 | ||
| @@ -1238,16 +1244,23 @@ EXPORT_SYMBOL(sa1111_set_sleep_io); · 179 unmodified lines | |||
| 1238 | * sa1111_enable_device - enable an on-chip SA1111 function block | 1244 | * sa1111_enable_device - enable an on-chip SA1111 function block |
| 1239 | * @sadev: SA1111 function block device to enable | 1245 | * @sadev: SA1111 function block device to enable |
| 1240 | */ | 1246 | */ |
| 1241 | void sa1111_enable_device(struct sa1111_dev *sadev) | 1247 | int sa1111_enable_device(struct sa1111_dev *sadev) |
| 1242 | { | 1248 | { |
| 1243 | struct sa1111 *sachip = sa1111_chip_driver(sadev); | 1249 | struct sa1111 *sachip = sa1111_chip_driver(sadev); |
| 1244 | unsigned long flags; | 1250 | unsigned long flags; |
| 1245 | unsigned int val; | 1251 | unsigned int val; |
| 1252 | int ret = 0; | ||
| 1246 | 1253 | ||
| 1247 | spin_lock_irqsave(&sachip->lock, flags); | 1254 | if (sachip->pdata && sachip->pdata->enable) |
| 1248 | val = sa1111_readl(sachip->base + SA1111_SKPCR); | 1255 | ret = sachip->pdata->enable(sachip->pdata->data, sadev->devid); |
| 1249 | sa1111_writel(val | sadev->skpcr_mask, sachip->base + SA1111_SKPCR); | 1256 | |
| 1250 | spin_unlock_irqrestore(&sachip->lock, flags); | 1257 | if (ret == 0) { |
| 1258 | spin_lock_irqsave(&sachip->lock, flags); | ||
| 1259 | val = sa1111_readl(sachip->base + SA1111_SKPCR); | ||
| 1260 | sa1111_writel(val | sadev->skpcr_mask, sachip->base + SA1111_SKPCR); | ||
| 1261 | spin_unlock_irqrestore(&sachip->lock, flags); | ||
| 1262 | } | ||
| 1263 | return ret; | ||
| 1251 | } | 1264 | } |
| 1252 | EXPORT_SYMBOL(sa1111_enable_device); | 1265 | EXPORT_SYMBOL(sa1111_enable_device); |
| 1253 | 1266 | ||
| @@ -1265,6 +1278,9 @@ void sa1111_disable_device(struct sa1111_dev *sadev) · 11 unmodified lines | |||
| 1265 | val = sa1111_readl(sachip->base + SA1111_SKPCR); | 1278 | val = sa1111_readl(sachip->base + SA1111_SKPCR); |
| 1266 | sa1111_writel(val & ~sadev->skpcr_mask, sachip->base + SA1111_SKPCR); | 1279 | sa1111_writel(val & ~sadev->skpcr_mask, sachip->base + SA1111_SKPCR); |
| 1267 | spin_unlock_irqrestore(&sachip->lock, flags); | 1280 | spin_unlock_irqrestore(&sachip->lock, flags); |
| 1281 | |||
| 1282 | if (sachip->pdata && sachip->pdata->disable) | ||
| 1283 | sachip->pdata->disable(sachip->pdata->data, sadev->devid); | ||
| 1268 | } | 1284 | } |
| 1269 | EXPORT_SYMBOL(sa1111_disable_device); | 1285 | EXPORT_SYMBOL(sa1111_disable_device); |
| 1270 | 1286 | ||
| @@ -1279,7 +1295,7 @@ static int sa1111_match(struct device *_dev, struct device_driver *_drv) · 8 unmodified lines | |||
| 1279 | struct sa1111_dev *dev = SA1111_DEV(_dev); | 1295 | struct sa1111_dev *dev = SA1111_DEV(_dev); |
| 1280 | struct sa1111_driver *drv = SA1111_DRV(_drv); | 1296 | struct sa1111_driver *drv = SA1111_DRV(_drv); |
| 1281 | 1297 | ||
| 1282 | return dev->devid == drv->devid; | 1298 | return dev->devid & drv->devid; |
| 1283 | } | 1299 | } |
| 1284 | 1300 | ||
| 1285 | static int sa1111_bus_suspend(struct device *dev, pm_message_t state) | 1301 | static int sa1111_bus_suspend(struct device *dev, pm_message_t state) |
| @@ -1304,6 +1320,14 @@ static int sa1111_bus_resume(struct device *dev) · 18 unmodified lines | |||
| 1304 | return ret; | 1320 | return ret; |
| 1305 | } | 1321 | } |
| 1306 | 1322 | ||
| 1323 | static void sa1111_bus_shutdown(struct device *dev) | ||
| 1324 | { | ||
| 1325 | struct sa1111_driver *drv = SA1111_DRV(dev->driver); | ||
| 1326 | |||
| 1327 | if (drv && drv->shutdown) | ||
| 1328 | drv->shutdown(SA1111_DEV(dev)); | ||
| 1329 | } | ||
| 1330 | |||
| 1307 | static int sa1111_bus_probe(struct device *dev) | 1331 | static int sa1111_bus_probe(struct device *dev) |
| 1308 | { | 1332 | { |
| 1309 | struct sa1111_dev *sadev = SA1111_DEV(dev); | 1333 | struct sa1111_dev *sadev = SA1111_DEV(dev); |
| @@ -1333,6 +1357,7 @@ struct bus_type sa1111_bus_type = { · 23 unmodified lines | |||
| 1333 | .remove = sa1111_bus_remove, | 1357 | .remove = sa1111_bus_remove, |
| 1334 | .suspend = sa1111_bus_suspend, | 1358 | .suspend = sa1111_bus_suspend, |
| 1335 | .resume = sa1111_bus_resume, | 1359 | .resume = sa1111_bus_resume, |
| 1360 | .shutdown = sa1111_bus_shutdown, | ||
| 1336 | }; | 1361 | }; |
| 1337 | EXPORT_SYMBOL(sa1111_bus_type); | 1362 | EXPORT_SYMBOL(sa1111_bus_type); |
| 1338 | 1363 | ||
| @@ -1349,9 +1374,70 @@ void sa1111_driver_unregister(struct sa1111_driver *driver) · 10 unmodified lines | |||
| 1349 | } | 1374 | } |
| 1350 | EXPORT_SYMBOL(sa1111_driver_unregister); | 1375 | EXPORT_SYMBOL(sa1111_driver_unregister); |
| 1351 | 1376 | ||
| 1377 | #ifdef CONFIG_DMABOUNCE | ||
| 1378 | /* | ||
| 1379 | * According to the "Intel StrongARM SA-1111 Microprocessor Companion | ||
| 1380 | * Chip Specification Update" (June 2000), erratum #7, there is a | ||
| 1381 | * significant bug in the SA1111 SDRAM shared memory controller. If | ||
| 1382 | * an access to a region of memory above 1MB relative to the bank base, | ||
| 1383 | * it is important that address bit 10 _NOT_ be asserted. Depending | ||
| 1384 | * on the configuration of the RAM, bit 10 may correspond to one | ||
| 1385 | * of several different (processor-relative) address bits. | ||
| 1386 | * | ||
| 1387 | * This routine only identifies whether or not a given DMA address | ||
| 1388 | * is susceptible to the bug. | ||
| 1389 | * | ||
| 1390 | * This should only get called for sa1111_device types due to the | ||
| 1391 | * way we configure our device dma_masks. | ||
| 1392 | */ | ||
| 1393 | static int sa1111_needs_bounce(struct device *dev, dma_addr_t addr, size_t size) | ||
| 1394 | { | ||
| 1395 | /* | ||
| 1396 | * Section 4.6 of the "Intel StrongARM SA-1111 Development Module | ||
| 1397 | * User's Guide" mentions that jumpers R51 and R52 control the | ||
| 1398 | * target of SA-1111 DMA (either SDRAM bank 0 on Assabet, or | ||
| 1399 | * SDRAM bank 1 on Neponset). The default configuration selects | ||
| 1400 | * Assabet, so any address in bank 1 is necessarily invalid. | ||
| 1401 | */ | ||
| 1402 | return (machine_is_assabet() || machine_is_pfs168()) && | ||
| 1403 | (addr >= 0xc8000000 || (addr + size) >= 0xc8000000); | ||
| 1404 | } | ||
| 1405 | |||
| 1406 | static int sa1111_notifier_call(struct notifier_block *n, unsigned long action, | ||
| 1407 | void *data) | ||
| 1408 | { | ||
| 1409 | struct sa1111_dev *dev = SA1111_DEV(data); | ||
| 1410 | |||
| 1411 | switch (action) { | ||
| 1412 | case BUS_NOTIFY_ADD_DEVICE: | ||
| 1413 | if (dev->dev.dma_mask && dev->dma_mask < 0xffffffffUL) { | ||
| 1414 | int ret = dmabounce_register_dev(&dev->dev, 1024, 4096, | ||
| 1415 | sa1111_needs_bounce); | ||
| 1416 | if (ret) | ||
| 1417 | dev_err(&dev->dev, "failed to register with dmabounce: %d\n", ret); | ||
| 1418 | } | ||
| 1419 | break; | ||
| 1420 | |||
| 1421 | case BUS_NOTIFY_DEL_DEVICE: | ||
| 1422 | if (dev->dev.dma_mask && dev->dma_mask < 0xffffffffUL) | ||
| 1423 | dmabounce_unregister_dev(&dev->dev); | ||
| 1424 | break; | ||
| 1425 | } | ||
| 1426 | return NOTIFY_OK; | ||
| 1427 | } | ||
| 1428 | |||
| 1429 | static struct notifier_block sa1111_bus_notifier = { | ||
| 1430 | .notifier_call = sa1111_notifier_call, | ||
| 1431 | }; | ||
| 1432 | #endif | ||
| 1433 | |||
| 1352 | static int __init sa1111_init(void) | 1434 | static int __init sa1111_init(void) |
| 1353 | { | 1435 | { |
| 1354 | int ret = bus_register(&sa1111_bus_type); | 1436 | int ret = bus_register(&sa1111_bus_type); |
| 1437 | #ifdef CONFIG_DMABOUNCE | ||
| 1438 | if (ret == 0) | ||
| 1439 | bus_register_notifier(&sa1111_bus_type, &sa1111_bus_notifier); | ||
| 1440 | #endif | ||
| 1355 | if (ret == 0) | 1441 | if (ret == 0) |
| 1356 | platform_driver_register(&sa1111_device_driver); | 1442 | platform_driver_register(&sa1111_device_driver); |
| 1357 | return ret; | 1443 | return ret; |
| @@ -1360,6 +1446,9 @@ static int __init sa1111_init(void) · 2 unmodified lines | |||
| 1360 | static void __exit sa1111_exit(void) | 1446 | static void __exit sa1111_exit(void) |
| 1361 | { | 1447 | { |
| 1362 | platform_driver_unregister(&sa1111_device_driver); | 1448 | platform_driver_unregister(&sa1111_device_driver); |
| 1449 | #ifdef CONFIG_DMABOUNCE | ||
| 1450 | bus_unregister_notifier(&sa1111_bus_type, &sa1111_bus_notifier); | ||
| 1451 | #endif | ||
| 1363 | bus_unregister(&sa1111_bus_type); | 1452 | bus_unregister(&sa1111_bus_type); |
| 1364 | } | 1453 | } |
| 1365 | 1454 | ||
| @@ -26,6 +26,7 @@ · 25 unmodified lines | |||
| 26 | #include <linux/irq.h> | 26 | #include <linux/irq.h> |
| 27 | #include <linux/io.h> | 27 | #include <linux/io.h> |
| 28 | 28 | ||
| 29 | #include <asm/sched_clock.h> | ||
| 29 | #include <asm/hardware/arm_timer.h> | 30 | #include <asm/hardware/arm_timer.h> |
| 30 | 31 | ||
| 31 | static long __init sp804_get_clock_rate(const char *name) | 32 | static long __init sp804_get_clock_rate(const char *name) |
| @@ -67,7 +68,16 @@ static long __init sp804_get_clock_rate(const char *name) · 35 unmodified lines | |||
| 67 | return rate; | 68 | return rate; |
| 68 | } | 69 | } |
| 69 | 70 | ||
| 70 | void __init sp804_clocksource_init(void __iomem *base, const char *name) | 71 | static void __iomem *sched_clock_base; |
| 72 | |||
| 73 | static u32 sp804_read(void) | ||
| 74 | { | ||
| 75 | return ~readl_relaxed(sched_clock_base + TIMER_VALUE); | ||
| 76 | } | ||
| 77 | |||
| 78 | void __init __sp804_clocksource_and_sched_clock_init(void __iomem *base, | ||
| 79 | const char *name, | ||
| 80 | int use_sched_clock) | ||
| 71 | { | 81 | { |
| 72 | long rate = sp804_get_clock_rate(name); | 82 | long rate = sp804_get_clock_rate(name); |
| 73 | 83 | ||
| @@ -83,6 +93,11 @@ void __init sp804_clocksource_init(void __iomem *base, const char *name) · 9 unmodified lines | |||
| 83 | 93 | ||
| 84 | clocksource_mmio_init(base + TIMER_VALUE, name, | 94 | clocksource_mmio_init(base + TIMER_VALUE, name, |
| 85 | rate, 200, 32, clocksource_mmio_readl_down); | 95 | rate, 200, 32, clocksource_mmio_readl_down); |
| 96 | |||
| 97 | if (use_sched_clock) { | ||
| 98 | sched_clock_base = base; | ||
| 99 | setup_sched_clock(sp804_read, 32, rate); | ||
| 100 | } | ||
| 86 | } | 101 | } |
| 87 | 102 | ||
| 88 | 103 | ||
| @@ -6,7 +6,6 @@ · 5 unmodified lines | |||
| 6 | #include <linux/ioport.h> | 6 | #include <linux/ioport.h> |
| 7 | #include <linux/io.h> | 7 | #include <linux/io.h> |
| 8 | 8 | ||
| 9 | #include <asm/system.h> | ||
| 10 | 9 | ||
| 11 | #include <asm/mach/pci.h> | 10 | #include <asm/mach/pci.h> |
| 12 | 11 | ||
| @@ -427,19 +427,18 @@ int __init vic_of_init(struct device_node *node, struct device_node *parent) · 426 unmodified lines | |||
| 427 | 427 | ||
| 428 | /* | 428 | /* |
| 429 | * Handle each interrupt in a single VIC. Returns non-zero if we've | 429 | * Handle each interrupt in a single VIC. Returns non-zero if we've |
| 430 | * handled at least one interrupt. This does a single read of the | 430 | * handled at least one interrupt. This reads the status register |
| 431 | * status register and handles all interrupts in order from LSB first. | 431 | * before handling each interrupt, which is necessary given that |
| 432 | * handle_IRQ may briefly re-enable interrupts for soft IRQ handling. | ||
| 432 | */ | 433 | */ |
| 433 | static int handle_one_vic(struct vic_device *vic, struct pt_regs *regs) | 434 | static int handle_one_vic(struct vic_device *vic, struct pt_regs *regs) |
| 434 | { | 435 | { |
| 435 | u32 stat, irq; | 436 | u32 stat, irq; |
| 436 | int handled = 0; | 437 | int handled = 0; |
| 437 | 438 | ||
| 438 | stat = readl_relaxed(vic->base + VIC_IRQ_STATUS); | 439 | while ((stat = readl_relaxed(vic->base + VIC_IRQ_STATUS))) { |
| 439 | while (stat) { | ||
| 440 | irq = ffs(stat) - 1; | 440 | irq = ffs(stat) - 1; |
| 441 | handle_IRQ(irq_find_mapping(vic->domain, irq), regs); | 441 | handle_IRQ(irq_find_mapping(vic->domain, irq), regs); |
| 442 | stat &= ~(1 << irq); | ||
| 443 | handled = 1; | 442 | handled = 1; |
| 444 | } | 443 | } |
| 445 | 444 | ||
| @@ -1,108 +0,0 @@ | |||
| 1 | CONFIG_EXPERIMENTAL=y | ||
| 2 | # CONFIG_LOCALVERSION_AUTO is not set | ||
| 3 | # CONFIG_SWAP is not set | ||
| 4 | CONFIG_SYSVIPC=y | ||
| 5 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 6 | CONFIG_BLK_DEV_INITRD=y | ||
| 7 | CONFIG_SLAB=y | ||
| 8 | CONFIG_MODULES=y | ||
| 9 | CONFIG_MODULE_UNLOAD=y | ||
| 10 | # CONFIG_BLK_DEV_BSG is not set | ||
| 11 | # CONFIG_IOSCHED_DEADLINE is not set | ||
| 12 | # CONFIG_IOSCHED_CFQ is not set | ||
| 13 | CONFIG_ARCH_AT91=y | ||
| 14 | CONFIG_ARCH_AT91CAP9=y | ||
| 15 | CONFIG_MACH_AT91CAP9ADK=y | ||
| 16 | CONFIG_MTD_AT91_DATAFLASH_CARD=y | ||
| 17 | CONFIG_AT91_PROGRAMMABLE_CLOCKS=y | ||
| 18 | # CONFIG_ARM_THUMB is not set | ||
| 19 | CONFIG_AEABI=y | ||
| 20 | CONFIG_LEDS=y | ||
| 21 | CONFIG_LEDS_CPU=y | ||
| 22 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
| 23 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
| 24 | CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/ram0 rw" | ||
| 25 | CONFIG_FPE_NWFPE=y | ||
| 26 | CONFIG_NET=y | ||
| 27 | CONFIG_PACKET=y | ||
| 28 | CONFIG_UNIX=y | ||
| 29 | CONFIG_INET=y | ||
| 30 | CONFIG_IP_PNP=y | ||
| 31 | CONFIG_IP_PNP_BOOTP=y | ||
| 32 | CONFIG_IP_PNP_RARP=y | ||
| 33 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
| 34 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
| 35 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
| 36 | # CONFIG_INET_LRO is not set | ||
| 37 | # CONFIG_INET_DIAG is not set | ||
| 38 | # CONFIG_IPV6 is not set | ||
| 39 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 40 | CONFIG_MTD=y | ||
| 41 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 42 | CONFIG_MTD_CHAR=y | ||
| 43 | CONFIG_MTD_BLOCK=y | ||
| 44 | CONFIG_MTD_CFI=y | ||
| 45 | CONFIG_MTD_JEDECPROBE=y | ||
| 46 | CONFIG_MTD_CFI_AMDSTD=y | ||
| 47 | CONFIG_MTD_PHYSMAP=y | ||
| 48 | CONFIG_MTD_DATAFLASH=y | ||
| 49 | CONFIG_MTD_NAND=y | ||
| 50 | CONFIG_MTD_NAND_ATMEL=y | ||
| 51 | CONFIG_BLK_DEV_LOOP=y | ||
| 52 | CONFIG_BLK_DEV_RAM=y | ||
| 53 | CONFIG_BLK_DEV_RAM_SIZE=8192 | ||
| 54 | CONFIG_SCSI=y | ||
| 55 | CONFIG_BLK_DEV_SD=y | ||
| 56 | CONFIG_SCSI_MULTI_LUN=y | ||
| 57 | CONFIG_NETDEVICES=y | ||
| 58 | CONFIG_MII=y | ||
| 59 | CONFIG_MACB=y | ||
| 60 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 61 | CONFIG_INPUT_EVDEV=y | ||
| 62 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 63 | # CONFIG_INPUT_MOUSE is not set | ||
| 64 | CONFIG_INPUT_TOUCHSCREEN=y | ||
| 65 | CONFIG_TOUCHSCREEN_ADS7846=y | ||
| 66 | # CONFIG_SERIO is not set | ||
| 67 | CONFIG_SERIAL_ATMEL=y | ||
| 68 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
| 69 | CONFIG_HW_RANDOM=y | ||
| 70 | CONFIG_I2C=y | ||
| 71 | CONFIG_I2C_CHARDEV=y | ||
| 72 | CONFIG_SPI=y | ||
| 73 | CONFIG_SPI_ATMEL=y | ||
| 74 | # CONFIG_HWMON is not set | ||
| 75 | CONFIG_WATCHDOG=y | ||
| 76 | CONFIG_WATCHDOG_NOWAYOUT=y | ||
| 77 | CONFIG_FB=y | ||
| 78 | CONFIG_FB_ATMEL=y | ||
| 79 | CONFIG_LOGO=y | ||
| 80 | # CONFIG_LOGO_LINUX_MONO is not set | ||
| 81 | # CONFIG_LOGO_LINUX_CLUT224 is not set | ||
| 82 | # CONFIG_USB_HID is not set | ||
| 83 | CONFIG_USB=y | ||
| 84 | CONFIG_USB_DEVICEFS=y | ||
| 85 | CONFIG_USB_MON=y | ||
| 86 | CONFIG_USB_OHCI_HCD=y | ||
| 87 | CONFIG_USB_STORAGE=y | ||
| 88 | CONFIG_USB_GADGET=y | ||
| 89 | CONFIG_USB_ETH=m | ||
| 90 | CONFIG_USB_FILE_STORAGE=m | ||
| 91 | CONFIG_MMC=y | ||
| 92 | CONFIG_MMC_AT91=m | ||
| 93 | CONFIG_RTC_CLASS=y | ||
| 94 | CONFIG_RTC_DRV_AT91SAM9=y | ||
| 95 | CONFIG_EXT2_FS=y | ||
| 96 | CONFIG_VFAT_FS=y | ||
| 97 | CONFIG_TMPFS=y | ||
| 98 | CONFIG_JFFS2_FS=y | ||
| 99 | CONFIG_CRAMFS=y | ||
| 100 | CONFIG_NFS_FS=y | ||
| 101 | CONFIG_ROOT_NFS=y | ||
| 102 | CONFIG_NLS_CODEPAGE_437=y | ||
| 103 | CONFIG_NLS_CODEPAGE_850=y | ||
| 104 | CONFIG_NLS_ISO8859_1=y | ||
| 105 | CONFIG_DEBUG_FS=y | ||
| 106 | CONFIG_DEBUG_KERNEL=y | ||
| 107 | CONFIG_DEBUG_INFO=y | ||
| 108 | CONFIG_DEBUG_USER=y | ||
| @@ -74,6 +74,8 @@ CONFIG_LEGACY_PTY_COUNT=16 · 73 unmodified lines | |||
| 74 | CONFIG_SERIAL_ATMEL=y | 74 | CONFIG_SERIAL_ATMEL=y |
| 75 | CONFIG_SERIAL_ATMEL_CONSOLE=y | 75 | CONFIG_SERIAL_ATMEL_CONSOLE=y |
| 76 | CONFIG_HW_RANDOM=y | 76 | CONFIG_HW_RANDOM=y |
| 77 | CONFIG_I2C=y | ||
| 78 | CONFIG_I2C_GPIO=y | ||
| 77 | CONFIG_SPI=y | 79 | CONFIG_SPI=y |
| 78 | CONFIG_SPI_ATMEL=y | 80 | CONFIG_SPI_ATMEL=y |
| 79 | CONFIG_SPI_SPIDEV=y | 81 | CONFIG_SPI_SPIDEV=y |
| @@ -105,6 +107,7 @@ CONFIG_LEDS_TRIGGERS=y · 25 unmodified lines | |||
| 105 | CONFIG_LEDS_TRIGGER_TIMER=y | 107 | CONFIG_LEDS_TRIGGER_TIMER=y |
| 106 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | 108 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y |
| 107 | CONFIG_RTC_CLASS=y | 109 | CONFIG_RTC_CLASS=y |
| 110 | CONFIG_RTC_DRV_RV3029C2=y | ||
| 108 | CONFIG_RTC_DRV_AT91SAM9=y | 111 | CONFIG_RTC_DRV_AT91SAM9=y |
| 109 | CONFIG_EXT2_FS=y | 112 | CONFIG_EXT2_FS=y |
| 110 | CONFIG_MSDOS_FS=y | 113 | CONFIG_MSDOS_FS=y |
| @@ -45,6 +45,7 @@ CONFIG_FPE_NWFPE=y · 44 unmodified lines | |||
| 45 | CONFIG_FPE_NWFPE_XP=y | 45 | CONFIG_FPE_NWFPE_XP=y |
| 46 | CONFIG_PM_DEBUG=y | 46 | CONFIG_PM_DEBUG=y |
| 47 | CONFIG_NET=y | 47 | CONFIG_NET=y |
| 48 | CONFIG_SMSC911X=y | ||
| 48 | CONFIG_PACKET=y | 49 | CONFIG_PACKET=y |
| 49 | CONFIG_UNIX=y | 50 | CONFIG_UNIX=y |
| 50 | CONFIG_INET=y | 51 | CONFIG_INET=y |
| @@ -68,6 +69,7 @@ CONFIG_MTD_CFI=y · 17 unmodified lines | |||
| 68 | CONFIG_MTD_CFI_ADV_OPTIONS=y | 69 | CONFIG_MTD_CFI_ADV_OPTIONS=y |
| 69 | CONFIG_MTD_CFI_GEOMETRY=y | 70 | CONFIG_MTD_CFI_GEOMETRY=y |
| 70 | # CONFIG_MTD_MAP_BANK_WIDTH_1 is not set | 71 | # CONFIG_MTD_MAP_BANK_WIDTH_1 is not set |
| 72 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
| 71 | # CONFIG_MTD_CFI_I2 is not set | 73 | # CONFIG_MTD_CFI_I2 is not set |
| 72 | CONFIG_MTD_CFI_INTELEXT=y | 74 | CONFIG_MTD_CFI_INTELEXT=y |
| 73 | CONFIG_MTD_PHYSMAP=y | 75 | CONFIG_MTD_PHYSMAP=y |
| @@ -78,6 +80,8 @@ CONFIG_MISC_DEVICES=y · 4 unmodified lines | |||
| 78 | CONFIG_EEPROM_AT24=y | 80 | CONFIG_EEPROM_AT24=y |
| 79 | CONFIG_EEPROM_AT25=y | 81 | CONFIG_EEPROM_AT25=y |
| 80 | CONFIG_NETDEVICES=y | 82 | CONFIG_NETDEVICES=y |
| 83 | CONFIG_CS89x0=y | ||
| 84 | CONFIG_CS89x0_PLATFORM=y | ||
| 81 | CONFIG_DM9000=y | 85 | CONFIG_DM9000=y |
| 82 | CONFIG_SMC91X=y | 86 | CONFIG_SMC91X=y |
| 83 | CONFIG_SMC911X=y | 87 | CONFIG_SMC911X=y |
| @@ -115,6 +119,21 @@ CONFIG_FB_IMX=y · 31 unmodified lines | |||
| 115 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | 119 | CONFIG_BACKLIGHT_LCD_SUPPORT=y |
| 116 | CONFIG_LCD_CLASS_DEVICE=y | 120 | CONFIG_LCD_CLASS_DEVICE=y |
| 117 | CONFIG_BACKLIGHT_CLASS_DEVICE=y | 121 | CONFIG_BACKLIGHT_CLASS_DEVICE=y |
| 122 | CONFIG_LCD_L4F00242T03=y | ||
| 123 | CONFIG_MEDIA_SUPPORT=y | ||
| 124 | CONFIG_VIDEO_DEV=y | ||
| 125 | CONFIG_VIDEO_V4L2_COMMON=y | ||
| 126 | CONFIG_VIDEO_MEDIA=y | ||
| 127 | CONFIG_VIDEO_V4L2=y | ||
| 128 | CONFIG_VIDEOBUF_GEN=y | ||
| 129 | CONFIG_VIDEOBUF_DMA_CONTIG=y | ||
| 130 | CONFIG_VIDEOBUF2_CORE=y | ||
| 131 | CONFIG_VIDEO_CAPTURE_DRIVERS=y | ||
| 132 | CONFIG_V4L_PLATFORM_DRIVERS=y | ||
| 133 | CONFIG_SOC_CAMERA=y | ||
| 134 | CONFIG_SOC_CAMERA_OV2640=y | ||
| 135 | CONFIG_VIDEO_MX2_HOSTSUPPORT=y | ||
| 136 | CONFIG_VIDEO_MX2=y | ||
| 118 | CONFIG_BACKLIGHT_PWM=y | 137 | CONFIG_BACKLIGHT_PWM=y |
| 119 | CONFIG_FRAMEBUFFER_CONSOLE=y | 138 | CONFIG_FRAMEBUFFER_CONSOLE=y |
| 120 | CONFIG_FONTS=y | 139 | CONFIG_FONTS=y |
| @@ -5,6 +5,7 @@ CONFIG_SYSVIPC=y · 4 unmodified lines | |||
| 5 | CONFIG_LOG_BUF_SHIFT=18 | 5 | CONFIG_LOG_BUF_SHIFT=18 |
| 6 | CONFIG_CGROUPS=y | 6 | CONFIG_CGROUPS=y |
| 7 | CONFIG_RELAY=y | 7 | CONFIG_RELAY=y |
| 8 | CONFIG_BLK_DEV_INITRD=y | ||
| 8 | CONFIG_EXPERT=y | 9 | CONFIG_EXPERT=y |
| 9 | # CONFIG_SLUB_DEBUG is not set | 10 | # CONFIG_SLUB_DEBUG is not set |
| 10 | # CONFIG_COMPAT_BRK is not set | 11 | # CONFIG_COMPAT_BRK is not set |
| @@ -12,7 +13,6 @@ CONFIG_MODULES=y · 1 unmodified line | |||
| 12 | CONFIG_MODULE_UNLOAD=y | 13 | CONFIG_MODULE_UNLOAD=y |
| 13 | CONFIG_MODVERSIONS=y | 14 | CONFIG_MODVERSIONS=y |
| 14 | CONFIG_MODULE_SRCVERSION_ALL=y | 15 | CONFIG_MODULE_SRCVERSION_ALL=y |
| 15 | # CONFIG_LBDAF is not set | ||
| 16 | # CONFIG_BLK_DEV_BSG is not set | 16 | # CONFIG_BLK_DEV_BSG is not set |
| 17 | CONFIG_ARCH_MXC=y | 17 | CONFIG_ARCH_MXC=y |
| 18 | CONFIG_MACH_MX31LILLY=y | 18 | CONFIG_MACH_MX31LILLY=y |
| @@ -26,7 +26,6 @@ CONFIG_MACH_ARMADILLO5X0=y · 7 unmodified lines | |||
| 26 | CONFIG_MACH_KZM_ARM11_01=y | 26 | CONFIG_MACH_KZM_ARM11_01=y |
| 27 | CONFIG_MACH_PCM043=y | 27 | CONFIG_MACH_PCM043=y |
| 28 | CONFIG_MACH_MX35_3DS=y | 28 | CONFIG_MACH_MX35_3DS=y |
| 29 | CONFIG_MACH_EUKREA_CPUIMX35=y | ||
| 30 | CONFIG_MACH_VPR200=y | 29 | CONFIG_MACH_VPR200=y |
| 31 | CONFIG_MACH_IMX51_DT=y | 30 | CONFIG_MACH_IMX51_DT=y |
| 32 | CONFIG_MACH_MX51_3DS=y | 31 | CONFIG_MACH_MX51_3DS=y |
| @@ -82,8 +81,9 @@ CONFIG_PATA_IMX=y · 49 unmodified lines | |||
| 82 | CONFIG_NETDEVICES=y | 81 | CONFIG_NETDEVICES=y |
| 83 | # CONFIG_NET_VENDOR_BROADCOM is not set | 82 | # CONFIG_NET_VENDOR_BROADCOM is not set |
| 84 | # CONFIG_NET_VENDOR_CHELSIO is not set | 83 | # CONFIG_NET_VENDOR_CHELSIO is not set |
| 84 | CONFIG_CS89x0=y | ||
| 85 | CONFIG_CS89x0_PLATFORM=y | ||
| 85 | # CONFIG_NET_VENDOR_FARADAY is not set | 86 | # CONFIG_NET_VENDOR_FARADAY is not set |
| 86 | CONFIG_FEC=y | ||
| 87 | # CONFIG_NET_VENDOR_INTEL is not set | 87 | # CONFIG_NET_VENDOR_INTEL is not set |
| 88 | # CONFIG_NET_VENDOR_MARVELL is not set | 88 | # CONFIG_NET_VENDOR_MARVELL is not set |
| 89 | # CONFIG_NET_VENDOR_MICREL is not set | 89 | # CONFIG_NET_VENDOR_MICREL is not set |
| @@ -126,7 +126,40 @@ CONFIG_WATCHDOG=y · 36 unmodified lines | |||
| 126 | CONFIG_IMX2_WDT=y | 126 | CONFIG_IMX2_WDT=y |
| 127 | CONFIG_MFD_MC13XXX=y | 127 | CONFIG_MFD_MC13XXX=y |
| 128 | CONFIG_REGULATOR=y | 128 | CONFIG_REGULATOR=y |
| 129 | CONFIG_REGULATOR_FIXED_VOLTAGE=y | ||
| 130 | CONFIG_REGULATOR_MC13783=y | ||
| 129 | CONFIG_REGULATOR_MC13892=y | 131 | CONFIG_REGULATOR_MC13892=y |
| 132 | CONFIG_MEDIA_SUPPORT=y | ||
| 133 | CONFIG_VIDEO_V4L2=y | ||
| 134 | CONFIG_VIDEO_DEV=y | ||
| 135 | CONFIG_VIDEO_V4L2_COMMON=y | ||
| 136 | CONFIG_VIDEOBUF_GEN=y | ||
| 137 | CONFIG_VIDEOBUF2_CORE=y | ||
| 138 | CONFIG_VIDEOBUF2_MEMOPS=y | ||
| 139 | CONFIG_VIDEOBUF2_DMA_CONTIG=y | ||
| 140 | CONFIG_VIDEO_CAPTURE_DRIVERS=y | ||
| 141 | CONFIG_V4L_PLATFORM_DRIVERS=y | ||
| 142 | CONFIG_SOC_CAMERA=y | ||
| 143 | CONFIG_SOC_CAMERA_OV2640=y | ||
| 144 | CONFIG_MX3_VIDEO=y | ||
| 145 | CONFIG_VIDEO_MX3=y | ||
| 146 | CONFIG_FB=y | ||
| 147 | CONFIG_FB_MX3=y | ||
| 148 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | ||
| 149 | CONFIG_LCD_CLASS_DEVICE=y | ||
| 150 | CONFIG_LCD_L4F00242T03=y | ||
| 151 | CONFIG_BACKLIGHT_CLASS_DEVICE=y | ||
| 152 | CONFIG_BACKLIGHT_GENERIC=y | ||
| 153 | CONFIG_DUMMY_CONSOLE=y | ||
| 154 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
| 155 | CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y | ||
| 156 | CONFIG_FONTS=y | ||
| 157 | CONFIG_FONT_8x8=y | ||
| 158 | CONFIG_FONT_8x16=y | ||
| 159 | CONFIG_LOGO=y | ||
| 160 | CONFIG_LOGO_LINUX_MONO=y | ||
| 161 | CONFIG_LOGO_LINUX_VGA16=y | ||
| 162 | CONFIG_LOGO_LINUX_CLUT224=y | ||
| 130 | CONFIG_USB=y | 163 | CONFIG_USB=y |
| 131 | CONFIG_USB_EHCI_HCD=y | 164 | CONFIG_USB_EHCI_HCD=y |
| 132 | CONFIG_USB_EHCI_MXC=y | 165 | CONFIG_USB_EHCI_MXC=y |
| @@ -57,18 +57,24 @@ CONFIG_NETDEVICES=y · 56 unmodified lines | |||
| 57 | CONFIG_NET_ETHERNET=y | 57 | CONFIG_NET_ETHERNET=y |
| 58 | CONFIG_NET_PCI=y | 58 | CONFIG_NET_PCI=y |
| 59 | CONFIG_E100=y | 59 | CONFIG_E100=y |
| 60 | CONFIG_SMC91X=y | ||
| 60 | # CONFIG_KEYBOARD_ATKBD is not set | 61 | # CONFIG_KEYBOARD_ATKBD is not set |
| 61 | # CONFIG_SERIO_SERPORT is not set | 62 | # CONFIG_SERIO_SERPORT is not set |
| 62 | CONFIG_SERIAL_AMBA_PL010=y | 63 | CONFIG_SERIAL_AMBA_PL010=y |
| 63 | CONFIG_SERIAL_AMBA_PL010_CONSOLE=y | 64 | CONFIG_SERIAL_AMBA_PL010_CONSOLE=y |
| 64 | CONFIG_FB=y | 65 | CONFIG_FB=y |
| 65 | CONFIG_FB_MODE_HELPERS=y | 66 | CONFIG_FB_MODE_HELPERS=y |
| 67 | CONFIG_FB_ARMCLCD=y | ||
| 66 | CONFIG_FB_MATROX=y | 68 | CONFIG_FB_MATROX=y |
| 67 | CONFIG_FB_MATROX_MILLENIUM=y | 69 | CONFIG_FB_MATROX_MILLENIUM=y |
| 68 | CONFIG_FB_MATROX_MYSTIQUE=y | 70 | CONFIG_FB_MATROX_MYSTIQUE=y |
| 71 | # CONFIG_VGA_CONSOLE is not set | ||
| 72 | CONFIG_MMC=y | ||
| 73 | CONFIG_MMC_ARMMMCI=y | ||
| 69 | CONFIG_RTC_CLASS=y | 74 | CONFIG_RTC_CLASS=y |
| 70 | CONFIG_RTC_DRV_PL030=y | 75 | CONFIG_RTC_DRV_PL030=y |
| 71 | CONFIG_EXT2_FS=y | 76 | CONFIG_EXT2_FS=y |
| 77 | CONFIG_VFAT_FS=y | ||
| 72 | CONFIG_TMPFS=y | 78 | CONFIG_TMPFS=y |
| 73 | CONFIG_JFFS2_FS=y | 79 | CONFIG_JFFS2_FS=y |
| 74 | CONFIG_CRAMFS=y | 80 | CONFIG_CRAMFS=y |
| @@ -78,5 +84,7 @@ CONFIG_ROOT_NFS=y · 3 unmodified lines | |||
| 78 | CONFIG_NFSD=y | 84 | CONFIG_NFSD=y |
| 79 | CONFIG_NFSD_V3=y | 85 | CONFIG_NFSD_V3=y |
| 80 | CONFIG_PARTITION_ADVANCED=y | 86 | CONFIG_PARTITION_ADVANCED=y |
| 87 | CONFIG_NLS_CODEPAGE_437=y | ||
| 88 | CONFIG_NLS_ISO8859_1=y | ||
| 81 | CONFIG_MAGIC_SYSRQ=y | 89 | CONFIG_MAGIC_SYSRQ=y |
| 82 | CONFIG_DEBUG_KERNEL=y | 90 | CONFIG_DEBUG_KERNEL=y |
| @@ -0,0 +1,145 @@ | |||
| 1 | CONFIG_EXPERIMENTAL=y | ||
| 2 | CONFIG_SYSVIPC=y | ||
| 3 | CONFIG_IKCONFIG=y | ||
| 4 | CONFIG_IKCONFIG_PROC=y | ||
| 5 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 6 | CONFIG_SYSFS_DEPRECATED=y | ||
| 7 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 8 | CONFIG_BLK_DEV_INITRD=y | ||
| 9 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
| 10 | CONFIG_SYSCTL_SYSCALL=y | ||
| 11 | CONFIG_EMBEDDED=y | ||
| 12 | CONFIG_SLAB=y | ||
| 13 | CONFIG_MODULES=y | ||
| 14 | CONFIG_MODULE_UNLOAD=y | ||
| 15 | # CONFIG_BLK_DEV_BSG is not set | ||
| 16 | CONFIG_PARTITION_ADVANCED=y | ||
| 17 | CONFIG_ARCH_LPC32XX=y | ||
| 18 | CONFIG_NO_HZ=y | ||
| 19 | CONFIG_HIGH_RES_TIMERS=y | ||
| 20 | CONFIG_PREEMPT=y | ||
| 21 | CONFIG_AEABI=y | ||
| 22 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
| 23 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
| 24 | CONFIG_CMDLINE="console=ttyS0,115200n81 root=/dev/ram0" | ||
| 25 | CONFIG_CPU_IDLE=y | ||
| 26 | CONFIG_FPE_NWFPE=y | ||
| 27 | CONFIG_VFP=y | ||
| 28 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
| 29 | CONFIG_BINFMT_AOUT=y | ||
| 30 | CONFIG_NET=y | ||
| 31 | CONFIG_PACKET=y | ||
| 32 | CONFIG_UNIX=y | ||
| 33 | CONFIG_INET=y | ||
| 34 | CONFIG_IP_MULTICAST=y | ||
| 35 | CONFIG_IP_PNP=y | ||
| 36 | CONFIG_IP_PNP_DHCP=y | ||
| 37 | CONFIG_IP_PNP_BOOTP=y | ||
| 38 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
| 39 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
| 40 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
| 41 | # CONFIG_INET_LRO is not set | ||
| 42 | # CONFIG_INET_DIAG is not set | ||
| 43 | # CONFIG_IPV6 is not set | ||
| 44 | # CONFIG_WIRELESS is not set | ||
| 45 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 46 | # CONFIG_FW_LOADER is not set | ||
| 47 | CONFIG_MTD=y | ||
| 48 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 49 | CONFIG_MTD_CHAR=y | ||
| 50 | CONFIG_MTD_BLOCK=y | ||
| 51 | CONFIG_MTD_NAND=y | ||
| 52 | CONFIG_MTD_NAND_MUSEUM_IDS=y | ||
| 53 | CONFIG_BLK_DEV_LOOP=y | ||
| 54 | CONFIG_BLK_DEV_CRYPTOLOOP=y | ||
| 55 | CONFIG_BLK_DEV_RAM=y | ||
| 56 | CONFIG_BLK_DEV_RAM_COUNT=1 | ||
| 57 | CONFIG_BLK_DEV_RAM_SIZE=16384 | ||
| 58 | CONFIG_MISC_DEVICES=y | ||
| 59 | CONFIG_EEPROM_AT25=y | ||
| 60 | CONFIG_SCSI=y | ||
| 61 | CONFIG_BLK_DEV_SD=y | ||
| 62 | CONFIG_NETDEVICES=y | ||
| 63 | CONFIG_MII=y | ||
| 64 | CONFIG_PHYLIB=y | ||
| 65 | CONFIG_SMSC_PHY=y | ||
| 66 | # CONFIG_WLAN is not set | ||
| 67 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 68 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=240 | ||
| 69 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320 | ||
| 70 | CONFIG_INPUT_EVDEV=y | ||
| 71 | # CONFIG_INPUT_MOUSE is not set | ||
| 72 | CONFIG_INPUT_TOUCHSCREEN=y | ||
| 73 | CONFIG_TOUCHSCREEN_LPC32XX=y | ||
| 74 | # CONFIG_LEGACY_PTYS is not set | ||
| 75 | CONFIG_SERIAL_8250=y | ||
| 76 | CONFIG_SERIAL_8250_CONSOLE=y | ||
| 77 | # CONFIG_HW_RANDOM is not set | ||
| 78 | CONFIG_I2C=y | ||
| 79 | CONFIG_I2C_CHARDEV=y | ||
| 80 | CONFIG_I2C_PNX=y | ||
| 81 | CONFIG_SPI=y | ||
| 82 | CONFIG_SPI_PL022=y | ||
| 83 | CONFIG_GPIO_SYSFS=y | ||
| 84 | # CONFIG_HWMON is not set | ||
| 85 | CONFIG_WATCHDOG=y | ||
| 86 | CONFIG_PNX4008_WATCHDOG=y | ||
| 87 | CONFIG_FB=y | ||
| 88 | CONFIG_FB_ARMCLCD=y | ||
| 89 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
| 90 | CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y | ||
| 91 | CONFIG_LOGO=y | ||
| 92 | # CONFIG_LOGO_LINUX_MONO is not set | ||
| 93 | # CONFIG_LOGO_LINUX_VGA16 is not set | ||
| 94 | CONFIG_SOUND=y | ||
| 95 | CONFIG_SND=y | ||
| 96 | CONFIG_SND_SEQUENCER=y | ||
| 97 | CONFIG_SND_MIXER_OSS=y | ||
| 98 | CONFIG_SND_PCM_OSS=y | ||
| 99 | CONFIG_SND_SEQUENCER_OSS=y | ||
| 100 | CONFIG_SND_DYNAMIC_MINORS=y | ||
| 101 | # CONFIG_SND_VERBOSE_PROCFS is not set | ||
| 102 | # CONFIG_SND_DRIVERS is not set | ||
| 103 | # CONFIG_SND_ARM is not set | ||
| 104 | # CONFIG_SND_SPI is not set | ||
| 105 | CONFIG_SND_SOC=y | ||
| 106 | # CONFIG_HID_SUPPORT is not set | ||
| 107 | CONFIG_USB=y | ||
| 108 | CONFIG_USB_STORAGE=y | ||
| 109 | CONFIG_USB_LIBUSUAL=y | ||
| 110 | CONFIG_MMC=y | ||
| 111 | # CONFIG_MMC_BLOCK_BOUNCE is not set | ||
| 112 | CONFIG_MMC_ARMMMCI=y | ||
| 113 | CONFIG_NEW_LEDS=y | ||
| 114 | CONFIG_LEDS_CLASS=y | ||
| 115 | CONFIG_LEDS_GPIO=y | ||
| 116 | CONFIG_LEDS_TRIGGERS=y | ||
| 117 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | ||
| 118 | CONFIG_RTC_CLASS=y | ||
| 119 | CONFIG_RTC_INTF_DEV_UIE_EMUL=y | ||
| 120 | CONFIG_RTC_DRV_LPC32XX=y | ||
| 121 | CONFIG_EXT2_FS=y | ||
| 122 | CONFIG_AUTOFS4_FS=y | ||
| 123 | CONFIG_MSDOS_FS=y | ||
| 124 | CONFIG_VFAT_FS=y | ||
| 125 | CONFIG_TMPFS=y | ||
| 126 | CONFIG_JFFS2_FS=y | ||
| 127 | CONFIG_JFFS2_FS_WBUF_VERIFY=y | ||
| 128 | CONFIG_CRAMFS=y | ||
| 129 | CONFIG_NFS_FS=y | ||
| 130 | CONFIG_NFS_V3=y | ||
| 131 | CONFIG_ROOT_NFS=y | ||
| 132 | CONFIG_NLS_CODEPAGE_437=y | ||
| 133 | CONFIG_NLS_ASCII=y | ||
| 134 | CONFIG_NLS_ISO8859_1=y | ||
| 135 | CONFIG_NLS_UTF8=y | ||
| 136 | # CONFIG_SCHED_DEBUG is not set | ||
| 137 | # CONFIG_DEBUG_PREEMPT is not set | ||
| 138 | CONFIG_DEBUG_INFO=y | ||
| 139 | # CONFIG_FTRACE is not set | ||
| 140 | # CONFIG_ARM_UNWIND is not set | ||
| 141 | CONFIG_DEBUG_LL=y | ||
| 142 | CONFIG_EARLY_PRINTK=y | ||
| 143 | CONFIG_CRYPTO_ANSI_CPRNG=y | ||
| 144 | # CONFIG_CRYPTO_HW is not set | ||
| 145 | CONFIG_CRC_CCITT=y | ||
| @@ -101,7 +101,7 @@ CONFIG_MFD_ASIC3=y · 100 unmodified lines | |||
| 101 | CONFIG_HTC_EGPIO=y | 101 | CONFIG_HTC_EGPIO=y |
| 102 | CONFIG_HTC_PASIC3=y | 102 | CONFIG_HTC_PASIC3=y |
| 103 | CONFIG_REGULATOR=y | 103 | CONFIG_REGULATOR=y |
| 104 | CONFIG_REGULATOR_BQ24022=y | 104 | CONFIG_REGULATOR_GPIO=y |
| 105 | CONFIG_FB=y | 105 | CONFIG_FB=y |
| 106 | CONFIG_FB_PXA=y | 106 | CONFIG_FB_PXA=y |
| 107 | CONFIG_FB_PXA_OVERLAY=y | 107 | CONFIG_FB_PXA_OVERLAY=y |
| @@ -13,7 +13,7 @@ CONFIG_MODULE_UNLOAD=y · 12 unmodified lines | |||
| 13 | CONFIG_MODULE_FORCE_UNLOAD=y | 13 | CONFIG_MODULE_FORCE_UNLOAD=y |
| 14 | # CONFIG_BLK_DEV_BSG is not set | 14 | # CONFIG_BLK_DEV_BSG is not set |
| 15 | CONFIG_BLK_DEV_INTEGRITY=y | 15 | CONFIG_BLK_DEV_INTEGRITY=y |
| 16 | CONFIG_ARCH_S3C2410=y | 16 | CONFIG_ARCH_S3C24XX=y |
| 17 | CONFIG_S3C_ADC=y | 17 | CONFIG_S3C_ADC=y |
| 18 | CONFIG_S3C24XX_PWM=y | 18 | CONFIG_S3C24XX_PWM=y |
| 19 | CONFIG_MACH_MINI2440=y | 19 | CONFIG_MACH_MINI2440=y |
| @@ -77,10 +77,10 @@ CONFIG_DEVPTS_MULTIPLE_INSTANCES=y · 76 unmodified lines | |||
| 77 | CONFIG_SERIAL_AMBA_PL011=y | 77 | CONFIG_SERIAL_AMBA_PL011=y |
| 78 | CONFIG_SERIAL_AMBA_PL011_CONSOLE=y | 78 | CONFIG_SERIAL_AMBA_PL011_CONSOLE=y |
| 79 | # CONFIG_HW_RANDOM is not set | 79 | # CONFIG_HW_RANDOM is not set |
| 80 | CONFIG_I2C=m | 80 | CONFIG_I2C=y |
| 81 | # CONFIG_I2C_COMPAT is not set | 81 | # CONFIG_I2C_COMPAT is not set |
| 82 | CONFIG_I2C_CHARDEV=m | 82 | CONFIG_I2C_CHARDEV=y |
| 83 | CONFIG_I2C_MXS=m | 83 | CONFIG_I2C_MXS=y |
| 84 | CONFIG_SPI=y | 84 | CONFIG_SPI=y |
| 85 | CONFIG_SPI_GPIO=m | 85 | CONFIG_SPI_GPIO=m |
| 86 | CONFIG_DEBUG_GPIO=y | 86 | CONFIG_DEBUG_GPIO=y |
| @@ -90,6 +90,20 @@ CONFIG_GPIO_SYSFS=y · 3 unmodified lines | |||
| 90 | CONFIG_DISPLAY_SUPPORT=m | 90 | CONFIG_DISPLAY_SUPPORT=m |
| 91 | # CONFIG_HID_SUPPORT is not set | 91 | # CONFIG_HID_SUPPORT is not set |
| 92 | # CONFIG_USB_SUPPORT is not set | 92 | # CONFIG_USB_SUPPORT is not set |
| 93 | CONFIG_SOUND=y | ||
| 94 | CONFIG_SND=y | ||
| 95 | CONFIG_SND_TIMER=y | ||
| 96 | CONFIG_SND_PCM=y | ||
| 97 | CONFIG_SND_JACK=y | ||
| 98 | CONFIG_SND_DRIVERS=y | ||
| 99 | CONFIG_SND_ARM=y | ||
| 100 | CONFIG_SND_SOC=y | ||
| 101 | CONFIG_SND_MXS_SOC=y | ||
| 102 | CONFIG_SND_SOC_MXS_SGTL5000=y | ||
| 103 | CONFIG_SND_SOC_I2C_AND_SPI=y | ||
| 104 | CONFIG_SND_SOC_SGTL5000=y | ||
| 105 | CONFIG_REGULATOR=y | ||
| 106 | CONFIG_REGULATOR_FIXED_VOLTAGE=y | ||
| 93 | CONFIG_MMC=y | 107 | CONFIG_MMC=y |
| 94 | CONFIG_MMC_MXS=y | 108 | CONFIG_MMC_MXS=y |
| 95 | CONFIG_RTC_CLASS=y | 109 | CONFIG_RTC_CLASS=y |
| @@ -3,40 +3,47 @@ CONFIG_SYSVIPC=y · 2 unmodified lines | |||
| 3 | CONFIG_IKCONFIG=m | 3 | CONFIG_IKCONFIG=m |
| 4 | CONFIG_IKCONFIG_PROC=y | 4 | CONFIG_IKCONFIG_PROC=y |
| 5 | CONFIG_LOG_BUF_SHIFT=16 | 5 | CONFIG_LOG_BUF_SHIFT=16 |
| 6 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 7 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
| 8 | CONFIG_SLAB=y | 7 | CONFIG_SLAB=y |
| 9 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
| 10 | CONFIG_MODULE_UNLOAD=y | 9 | CONFIG_MODULE_UNLOAD=y |
| 11 | # CONFIG_BLK_DEV_BSG is not set | 10 | # CONFIG_BLK_DEV_BSG is not set |
| 12 | CONFIG_ARCH_S3C2410=y | 11 | CONFIG_PARTITION_ADVANCED=y |
| 12 | CONFIG_BSD_DISKLABEL=y | ||
| 13 | CONFIG_SOLARIS_X86_PARTITION=y | ||
| 14 | CONFIG_ARCH_S3C24XX=y | ||
| 13 | CONFIG_S3C_BOOT_ERROR_RESET=y | 15 | CONFIG_S3C_BOOT_ERROR_RESET=y |
| 14 | CONFIG_S3C_ADC=y | 16 | CONFIG_S3C_ADC=y |
| 15 | CONFIG_S3C24XX_PWM=y | 17 | CONFIG_S3C24XX_PWM=y |
| 16 | CONFIG_ARCH_SMDK2410=y | 18 | CONFIG_CPU_S3C2412=y |
| 19 | CONFIG_CPU_S3C2416=y | ||
| 20 | CONFIG_CPU_S3C2440=y | ||
| 21 | CONFIG_CPU_S3C2442=y | ||
| 22 | CONFIG_CPU_S3C2443=y | ||
| 23 | CONFIG_MACH_AML_M5900=y | ||
| 24 | CONFIG_ARCH_BAST=y | ||
| 17 | CONFIG_ARCH_H1940=y | 25 | CONFIG_ARCH_H1940=y |
| 18 | CONFIG_MACH_N30=y | 26 | CONFIG_MACH_N30=y |
| 19 | CONFIG_ARCH_BAST=y | ||
| 20 | CONFIG_MACH_OTOM=y | 27 | CONFIG_MACH_OTOM=y |
| 21 | CONFIG_MACH_AML_M5900=y | 28 | CONFIG_MACH_QT2410=y |
| 29 | CONFIG_ARCH_SMDK2410=y | ||
| 22 | CONFIG_MACH_TCT_HAMMER=y | 30 | CONFIG_MACH_TCT_HAMMER=y |
| 23 | CONFIG_MACH_VR1000=y | 31 | CONFIG_MACH_VR1000=y |
| 24 | CONFIG_MACH_QT2410=y | ||
| 25 | CONFIG_MACH_JIVE=y | 32 | CONFIG_MACH_JIVE=y |
| 26 | CONFIG_MACH_SMDK2412=y | 33 | CONFIG_MACH_SMDK2412=y |
| 27 | CONFIG_MACH_VSTMS=y | 34 | CONFIG_MACH_VSTMS=y |
| 28 | CONFIG_MACH_SMDK2416=y | 35 | CONFIG_MACH_SMDK2416=y |
| 29 | CONFIG_MACH_ANUBIS=y | 36 | CONFIG_MACH_ANUBIS=y |
| 30 | CONFIG_MACH_NEO1973_GTA02=y | 37 | CONFIG_MACH_AT2440EVB=y |
| 38 | CONFIG_MACH_MINI2440=y | ||
| 39 | CONFIG_MACH_NEXCODER_2440=y | ||
| 31 | CONFIG_MACH_OSIRIS=y | 40 | CONFIG_MACH_OSIRIS=y |
| 32 | CONFIG_MACH_OSIRIS_DVS=m | 41 | CONFIG_MACH_OSIRIS_DVS=m |
| 33 | CONFIG_MACH_RX3715=y | 42 | CONFIG_MACH_RX3715=y |
| 34 | CONFIG_ARCH_S3C2440=y | 43 | CONFIG_ARCH_S3C2440=y |
| 35 | CONFIG_MACH_NEXCODER_2440=y | 44 | CONFIG_MACH_NEO1973_GTA02=y |
| 36 | CONFIG_SMDK2440_CPU2442=y | ||
| 37 | CONFIG_MACH_AT2440EVB=y | ||
| 38 | CONFIG_MACH_MINI2440=y | ||
| 39 | CONFIG_MACH_RX1950=y | 45 | CONFIG_MACH_RX1950=y |
| 46 | CONFIG_SMDK2440_CPU2442=y | ||
| 40 | CONFIG_MACH_SMDK2443=y | 47 | CONFIG_MACH_SMDK2443=y |
| 41 | # CONFIG_ARM_THUMB is not set | 48 | # CONFIG_ARM_THUMB is not set |
| 42 | CONFIG_ZBOOT_ROM_TEXT=0x0 | 49 | CONFIG_ZBOOT_ROM_TEXT=0x0 |
| @@ -45,7 +52,6 @@ CONFIG_CMDLINE="root=/dev/hda1 ro init=/bin/bash console=ttySAC0" · 2 unmodified lines | |||
| 45 | CONFIG_FPE_NWFPE=y | 52 | CONFIG_FPE_NWFPE=y |
| 46 | CONFIG_FPE_NWFPE_XP=y | 53 | CONFIG_FPE_NWFPE_XP=y |
| 47 | CONFIG_BINFMT_AOUT=y | 54 | CONFIG_BINFMT_AOUT=y |
| 48 | CONFIG_PM=y | ||
| 49 | CONFIG_APM_EMULATION=m | 55 | CONFIG_APM_EMULATION=m |
| 50 | CONFIG_NET=y | 56 | CONFIG_NET=y |
| 51 | CONFIG_PACKET=y | 57 | CONFIG_PACKET=y |
| @@ -58,7 +64,6 @@ CONFIG_IP_PNP=y · 6 unmodified lines | |||
| 58 | CONFIG_IP_PNP_DHCP=y | 64 | CONFIG_IP_PNP_DHCP=y |
| 59 | CONFIG_IP_PNP_BOOTP=y | 65 | CONFIG_IP_PNP_BOOTP=y |
| 60 | CONFIG_NET_IPIP=m | 66 | CONFIG_NET_IPIP=m |
| 61 | CONFIG_NET_IPGRE=m | ||
| 62 | CONFIG_INET_AH=m | 67 | CONFIG_INET_AH=m |
| 63 | CONFIG_INET_ESP=m | 68 | CONFIG_INET_ESP=m |
| 64 | CONFIG_INET_IPCOMP=m | 69 | CONFIG_INET_IPCOMP=m |
| @@ -80,7 +85,6 @@ CONFIG_IPV6_MIP6=m · 15 unmodified lines | |||
| 80 | CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m | 85 | CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m |
| 81 | CONFIG_IPV6_TUNNEL=m | 86 | CONFIG_IPV6_TUNNEL=m |
| 82 | CONFIG_NETFILTER=y | 87 | CONFIG_NETFILTER=y |
| 83 | CONFIG_NETFILTER_NETLINK_QUEUE=m | ||
| 84 | CONFIG_NF_CONNTRACK=m | 88 | CONFIG_NF_CONNTRACK=m |
| 85 | CONFIG_NF_CONNTRACK_EVENTS=y | 89 | CONFIG_NF_CONNTRACK_EVENTS=y |
| 86 | CONFIG_NF_CT_PROTO_DCCP=m | 90 | CONFIG_NF_CT_PROTO_DCCP=m |
| @@ -138,7 +142,6 @@ CONFIG_IP_VS=m · 51 unmodified lines | |||
| 138 | CONFIG_NF_CONNTRACK_IPV4=m | 142 | CONFIG_NF_CONNTRACK_IPV4=m |
| 139 | CONFIG_IP_NF_QUEUE=m | 143 | CONFIG_IP_NF_QUEUE=m |
| 140 | CONFIG_IP_NF_IPTABLES=m | 144 | CONFIG_IP_NF_IPTABLES=m |
| 141 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
| 142 | CONFIG_IP_NF_MATCH_AH=m | 145 | CONFIG_IP_NF_MATCH_AH=m |
| 143 | CONFIG_IP_NF_MATCH_ECN=m | 146 | CONFIG_IP_NF_MATCH_ECN=m |
| 144 | CONFIG_IP_NF_MATCH_TTL=m | 147 | CONFIG_IP_NF_MATCH_TTL=m |
| @@ -150,7 +153,6 @@ CONFIG_NF_NAT=m · 5 unmodified lines | |||
| 150 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 153 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
| 151 | CONFIG_IP_NF_TARGET_NETMAP=m | 154 | CONFIG_IP_NF_TARGET_NETMAP=m |
| 152 | CONFIG_IP_NF_TARGET_REDIRECT=m | 155 | CONFIG_IP_NF_TARGET_REDIRECT=m |
| 153 | CONFIG_NF_NAT_SNMP_BASIC=m | ||
| 154 | CONFIG_IP_NF_MANGLE=m | 156 | CONFIG_IP_NF_MANGLE=m |
| 155 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | 157 | CONFIG_IP_NF_TARGET_CLUSTERIP=m |
| 156 | CONFIG_IP_NF_TARGET_ECN=m | 158 | CONFIG_IP_NF_TARGET_ECN=m |
| @@ -177,8 +179,6 @@ CONFIG_IP6_NF_TARGET_REJECT=m · 20 unmodified lines | |||
| 177 | CONFIG_IP6_NF_MANGLE=m | 179 | CONFIG_IP6_NF_MANGLE=m |
| 178 | CONFIG_IP6_NF_RAW=m | 180 | CONFIG_IP6_NF_RAW=m |
| 179 | CONFIG_BT=m | 181 | CONFIG_BT=m |
| 180 | CONFIG_BT_L2CAP=m | ||
| 181 | CONFIG_BT_SCO=m | ||
| 182 | CONFIG_BT_RFCOMM=m | 182 | CONFIG_BT_RFCOMM=m |
| 183 | CONFIG_BT_RFCOMM_TTY=y | 183 | CONFIG_BT_RFCOMM_TTY=y |
| 184 | CONFIG_BT_BNEP=m | 184 | CONFIG_BT_BNEP=m |
| @@ -199,7 +199,6 @@ CONFIG_MAC80211_MESH=y · 14 unmodified lines | |||
| 199 | CONFIG_MAC80211_LEDS=y | 199 | CONFIG_MAC80211_LEDS=y |
| 200 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 200 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
| 201 | CONFIG_MTD=y | 201 | CONFIG_MTD=y |
| 202 | CONFIG_MTD_PARTITIONS=y | ||
| 203 | CONFIG_MTD_REDBOOT_PARTS=y | 202 | CONFIG_MTD_REDBOOT_PARTS=y |
| 204 | CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y | 203 | CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y |
| 205 | CONFIG_MTD_CMDLINE_PARTS=y | 204 | CONFIG_MTD_CMDLINE_PARTS=y |
| @@ -221,9 +220,6 @@ CONFIG_BLK_DEV_NBD=m · 15 unmodified lines | |||
| 221 | CONFIG_BLK_DEV_UB=m | 220 | CONFIG_BLK_DEV_UB=m |
| 222 | CONFIG_BLK_DEV_RAM=y | 221 | CONFIG_BLK_DEV_RAM=y |
| 223 | CONFIG_ATA_OVER_ETH=m | 222 | CONFIG_ATA_OVER_ETH=m |
| 224 | CONFIG_EEPROM_AT25=m | ||
| 225 | CONFIG_EEPROM_LEGACY=m | ||
| 226 | CONFIG_EEPROM_93CX6=m | ||
| 227 | CONFIG_IDE=y | 223 | CONFIG_IDE=y |
| 228 | CONFIG_BLK_DEV_IDECD=y | 224 | CONFIG_BLK_DEV_IDECD=y |
| 229 | CONFIG_BLK_DEV_IDETAPE=m | 225 | CONFIG_BLK_DEV_IDETAPE=m |
| @@ -240,7 +236,6 @@ CONFIG_SCSI_MULTI_LUN=y · 10 unmodified lines | |||
| 240 | CONFIG_SCSI_CONSTANTS=y | 236 | CONFIG_SCSI_CONSTANTS=y |
| 241 | CONFIG_SCSI_SCAN_ASYNC=y | 237 | CONFIG_SCSI_SCAN_ASYNC=y |
| 242 | CONFIG_NETDEVICES=y | 238 | CONFIG_NETDEVICES=y |
| 243 | CONFIG_NET_ETHERNET=y | ||
| 244 | CONFIG_DM9000=y | 239 | CONFIG_DM9000=y |
| 245 | CONFIG_INPUT_EVDEV=y | 240 | CONFIG_INPUT_EVDEV=y |
| 246 | CONFIG_MOUSE_APPLETOUCH=m | 241 | CONFIG_MOUSE_APPLETOUCH=m |
| @@ -274,7 +269,6 @@ CONFIG_JOYSTICK_XPAD_LEDS=y · 27 unmodified lines | |||
| 274 | CONFIG_INPUT_TOUCHSCREEN=y | 269 | CONFIG_INPUT_TOUCHSCREEN=y |
| 275 | CONFIG_TOUCHSCREEN_USB_COMPOSITE=m | 270 | CONFIG_TOUCHSCREEN_USB_COMPOSITE=m |
| 276 | CONFIG_INPUT_MISC=y | 271 | CONFIG_INPUT_MISC=y |
| 277 | CONFIG_INPUT_ATI_REMOTE=m | ||
| 278 | CONFIG_INPUT_ATI_REMOTE2=m | 272 | CONFIG_INPUT_ATI_REMOTE2=m |
| 279 | CONFIG_INPUT_KEYSPAN_REMOTE=m | 273 | CONFIG_INPUT_KEYSPAN_REMOTE=m |
| 280 | CONFIG_INPUT_POWERMATE=m | 274 | CONFIG_INPUT_POWERMATE=m |
| @@ -300,7 +294,6 @@ CONFIG_I2C_SIMTEC=y · 19 unmodified lines | |||
| 300 | CONFIG_SPI=y | 294 | CONFIG_SPI=y |
| 301 | CONFIG_SPI_GPIO=m | 295 | CONFIG_SPI_GPIO=m |
| 302 | CONFIG_SPI_S3C24XX=m | 296 | CONFIG_SPI_S3C24XX=m |
| 303 | CONFIG_SPI_S3C24XX_GPIO=m | ||
| 304 | CONFIG_SPI_SPIDEV=m | 297 | CONFIG_SPI_SPIDEV=m |
| 305 | CONFIG_SPI_TLE62X0=m | 298 | CONFIG_SPI_TLE62X0=m |
| 306 | CONFIG_SENSORS_LM75=m | 299 | CONFIG_SENSORS_LM75=m |
| @@ -315,7 +308,6 @@ CONFIG_FB_MODE_HELPERS=y · 8 unmodified lines | |||
| 315 | CONFIG_FB_S3C2410=y | 308 | CONFIG_FB_S3C2410=y |
| 316 | CONFIG_FB_SM501=y | 309 | CONFIG_FB_SM501=y |
| 317 | CONFIG_BACKLIGHT_PWM=m | 310 | CONFIG_BACKLIGHT_PWM=m |
| 318 | # CONFIG_VGA_CONSOLE is not set | ||
| 319 | CONFIG_FRAMEBUFFER_CONSOLE=y | 311 | CONFIG_FRAMEBUFFER_CONSOLE=y |
| 320 | CONFIG_SOUND=y | 312 | CONFIG_SOUND=y |
| 321 | CONFIG_SND=y | 313 | CONFIG_SND=y |
| @@ -330,10 +322,6 @@ CONFIG_SND_VERBOSE_PRINTK=y · 8 unmodified lines | |||
| 330 | CONFIG_SND_USB_AUDIO=m | 322 | CONFIG_SND_USB_AUDIO=m |
| 331 | CONFIG_SND_USB_CAIAQ=m | 323 | CONFIG_SND_USB_CAIAQ=m |
| 332 | CONFIG_SND_SOC=y | 324 | CONFIG_SND_SOC=y |
| 333 | CONFIG_SND_S3C24XX_SOC=y | ||
| 334 | CONFIG_SND_S3C24XX_SOC_JIVE_WM8750=m | ||
| 335 | CONFIG_SND_S3C24XX_SOC_SMDK2443_WM9710=m | ||
| 336 | CONFIG_SND_S3C24XX_SOC_LN2440SBC_ALC650=m | ||
| 337 | # CONFIG_USB_HID is not set | 325 | # CONFIG_USB_HID is not set |
| 338 | CONFIG_USB=y | 326 | CONFIG_USB=y |
| 339 | CONFIG_USB_DEVICEFS=y | 327 | CONFIG_USB_DEVICEFS=y |
| @@ -387,9 +375,7 @@ CONFIG_MMC_TEST=m · 47 unmodified lines | |||
| 387 | CONFIG_MMC_SDHCI=m | 375 | CONFIG_MMC_SDHCI=m |
| 388 | CONFIG_MMC_SPI=m | 376 | CONFIG_MMC_SPI=m |
| 389 | CONFIG_MMC_S3C=y | 377 | CONFIG_MMC_S3C=y |
| 390 | CONFIG_LEDS_CLASS=m | ||
| 391 | CONFIG_LEDS_S3C24XX=m | 378 | CONFIG_LEDS_S3C24XX=m |
| 392 | CONFIG_LEDS_H1940=m | ||
| 393 | CONFIG_LEDS_PCA9532=m | 379 | CONFIG_LEDS_PCA9532=m |
| 394 | CONFIG_LEDS_GPIO=m | 380 | CONFIG_LEDS_GPIO=m |
| 395 | CONFIG_LEDS_PCA955X=m | 381 | CONFIG_LEDS_PCA955X=m |
| @@ -410,8 +396,6 @@ CONFIG_EXT3_FS=y · 14 unmodified lines | |||
| 410 | CONFIG_EXT3_FS_POSIX_ACL=y | 396 | CONFIG_EXT3_FS_POSIX_ACL=y |
| 411 | CONFIG_EXT4_FS=m | 397 | CONFIG_EXT4_FS=m |
| 412 | CONFIG_EXT4_FS_POSIX_ACL=y | 398 | CONFIG_EXT4_FS_POSIX_ACL=y |
| 413 | CONFIG_INOTIFY=y | ||
| 414 | CONFIG_AUTOFS_FS=m | ||
| 415 | CONFIG_AUTOFS4_FS=m | 399 | CONFIG_AUTOFS4_FS=m |
| 416 | CONFIG_FUSE_FS=m | 400 | CONFIG_FUSE_FS=m |
| 417 | CONFIG_ISO9660_FS=y | 401 | CONFIG_ISO9660_FS=y |
| @@ -436,9 +420,6 @@ CONFIG_NFSD=m · 18 unmodified lines | |||
| 436 | CONFIG_NFSD_V3_ACL=y | 420 | CONFIG_NFSD_V3_ACL=y |
| 437 | CONFIG_NFSD_V4=y | 421 | CONFIG_NFSD_V4=y |
| 438 | CONFIG_CIFS=m | 422 | CONFIG_CIFS=m |
| 439 | CONFIG_PARTITION_ADVANCED=y | ||
| 440 | CONFIG_BSD_DISKLABEL=y | ||
| 441 | CONFIG_SOLARIS_X86_PARTITION=y | ||
| 442 | CONFIG_NLS_CODEPAGE_437=y | 423 | CONFIG_NLS_CODEPAGE_437=y |
| 443 | CONFIG_NLS_CODEPAGE_737=m | 424 | CONFIG_NLS_CODEPAGE_737=m |
| 444 | CONFIG_NLS_CODEPAGE_775=m | 425 | CONFIG_NLS_CODEPAGE_775=m |
| @@ -481,9 +462,7 @@ CONFIG_MAGIC_SYSRQ=y · 36 unmodified lines | |||
| 481 | CONFIG_DEBUG_KERNEL=y | 462 | CONFIG_DEBUG_KERNEL=y |
| 482 | CONFIG_DEBUG_MUTEXES=y | 463 | CONFIG_DEBUG_MUTEXES=y |
| 483 | CONFIG_DEBUG_INFO=y | 464 | CONFIG_DEBUG_INFO=y |
| 484 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
| 485 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 465 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
| 486 | CONFIG_DEBUG_USER=y | 466 | CONFIG_DEBUG_USER=y |
| 487 | CONFIG_DEBUG_ERRORS=y | ||
| 488 | CONFIG_DEBUG_LL=y | 467 | CONFIG_DEBUG_LL=y |
| 489 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 468 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
| @@ -14,7 +14,7 @@ CONFIG_SLOB=y · 13 unmodified lines | |||
| 14 | CONFIG_MODULES=y | 14 | CONFIG_MODULES=y |
| 15 | CONFIG_MODULE_UNLOAD=y | 15 | CONFIG_MODULE_UNLOAD=y |
| 16 | # CONFIG_BLK_DEV_BSG is not set | 16 | # CONFIG_BLK_DEV_BSG is not set |
| 17 | CONFIG_ARCH_S3C2410=y | 17 | CONFIG_ARCH_S3C24XX=y |
| 18 | CONFIG_MACH_TCT_HAMMER=y | 18 | CONFIG_MACH_TCT_HAMMER=y |
| 19 | CONFIG_ZBOOT_ROM_TEXT=0x0 | 19 | CONFIG_ZBOOT_ROM_TEXT=0x0 |
| 20 | CONFIG_ZBOOT_ROM_BSS=0x0 | 20 | CONFIG_ZBOOT_ROM_BSS=0x0 |
| @@ -11,11 +11,14 @@ CONFIG_RT_GROUP_SCHED=y · 10 unmodified lines | |||
| 11 | CONFIG_BLK_DEV_INITRD=y | 11 | CONFIG_BLK_DEV_INITRD=y |
| 12 | # CONFIG_ELF_CORE is not set | 12 | # CONFIG_ELF_CORE is not set |
| 13 | CONFIG_EMBEDDED=y | 13 | CONFIG_EMBEDDED=y |
| 14 | CONFIG_PERF_EVENTS=y | ||
| 14 | CONFIG_SLAB=y | 15 | CONFIG_SLAB=y |
| 15 | CONFIG_MODULES=y | 16 | CONFIG_MODULES=y |
| 16 | CONFIG_MODULE_UNLOAD=y | 17 | CONFIG_MODULE_UNLOAD=y |
| 17 | CONFIG_MODULE_FORCE_UNLOAD=y | 18 | CONFIG_MODULE_FORCE_UNLOAD=y |
| 18 | # CONFIG_BLK_DEV_BSG is not set | 19 | # CONFIG_BLK_DEV_BSG is not set |
| 20 | CONFIG_PARTITION_ADVANCED=y | ||
| 21 | CONFIG_EFI_PARTITION=y | ||
| 19 | # CONFIG_IOSCHED_DEADLINE is not set | 22 | # CONFIG_IOSCHED_DEADLINE is not set |
| 20 | # CONFIG_IOSCHED_CFQ is not set | 23 | # CONFIG_IOSCHED_CFQ is not set |
| 21 | CONFIG_ARCH_TEGRA=y | 24 | CONFIG_ARCH_TEGRA=y |
| @@ -27,18 +30,20 @@ CONFIG_MACH_PAZ00=y · 5 unmodified lines | |||
| 27 | CONFIG_MACH_TRIMSLICE=y | 30 | CONFIG_MACH_TRIMSLICE=y |
| 28 | CONFIG_MACH_WARIO=y | 31 | CONFIG_MACH_WARIO=y |
| 29 | CONFIG_MACH_VENTANA=y | 32 | CONFIG_MACH_VENTANA=y |
| 30 | CONFIG_TEGRA_DEBUG_UARTD=y | 33 | CONFIG_TEGRA_EMC_SCALING_ENABLE=y |
| 31 | CONFIG_ARM_ERRATA_742230=y | ||
| 32 | CONFIG_NO_HZ=y | 34 | CONFIG_NO_HZ=y |
| 33 | CONFIG_HIGH_RES_TIMERS=y | 35 | CONFIG_HIGH_RES_TIMERS=y |
| 34 | CONFIG_SMP=y | 36 | CONFIG_SMP=y |
| 35 | CONFIG_NR_CPUS=2 | ||
| 36 | CONFIG_PREEMPT=y | 37 | CONFIG_PREEMPT=y |
| 37 | CONFIG_AEABI=y | 38 | CONFIG_AEABI=y |
| 38 | # CONFIG_OABI_COMPAT is not set | 39 | # CONFIG_OABI_COMPAT is not set |
| 39 | CONFIG_HIGHMEM=y | 40 | CONFIG_HIGHMEM=y |
| 40 | CONFIG_ZBOOT_ROM_TEXT=0x0 | 41 | CONFIG_ZBOOT_ROM_TEXT=0x0 |
| 41 | CONFIG_ZBOOT_ROM_BSS=0x0 | 42 | CONFIG_ZBOOT_ROM_BSS=0x0 |
| 43 | CONFIG_AUTO_ZRELADDR=y | ||
| 44 | CONFIG_CPU_FREQ=y | ||
| 45 | CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y | ||
| 46 | CONFIG_CPU_IDLE=y | ||
| 42 | CONFIG_VFP=y | 47 | CONFIG_VFP=y |
| 43 | CONFIG_NET=y | 48 | CONFIG_NET=y |
| 44 | CONFIG_PACKET=y | 49 | CONFIG_PACKET=y |
| @@ -68,7 +73,6 @@ CONFIG_IPV6_MULTIPLE_TABLES=y · 23 unmodified lines | |||
| 68 | # CONFIG_FIRMWARE_IN_KERNEL is not set | 73 | # CONFIG_FIRMWARE_IN_KERNEL is not set |
| 69 | CONFIG_PROC_DEVICETREE=y | 74 | CONFIG_PROC_DEVICETREE=y |
| 70 | CONFIG_BLK_DEV_LOOP=y | 75 | CONFIG_BLK_DEV_LOOP=y |
| 71 | CONFIG_MISC_DEVICES=y | ||
| 72 | CONFIG_AD525X_DPOT=y | 76 | CONFIG_AD525X_DPOT=y |
| 73 | CONFIG_AD525X_DPOT_I2C=y | 77 | CONFIG_AD525X_DPOT_I2C=y |
| 74 | CONFIG_ICS932S401=y | 78 | CONFIG_ICS932S401=y |
| @@ -76,6 +80,7 @@ CONFIG_APDS9802ALS=y · 1 unmodified line | |||
| 76 | CONFIG_ISL29003=y | 80 | CONFIG_ISL29003=y |
| 77 | CONFIG_SCSI=y | 81 | CONFIG_SCSI=y |
| 78 | CONFIG_BLK_DEV_SD=y | 82 | CONFIG_BLK_DEV_SD=y |
| 83 | CONFIG_BLK_DEV_SR=y | ||
| 79 | # CONFIG_SCSI_LOWLEVEL is not set | 84 | # CONFIG_SCSI_LOWLEVEL is not set |
| 80 | CONFIG_NETDEVICES=y | 85 | CONFIG_NETDEVICES=y |
| 81 | CONFIG_DUMMY=y | 86 | CONFIG_DUMMY=y |
| @@ -85,8 +90,7 @@ CONFIG_USB_USBNET=y · 3 unmodified lines | |||
| 85 | CONFIG_USB_NET_SMSC75XX=y | 90 | CONFIG_USB_NET_SMSC75XX=y |
| 86 | CONFIG_USB_NET_SMSC95XX=y | 91 | CONFIG_USB_NET_SMSC95XX=y |
| 87 | # CONFIG_WLAN is not set | 92 | # CONFIG_WLAN is not set |
| 88 | # CONFIG_INPUT is not set | 93 | CONFIG_INPUT_EVDEV=y |
| 89 | # CONFIG_SERIO is not set | ||
| 90 | # CONFIG_VT is not set | 94 | # CONFIG_VT is not set |
| 91 | # CONFIG_LEGACY_PTYS is not set | 95 | # CONFIG_LEGACY_PTYS is not set |
| 92 | # CONFIG_DEVKMEM is not set | 96 | # CONFIG_DEVKMEM is not set |
| @@ -96,13 +100,15 @@ CONFIG_SERIAL_OF_PLATFORM=y · 3 unmodified lines | |||
| 96 | # CONFIG_HW_RANDOM is not set | 100 | # CONFIG_HW_RANDOM is not set |
| 97 | CONFIG_I2C=y | 101 | CONFIG_I2C=y |
| 98 | # CONFIG_I2C_COMPAT is not set | 102 | # CONFIG_I2C_COMPAT is not set |
| 99 | # CONFIG_I2C_HELPER_AUTO is not set | ||
| 100 | CONFIG_I2C_TEGRA=y | 103 | CONFIG_I2C_TEGRA=y |
| 101 | CONFIG_SPI=y | 104 | CONFIG_SPI=y |
| 102 | CONFIG_SPI_TEGRA=y | 105 | CONFIG_SPI_TEGRA=y |
| 103 | CONFIG_SENSORS_LM90=y | 106 | CONFIG_SENSORS_LM90=y |
| 104 | CONFIG_MFD_TPS6586X=y | 107 | CONFIG_MFD_TPS6586X=y |
| 105 | CONFIG_REGULATOR=y | 108 | CONFIG_REGULATOR=y |
| 109 | CONFIG_REGULATOR_FIXED_VOLTAGE=y | ||
| 110 | CONFIG_REGULATOR_VIRTUAL_CONSUMER=y | ||
| 111 | CONFIG_REGULATOR_GPIO=y | ||
| 106 | CONFIG_REGULATOR_TPS6586X=y | 112 | CONFIG_REGULATOR_TPS6586X=y |
| 107 | CONFIG_SOUND=y | 113 | CONFIG_SOUND=y |
| 108 | CONFIG_SND=y | 114 | CONFIG_SND=y |
| @@ -116,11 +122,13 @@ CONFIG_SND_SOC=y · 7 unmodified lines | |||
| 116 | CONFIG_SND_SOC_TEGRA=y | 122 | CONFIG_SND_SOC_TEGRA=y |
| 117 | CONFIG_SND_SOC_TEGRA_WM8903=y | 123 | CONFIG_SND_SOC_TEGRA_WM8903=y |
| 118 | CONFIG_SND_SOC_TEGRA_TRIMSLICE=y | 124 | CONFIG_SND_SOC_TEGRA_TRIMSLICE=y |
| 125 | CONFIG_SND_SOC_TEGRA_ALC5632=y | ||
| 119 | CONFIG_USB=y | 126 | CONFIG_USB=y |
| 120 | CONFIG_USB_EHCI_HCD=y | 127 | CONFIG_USB_EHCI_HCD=y |
| 121 | CONFIG_USB_EHCI_TEGRA=y | 128 | CONFIG_USB_EHCI_TEGRA=y |
| 122 | CONFIG_USB_STORAGE=y | 129 | CONFIG_USB_STORAGE=y |
| 123 | CONFIG_MMC=y | 130 | CONFIG_MMC=y |
| 131 | CONFIG_MMC_BLOCK_MINORS=16 | ||
| 124 | CONFIG_MMC_SDHCI=y | 132 | CONFIG_MMC_SDHCI=y |
| 125 | CONFIG_MMC_SDHCI_PLTFM=y | 133 | CONFIG_MMC_SDHCI_PLTFM=y |
| 126 | CONFIG_MMC_SDHCI_TEGRA=y | 134 | CONFIG_MMC_SDHCI_TEGRA=y |
| @@ -130,6 +138,11 @@ CONFIG_STAGING=y · 3 unmodified lines | |||
| 130 | CONFIG_IIO=y | 138 | CONFIG_IIO=y |
| 131 | CONFIG_SENSORS_ISL29018=y | 139 | CONFIG_SENSORS_ISL29018=y |
| 132 | CONFIG_SENSORS_AK8975=y | 140 | CONFIG_SENSORS_AK8975=y |
| 141 | CONFIG_MFD_NVEC=y | ||
| 142 | CONFIG_KEYBOARD_NVEC=y | ||
| 143 | CONFIG_SERIO_NVEC_PS2=y | ||
| 144 | CONFIG_TEGRA_IOMMU_GART=y | ||
| 145 | CONFIG_TEGRA_IOMMU_SMMU=y | ||
| 133 | CONFIG_EXT2_FS=y | 146 | CONFIG_EXT2_FS=y |
| 134 | CONFIG_EXT2_FS_XATTR=y | 147 | CONFIG_EXT2_FS_XATTR=y |
| 135 | CONFIG_EXT2_FS_POSIX_ACL=y | 148 | CONFIG_EXT2_FS_POSIX_ACL=y |
| @@ -138,13 +151,12 @@ CONFIG_EXT3_FS=y · 2 unmodified lines | |||
| 138 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 151 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
| 139 | CONFIG_EXT3_FS_POSIX_ACL=y | 152 | CONFIG_EXT3_FS_POSIX_ACL=y |
| 140 | CONFIG_EXT3_FS_SECURITY=y | 153 | CONFIG_EXT3_FS_SECURITY=y |
| 154 | CONFIG_EXT4_FS=y | ||
| 141 | # CONFIG_DNOTIFY is not set | 155 | # CONFIG_DNOTIFY is not set |
| 142 | CONFIG_VFAT_FS=y | 156 | CONFIG_VFAT_FS=y |
| 143 | CONFIG_TMPFS=y | 157 | CONFIG_TMPFS=y |
| 144 | CONFIG_NFS_FS=y | 158 | CONFIG_NFS_FS=y |
| 145 | CONFIG_ROOT_NFS=y | 159 | CONFIG_ROOT_NFS=y |
| 146 | CONFIG_PARTITION_ADVANCED=y | ||
| 147 | CONFIG_EFI_PARTITION=y | ||
| 148 | CONFIG_NLS_CODEPAGE_437=y | 160 | CONFIG_NLS_CODEPAGE_437=y |
| 149 | CONFIG_NLS_ISO8859_1=y | 161 | CONFIG_NLS_ISO8859_1=y |
| 150 | CONFIG_PRINTK_TIME=y | 162 | CONFIG_PRINTK_TIME=y |
| @@ -162,9 +174,8 @@ CONFIG_DEBUG_SG=y · 11 unmodified lines | |||
| 162 | CONFIG_DEBUG_LL=y | 174 | CONFIG_DEBUG_LL=y |
| 163 | CONFIG_EARLY_PRINTK=y | 175 | CONFIG_EARLY_PRINTK=y |
| 164 | CONFIG_CRYPTO_ECB=y | 176 | CONFIG_CRYPTO_ECB=y |
| 165 | CONFIG_CRYPTO_AES=y | ||
| 166 | CONFIG_CRYPTO_ARC4=y | 177 | CONFIG_CRYPTO_ARC4=y |
| 167 | CONFIG_CRYPTO_TWOFISH=y | 178 | CONFIG_CRYPTO_TWOFISH=y |
| 168 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 179 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
| 180 | CONFIG_CRYPTO_DEV_TEGRA_AES=y | ||
| 169 | CONFIG_CRC_CCITT=y | 181 | CONFIG_CRC_CCITT=y |
| 170 | CONFIG_CRC16=y | ||
| @@ -13,6 +13,7 @@ CONFIG_UX500_SOC_DB8500=y · 12 unmodified lines | |||
| 13 | CONFIG_MACH_HREFV60=y | 13 | CONFIG_MACH_HREFV60=y |
| 14 | CONFIG_MACH_SNOWBALL=y | 14 | CONFIG_MACH_SNOWBALL=y |
| 15 | CONFIG_MACH_U5500=y | 15 | CONFIG_MACH_U5500=y |
| 16 | CONFIG_MACH_UX500_DT=y | ||
| 16 | CONFIG_NO_HZ=y | 17 | CONFIG_NO_HZ=y |
| 17 | CONFIG_HIGH_RES_TIMERS=y | 18 | CONFIG_HIGH_RES_TIMERS=y |
| 18 | CONFIG_SMP=y | 19 | CONFIG_SMP=y |
| @@ -23,6 +23,8 @@ · 22 unmodified lines | |||
| 23 | #include <asm/ptrace.h> | 23 | #include <asm/ptrace.h> |
| 24 | #include <asm/domain.h> | 24 | #include <asm/domain.h> |
| 25 | 25 | ||
| 26 | #define IOMEM(x) (x) | ||
| 27 | |||
| 26 | /* | 28 | /* |
| 27 | * Endian independent macros for shifting bytes within registers. | 29 | * Endian independent macros for shifting bytes within registers. |
| 28 | */ | 30 | */ |
| @@ -13,7 +13,9 @@ · 12 unmodified lines | |||
| 13 | 13 | ||
| 14 | #include <linux/compiler.h> | 14 | #include <linux/compiler.h> |
| 15 | #include <linux/types.h> | 15 | #include <linux/types.h> |
| 16 | #include <asm/system.h> | 16 | #include <linux/irqflags.h> |
| 17 | #include <asm/barrier.h> | ||
| 18 | #include <asm/cmpxchg.h> | ||
| 17 | 19 | ||
| 18 | #define ATOMIC_INIT(i) { (i) } | 20 | #define ATOMIC_INIT(i) { (i) } |
| 19 | 21 | ||
| @@ -0,0 +1,69 @@ | |||
| 1 | #ifndef __ASM_BARRIER_H | ||
| 2 | #define __ASM_BARRIER_H | ||
| 3 | |||
| 4 | #ifndef __ASSEMBLY__ | ||
| 5 | #include <asm/outercache.h> | ||
| 6 | |||
| 7 | #define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t"); | ||
| 8 | |||
| 9 | #if __LINUX_ARM_ARCH__ >= 7 || \ | ||
| 10 | (__LINUX_ARM_ARCH__ == 6 && defined(CONFIG_CPU_32v6K)) | ||
| 11 | #define sev() __asm__ __volatile__ ("sev" : : : "memory") | ||
| 12 | #define wfe() __asm__ __volatile__ ("wfe" : : : "memory") | ||
| 13 | #define wfi() __asm__ __volatile__ ("wfi" : : : "memory") | ||
| 14 | #endif | ||
| 15 | |||
| 16 | #if __LINUX_ARM_ARCH__ >= 7 | ||
| 17 | #define isb() __asm__ __volatile__ ("isb" : : : "memory") | ||
| 18 | #define dsb() __asm__ __volatile__ ("dsb" : : : "memory") | ||
| 19 | #define dmb() __asm__ __volatile__ ("dmb" : : : "memory") | ||
| 20 | #elif defined(CONFIG_CPU_XSC3) || __LINUX_ARM_ARCH__ == 6 | ||
| 21 | #define isb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c5, 4" \ | ||
| 22 | : : "r" (0) : "memory") | ||
| 23 | #define dsb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 4" \ | ||
| 24 | : : "r" (0) : "memory") | ||
| 25 | #define dmb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" \ | ||
| 26 | : : "r" (0) : "memory") | ||
| 27 | #elif defined(CONFIG_CPU_FA526) | ||
| 28 | #define isb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c5, 4" \ | ||
| 29 | : : "r" (0) : "memory") | ||
| 30 | #define dsb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 4" \ | ||
| 31 | : : "r" (0) : "memory") | ||
| 32 | #define dmb() __asm__ __volatile__ ("" : : : "memory") | ||
| 33 | #else | ||
| 34 | #define isb() __asm__ __volatile__ ("" : : : "memory") | ||
| 35 | #define dsb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 4" \ | ||
| 36 | : : "r" (0) : "memory") | ||
| 37 | #define dmb() __asm__ __volatile__ ("" : : : "memory") | ||
| 38 | #endif | ||
| 39 | |||
| 40 | #ifdef CONFIG_ARCH_HAS_BARRIERS | ||
| 41 | #include <mach/barriers.h> | ||
| 42 | #elif defined(CONFIG_ARM_DMA_MEM_BUFFERABLE) || defined(CONFIG_SMP) | ||
| 43 | #define mb() do { dsb(); outer_sync(); } while (0) | ||
| 44 | #define rmb() dsb() | ||
| 45 | #define wmb() mb() | ||
| 46 | #else | ||
| 47 | #include <asm/memory.h> | ||
| 48 | #define mb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) | ||
| 49 | #define rmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) | ||
| 50 | #define wmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) | ||
| 51 | #endif | ||
| 52 | |||
| 53 | #ifndef CONFIG_SMP | ||
| 54 | #define smp_mb() barrier() | ||
| 55 | #define smp_rmb() barrier() | ||
| 56 | #define smp_wmb() barrier() | ||
| 57 | #else | ||
| 58 | #define smp_mb() dmb() | ||
| 59 | #define smp_rmb() dmb() | ||
| 60 | #define smp_wmb() dmb() | ||
| 61 | #endif | ||
| 62 | |||
| 63 | #define read_barrier_depends() do { } while(0) | ||
| 64 | #define smp_read_barrier_depends() do { } while(0) | ||
| 65 | |||
| 66 | #define set_mb(var, value) do { var = value; smp_mb(); } while (0) | ||
| 67 | |||
| 68 | #endif /* !__ASSEMBLY__ */ | ||
| 69 | #endif /* __ASM_BARRIER_H */ | ||
| @@ -24,7 +24,7 @@ · 23 unmodified lines | |||
| 24 | #endif | 24 | #endif |
| 25 | 25 | ||
| 26 | #include <linux/compiler.h> | 26 | #include <linux/compiler.h> |
| 27 | #include <asm/system.h> | 27 | #include <linux/irqflags.h> |
| 28 | 28 | ||
| 29 | #define smp_mb__before_clear_bit() smp_mb() | 29 | #define smp_mb__before_clear_bit() smp_mb() |
| 30 | #define smp_mb__after_clear_bit() smp_mb() | 30 | #define smp_mb__after_clear_bit() smp_mb() |
| @@ -1,6 +1,7 @@ | |||
| 1 | #ifndef _ASMARM_BUG_H | 1 | #ifndef _ASMARM_BUG_H |
| 2 | #define _ASMARM_BUG_H | 2 | #define _ASMARM_BUG_H |
| 3 | 3 | ||
| 4 | #include <linux/linkage.h> | ||
| 4 | 5 | ||
| 5 | #ifdef CONFIG_BUG | 6 | #ifdef CONFIG_BUG |
| 6 | 7 | ||
| @@ -57,4 +58,33 @@ do { \ · 50 unmodified lines | |||
| 57 | 58 | ||
| 58 | #include <asm-generic/bug.h> | 59 | #include <asm-generic/bug.h> |
| 59 | 60 | ||
| 61 | struct pt_regs; | ||
| 62 | void die(const char *msg, struct pt_regs *regs, int err); | ||
| 63 | |||
| 64 | struct siginfo; | ||
| 65 | void arm_notify_die(const char *str, struct pt_regs *regs, struct siginfo *info, | ||
| 66 | unsigned long err, unsigned long trap); | ||
| 67 | |||
| 68 | #ifdef CONFIG_ARM_LPAE | ||
| 69 | #define FAULT_CODE_ALIGNMENT 33 | ||
| 70 | #define FAULT_CODE_DEBUG 34 | ||
| 71 | #else | ||
| 72 | #define FAULT_CODE_ALIGNMENT 1 | ||
| 73 | #define FAULT_CODE_DEBUG 2 | ||
| 74 | #endif | ||
| 75 | |||
| 76 | void hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int, | ||
| 77 | struct pt_regs *), | ||
| 78 | int sig, int code, const char *name); | ||
| 79 | |||
| 80 | void hook_ifault_code(int nr, int (*fn)(unsigned long, unsigned int, | ||
| 81 | struct pt_regs *), | ||
| 82 | int sig, int code, const char *name); | ||
| 83 | |||
| 84 | extern asmlinkage void c_backtrace(unsigned long fp, int pmode); | ||
| 85 | |||
| 86 | struct mm_struct; | ||
| 87 | extern void show_pte(struct mm_struct *mm, unsigned long addr); | ||
| 88 | extern void __show_regs(struct pt_regs *); | ||
| 89 | |||
| 60 | #endif | 90 | #endif |
| @@ -0,0 +1,295 @@ | |||
| 1 | #ifndef __ASM_ARM_CMPXCHG_H | ||
| 2 | #define __ASM_ARM_CMPXCHG_H | ||
| 3 | |||
| 4 | #include <linux/irqflags.h> | ||
| 5 | #include <asm/barrier.h> | ||
| 6 | |||
| 7 | #if defined(CONFIG_CPU_SA1100) || defined(CONFIG_CPU_SA110) | ||
| 8 | /* | ||
| 9 | * On the StrongARM, "swp" is terminally broken since it bypasses the | ||
| 10 | * cache totally. This means that the cache becomes inconsistent, and, | ||
| 11 | * since we use normal loads/stores as well, this is really bad. | ||
| 12 | * Typically, this causes oopsen in filp_close, but could have other, | ||
| 13 | * more disastrous effects. There are two work-arounds: | ||
| 14 | * 1. Disable interrupts and emulate the atomic swap | ||
| 15 | * 2. Clean the cache, perform atomic swap, flush the cache | ||
| 16 | * | ||
| 17 | * We choose (1) since its the "easiest" to achieve here and is not | ||
| 18 | * dependent on the processor type. | ||
| 19 | * | ||
| 20 | * NOTE that this solution won't work on an SMP system, so explcitly | ||
| 21 | * forbid it here. | ||
| 22 | */ | ||
| 23 | #define swp_is_buggy | ||
| 24 | #endif | ||
| 25 | |||
| 26 | static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size) | ||
| 27 | { | ||
| 28 | extern void __bad_xchg(volatile void *, int); | ||
| 29 | unsigned long ret; | ||
| 30 | #ifdef swp_is_buggy | ||
| 31 | unsigned long flags; | ||
| 32 | #endif | ||
| 33 | #if __LINUX_ARM_ARCH__ >= 6 | ||
| 34 | unsigned int tmp; | ||
| 35 | #endif | ||
| 36 | |||
| 37 | smp_mb(); | ||
| 38 | |||
| 39 | switch (size) { | ||
| 40 | #if __LINUX_ARM_ARCH__ >= 6 | ||
| 41 | case 1: | ||
| 42 | asm volatile("@ __xchg1\n" | ||
| 43 | "1: ldrexb %0, [%3]\n" | ||
| 44 | " strexb %1, %2, [%3]\n" | ||
| 45 | " teq %1, #0\n" | ||
| 46 | " bne 1b" | ||
| 47 | : "=&r" (ret), "=&r" (tmp) | ||
| 48 | : "r" (x), "r" (ptr) | ||
| 49 | : "memory", "cc"); | ||
| 50 | break; | ||
| 51 | case 4: | ||
| 52 | asm volatile("@ __xchg4\n" | ||
| 53 | "1: ldrex %0, [%3]\n" | ||
| 54 | " strex %1, %2, [%3]\n" | ||
| 55 | " teq %1, #0\n" | ||
| 56 | " bne 1b" | ||
| 57 | : "=&r" (ret), "=&r" (tmp) | ||
| 58 | : "r" (x), "r" (ptr) | ||
| 59 | : "memory", "cc"); | ||
| 60 | break; | ||
| 61 | #elif defined(swp_is_buggy) | ||
| 62 | #ifdef CONFIG_SMP | ||
| 63 | #error SMP is not supported on this platform | ||
| 64 | #endif | ||
| 65 | case 1: | ||
| 66 | raw_local_irq_save(flags); | ||
| 67 | ret = *(volatile unsigned char *)ptr; | ||
| 68 | *(volatile unsigned char *)ptr = x; | ||
| 69 | raw_local_irq_restore(flags); | ||
| 70 | break; | ||
| 71 | |||
| 72 | case 4: | ||
| 73 | raw_local_irq_save(flags); | ||
| 74 | ret = *(volatile unsigned long *)ptr; | ||
| 75 | *(volatile unsigned long *)ptr = x; | ||
| 76 | raw_local_irq_restore(flags); | ||
| 77 | break; | ||
| 78 | #else | ||
| 79 | case 1: | ||
| 80 | asm volatile("@ __xchg1\n" | ||
| 81 | " swpb %0, %1, [%2]" | ||
| 82 | : "=&r" (ret) | ||
| 83 | : "r" (x), "r" (ptr) | ||
| 84 | : "memory", "cc"); | ||
| 85 | break; | ||
| 86 | case 4: | ||
| 87 | asm volatile("@ __xchg4\n" | ||
| 88 | " swp %0, %1, [%2]" | ||
| 89 | : "=&r" (ret) | ||
| 90 | : "r" (x), "r" (ptr) | ||
| 91 | : "memory", "cc"); | ||
| 92 | break; | ||
| 93 | #endif | ||
| 94 | default: | ||
| 95 | __bad_xchg(ptr, size), ret = 0; | ||
| 96 | break; | ||
| 97 | } | ||
| 98 | smp_mb(); | ||
| 99 | |||
| 100 | return ret; | ||
| 101 | } | ||
| 102 | |||
| 103 | #define xchg(ptr,x) \ | ||
| 104 | ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) | ||
| 105 | |||
| 106 | #include <asm-generic/cmpxchg-local.h> | ||
| 107 | |||
| 108 | #if __LINUX_ARM_ARCH__ < 6 | ||
| 109 | /* min ARCH < ARMv6 */ | ||
| 110 | |||
| 111 | #ifdef CONFIG_SMP | ||
| 112 | #error "SMP is not supported on this platform" | ||
| 113 | #endif | ||
| 114 | |||
| 115 | /* | ||
| 116 | * cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make | ||
| 117 | * them available. | ||
| 118 | */ | ||
| 119 | #define cmpxchg_local(ptr, o, n) \ | ||
| 120 | ((__typeof__(*(ptr)))__cmpxchg_local_generic((ptr), (unsigned long)(o),\ | ||
| 121 | (unsigned long)(n), sizeof(*(ptr)))) | ||
| 122 | #define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) | ||
| 123 | |||
| 124 | #ifndef CONFIG_SMP | ||
| 125 | #include <asm-generic/cmpxchg.h> | ||
| 126 | #endif | ||
| 127 | |||
| 128 | #else /* min ARCH >= ARMv6 */ | ||
| 129 | |||
| 130 | extern void __bad_cmpxchg(volatile void *ptr, int size); | ||
| 131 | |||
| 132 | /* | ||
| 133 | * cmpxchg only support 32-bits operands on ARMv6. | ||
| 134 | */ | ||
| 135 | |||
| 136 | static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, | ||
| 137 | unsigned long new, int size) | ||
| 138 | { | ||
| 139 | unsigned long oldval, res; | ||
| 140 | |||
| 141 | switch (size) { | ||
| 142 | #ifndef CONFIG_CPU_V6 /* min ARCH >= ARMv6K */ | ||
| 143 | case 1: | ||
| 144 | do { | ||
| 145 | asm volatile("@ __cmpxchg1\n" | ||
| 146 | " ldrexb %1, [%2]\n" | ||
| 147 | " mov %0, #0\n" | ||
| 148 | " teq %1, %3\n" | ||
| 149 | " strexbeq %0, %4, [%2]\n" | ||
| 150 | : "=&r" (res), "=&r" (oldval) | ||
| 151 | : "r" (ptr), "Ir" (old), "r" (new) | ||
| 152 | : "memory", "cc"); | ||
| 153 | } while (res); | ||
| 154 | break; | ||
| 155 | case 2: | ||
| 156 | do { | ||
| 157 | asm volatile("@ __cmpxchg1\n" | ||
| 158 | " ldrexh %1, [%2]\n" | ||
| 159 | " mov %0, #0\n" | ||
| 160 | " teq %1, %3\n" | ||
| 161 | " strexheq %0, %4, [%2]\n" | ||
| 162 | : "=&r" (res), "=&r" (oldval) | ||
| 163 | : "r" (ptr), "Ir" (old), "r" (new) | ||
| 164 | : "memory", "cc"); | ||
| 165 | } while (res); | ||
| 166 | break; | ||
| 167 | #endif | ||
| 168 | case 4: | ||
| 169 | do { | ||
| 170 | asm volatile("@ __cmpxchg4\n" | ||
| 171 | " ldrex %1, [%2]\n" | ||
| 172 | " mov %0, #0\n" | ||
| 173 | " teq %1, %3\n" | ||
| 174 | " strexeq %0, %4, [%2]\n" | ||
| 175 | : "=&r" (res), "=&r" (oldval) | ||
| 176 | : "r" (ptr), "Ir" (old), "r" (new) | ||
| 177 | : "memory", "cc"); | ||
| 178 | } while (res); | ||
| 179 | break; | ||
| 180 | default: | ||
| 181 | __bad_cmpxchg(ptr, size); | ||
| 182 | oldval = 0; | ||
| 183 | } | ||
| 184 | |||
| 185 | return oldval; | ||
| 186 | } | ||
| 187 | |||
| 188 | static inline unsigned long __cmpxchg_mb(volatile void *ptr, unsigned long old, | ||
| 189 | unsigned long new, int size) | ||
| 190 | { | ||
| 191 | unsigned long ret; | ||
| 192 | |||
| 193 | smp_mb(); | ||
| 194 | ret = __cmpxchg(ptr, old, new, size); | ||
| 195 | smp_mb(); | ||
| 196 | |||
| 197 | return ret; | ||
| 198 | } | ||
| 199 | |||
| 200 | #define cmpxchg(ptr,o,n) \ | ||
| 201 | ((__typeof__(*(ptr)))__cmpxchg_mb((ptr), \ | ||
| 202 | (unsigned long)(o), \ | ||
| 203 | (unsigned long)(n), \ | ||
| 204 | sizeof(*(ptr)))) | ||
| 205 | |||
| 206 | static inline unsigned long __cmpxchg_local(volatile void *ptr, | ||
| 207 | unsigned long old, | ||
| 208 | unsigned long new, int size) | ||
| 209 | { | ||
| 210 | unsigned long ret; | ||
| 211 | |||
| 212 | switch (size) { | ||
| 213 | #ifdef CONFIG_CPU_V6 /* min ARCH == ARMv6 */ | ||
| 214 | case 1: | ||
| 215 | case 2: | ||
| 216 | ret = __cmpxchg_local_generic(ptr, old, new, size); | ||
| 217 | break; | ||
| 218 | #endif | ||
| 219 | default: | ||
| 220 | ret = __cmpxchg(ptr, old, new, size); | ||
| 221 | } | ||
| 222 | |||
| 223 | return ret; | ||
| 224 | } | ||
| 225 | |||
| 226 | #define cmpxchg_local(ptr,o,n) \ | ||
| 227 | ((__typeof__(*(ptr)))__cmpxchg_local((ptr), \ | ||
| 228 | (unsigned long)(o), \ | ||
| 229 | (unsigned long)(n), \ | ||
| 230 | sizeof(*(ptr)))) | ||
| 231 | |||
| 232 | #ifndef CONFIG_CPU_V6 /* min ARCH >= ARMv6K */ | ||
| 233 | |||
| 234 | /* | ||
| 235 | * Note : ARMv7-M (currently unsupported by Linux) does not support | ||
| 236 | * ldrexd/strexd. If ARMv7-M is ever supported by the Linux kernel, it should | ||
| 237 | * not be allowed to use __cmpxchg64. | ||
| 238 | */ | ||
| 239 | static inline unsigned long long __cmpxchg64(volatile void *ptr, | ||
| 240 | unsigned long long old, | ||
| 241 | unsigned long long new) | ||
| 242 | { | ||
| 243 | register unsigned long long oldval asm("r0"); | ||
| 244 | register unsigned long long __old asm("r2") = old; | ||
| 245 | register unsigned long long __new asm("r4") = new; | ||
| 246 | unsigned long res; | ||
| 247 | |||
| 248 | do { | ||
| 249 | asm volatile( | ||
| 250 | " @ __cmpxchg8\n" | ||
| 251 | " ldrexd %1, %H1, [%2]\n" | ||
| 252 | " mov %0, #0\n" | ||
| 253 | " teq %1, %3\n" | ||
| 254 | " teqeq %H1, %H3\n" | ||
| 255 | " strexdeq %0, %4, %H4, [%2]\n" | ||
| 256 | : "=&r" (res), "=&r" (oldval) | ||
| 257 | : "r" (ptr), "Ir" (__old), "r" (__new) | ||
| 258 | : "memory", "cc"); | ||
| 259 | } while (res); | ||
| 260 | |||
| 261 | return oldval; | ||
| 262 | } | ||
| 263 | |||
| 264 | static inline unsigned long long __cmpxchg64_mb(volatile void *ptr, | ||
| 265 | unsigned long long old, | ||
| 266 | unsigned long long new) | ||
| 267 | { | ||
| 268 | unsigned long long ret; | ||
| 269 | |||
| 270 | smp_mb(); | ||
| 271 | ret = __cmpxchg64(ptr, old, new); | ||
| 272 | smp_mb(); | ||
| 273 | |||
| 274 | return ret; | ||
| 275 | } | ||
| 276 | |||
| 277 | #define cmpxchg64(ptr,o,n) \ | ||
| 278 | ((__typeof__(*(ptr)))__cmpxchg64_mb((ptr), \ | ||
| 279 | (unsigned long long)(o), \ | ||
| 280 | (unsigned long long)(n))) | ||
| 281 | |||
| 282 | #define cmpxchg64_local(ptr,o,n) \ | ||
| 283 | ((__typeof__(*(ptr)))__cmpxchg64((ptr), \ | ||
| 284 | (unsigned long long)(o), \ | ||
| 285 | (unsigned long long)(n))) | ||
| 286 | |||
| 287 | #else /* min ARCH = ARMv6 */ | ||
| 288 | |||
| 289 | #define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) | ||
| 290 | |||
| 291 | #endif | ||
| 292 | |||
| 293 | #endif /* __LINUX_ARM_ARCH__ >= 6 */ | ||
| 294 | |||
| 295 | #endif /* __ASM_ARM_CMPXCHG_H */ | ||
| @@ -0,0 +1,15 @@ | |||
| 1 | #ifndef __ASM_ARM_COMPILER_H | ||
| 2 | #define __ASM_ARM_COMPILER_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * This is used to ensure the compiler did actually allocate the register we | ||
| 6 | * asked it for some inline assembly sequences. Apparently we can't trust | ||
| 7 | * the compiler from one version to another so a bit of paranoia won't hurt. | ||
| 8 | * This string is meant to be concatenated with the inline asm string and | ||
| 9 | * will cause compilation to stop on mismatch. | ||
| 10 | * (for details, see gcc PR 15089) | ||
| 11 | */ | ||
| 12 | #define __asmeq(x, y) ".ifnc " x "," y " ; .err ; .endif\n\t" | ||
| 13 | |||
| 14 | |||
| 15 | #endif /* __ASM_ARM_COMPILER_H */ | ||
| @@ -0,0 +1,87 @@ | |||
| 1 | #ifndef __ASM_ARM_CP15_H | ||
| 2 | #define __ASM_ARM_CP15_H | ||
| 3 | |||
| 4 | #include <asm/barrier.h> | ||
| 5 | |||
| 6 | /* | ||
| 7 | * CR1 bits (CP#15 CR1) | ||
| 8 | */ | ||
| 9 | #define CR_M (1 << 0) /* MMU enable */ | ||
| 10 | #define CR_A (1 << 1) /* Alignment abort enable */ | ||
| 11 | #define CR_C (1 << 2) /* Dcache enable */ | ||
| 12 | #define CR_W (1 << 3) /* Write buffer enable */ | ||
| 13 | #define CR_P (1 << 4) /* 32-bit exception handler */ | ||
| 14 | #define CR_D (1 << 5) /* 32-bit data address range */ | ||
| 15 | #define CR_L (1 << 6) /* Implementation defined */ | ||
| 16 | #define CR_B (1 << 7) /* Big endian */ | ||
| 17 | #define CR_S (1 << 8) /* System MMU protection */ | ||
| 18 | #define CR_R (1 << 9) /* ROM MMU protection */ | ||
| 19 | #define CR_F (1 << 10) /* Implementation defined */ | ||
| 20 | #define CR_Z (1 << 11) /* Implementation defined */ | ||
| 21 | #define CR_I (1 << 12) /* Icache enable */ | ||
| 22 | #define CR_V (1 << 13) /* Vectors relocated to 0xffff0000 */ | ||
| 23 | #define CR_RR (1 << 14) /* Round Robin cache replacement */ | ||
| 24 | #define CR_L4 (1 << 15) /* LDR pc can set T bit */ | ||
| 25 | #define CR_DT (1 << 16) | ||
| 26 | #define CR_IT (1 << 18) | ||
| 27 | #define CR_ST (1 << 19) | ||
| 28 | #define CR_FI (1 << 21) /* Fast interrupt (lower latency mode) */ | ||
| 29 | #define CR_U (1 << 22) /* Unaligned access operation */ | ||
| 30 | #define CR_XP (1 << 23) /* Extended page tables */ | ||
| 31 | #define CR_VE (1 << 24) /* Vectored interrupts */ | ||
| 32 | #define CR_EE (1 << 25) /* Exception (Big) Endian */ | ||
| 33 | #define CR_TRE (1 << 28) /* TEX remap enable */ | ||
| 34 | #define CR_AFE (1 << 29) /* Access flag enable */ | ||
| 35 | #define CR_TE (1 << 30) /* Thumb exception enable */ | ||
| 36 | |||
| 37 | #ifndef __ASSEMBLY__ | ||
| 38 | |||
| 39 | #if __LINUX_ARM_ARCH__ >= 4 | ||
| 40 | #define vectors_high() (cr_alignment & CR_V) | ||
| 41 | #else | ||
| 42 | #define vectors_high() (0) | ||
| 43 | #endif | ||
| 44 | |||
| 45 | extern unsigned long cr_no_alignment; /* defined in entry-armv.S */ | ||
| 46 | extern unsigned long cr_alignment; /* defined in entry-armv.S */ | ||
| 47 | |||
| 48 | static inline unsigned int get_cr(void) | ||
| 49 | { | ||
| 50 | unsigned int val; | ||
| 51 | asm("mrc p15, 0, %0, c1, c0, 0 @ get CR" : "=r" (val) : : "cc"); | ||
| 52 | return val; | ||
| 53 | } | ||
| 54 | |||
| 55 | static inline void set_cr(unsigned int val) | ||
| 56 | { | ||
| 57 | asm volatile("mcr p15, 0, %0, c1, c0, 0 @ set CR" | ||
| 58 | : : "r" (val) : "cc"); | ||
| 59 | isb(); | ||
| 60 | } | ||
| 61 | |||
| 62 | #ifndef CONFIG_SMP | ||
| 63 | extern void adjust_cr(unsigned long mask, unsigned long set); | ||
| 64 | #endif | ||
| 65 | |||
| 66 | #define CPACC_FULL(n) (3 << (n * 2)) | ||
| 67 | #define CPACC_SVC(n) (1 << (n * 2)) | ||
| 68 | #define CPACC_DISABLE(n) (0 << (n * 2)) | ||
| 69 | |||
| 70 | static inline unsigned int get_copro_access(void) | ||
| 71 | { | ||
| 72 | unsigned int val; | ||
| 73 | asm("mrc p15, 0, %0, c1, c0, 2 @ get copro access" | ||
| 74 | : "=r" (val) : : "cc"); | ||
| 75 | return val; | ||
| 76 | } | ||
| 77 | |||
| 78 | static inline void set_copro_access(unsigned int val) | ||
| 79 | { | ||
| 80 | asm volatile("mcr p15, 0, %0, c1, c0, 2 @ set copro access" | ||
| 81 | : : "r" (val) : "cc"); | ||
| 82 | isb(); | ||
| 83 | } | ||
| 84 | |||
| 85 | #endif | ||
| 86 | |||
| 87 | #endif | ||
| @@ -0,0 +1,29 @@ | |||
| 1 | #ifndef __ASM_ARM_CPUIDLE_H | ||
| 2 | #define __ASM_ARM_CPUIDLE_H | ||
| 3 | |||
| 4 | #ifdef CONFIG_CPU_IDLE | ||
| 5 | extern int arm_cpuidle_simple_enter(struct cpuidle_device *dev, | ||
| 6 | struct cpuidle_driver *drv, int index); | ||
| 7 | #else | ||
| 8 | static inline int arm_cpuidle_simple_enter(struct cpuidle_device *dev, | ||
| 9 | struct cpuidle_driver *drv, int index) { return -ENODEV; } | ||
| 10 | #endif | ||
| 11 | |||
| 12 | /* Common ARM WFI state */ | ||
| 13 | #define ARM_CPUIDLE_WFI_STATE_PWR(p) {\ | ||
| 14 | .enter = arm_cpuidle_simple_enter,\ | ||
| 15 | .exit_latency = 1,\ | ||
| 16 | .target_residency = 1,\ | ||
| 17 | .power_usage = p,\ | ||
| 18 | .flags = CPUIDLE_FLAG_TIME_VALID,\ | ||
| 19 | .name = "WFI",\ | ||
| 20 | .desc = "ARM WFI",\ | ||
| 21 | } | ||
| 22 | |||
| 23 | /* | ||
| 24 | * in case power_specified == 1, give a default WFI power value needed | ||
| 25 | * by some governors | ||
| 26 | */ | ||
| 27 | #define ARM_CPUIDLE_WFI_STATE ARM_CPUIDLE_WFI_STATE_PWR(UINT_MAX) | ||
| 28 | |||
| 29 | #endif | ||
| @@ -1,8 +1,8 @@ | |||
| 1 | #ifndef __ASM_ARM_DIV64 | 1 | #ifndef __ASM_ARM_DIV64 |
| 2 | #define __ASM_ARM_DIV64 | 2 | #define __ASM_ARM_DIV64 |
| 3 | 3 | ||
| 4 | #include <asm/system.h> | ||
| 5 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | #include <asm/compiler.h> | ||
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * The semantics of do_div() are: | 8 | * The semantics of do_div() are: |
| @@ -19,7 +19,6 @@ · 18 unmodified lines | |||
| 19 | * It should not be re-used except for that purpose. | 19 | * It should not be re-used except for that purpose. |
| 20 | */ | 20 | */ |
| 21 | #include <linux/spinlock.h> | 21 | #include <linux/spinlock.h> |
| 22 | #include <asm/system.h> | ||
| 23 | #include <asm/scatterlist.h> | 22 | #include <asm/scatterlist.h> |
| 24 | 23 | ||
| 25 | #include <mach/isa-dma.h> | 24 | #include <mach/isa-dma.h> |
| @@ -10,6 +10,10 @@ · 9 unmodified lines | |||
| 10 | #ifndef __ASM_PROC_DOMAIN_H | 10 | #ifndef __ASM_PROC_DOMAIN_H |
| 11 | #define __ASM_PROC_DOMAIN_H | 11 | #define __ASM_PROC_DOMAIN_H |
| 12 | 12 | ||
| 13 | #ifndef __ASSEMBLY__ | ||
| 14 | #include <asm/barrier.h> | ||
| 15 | #endif | ||
| 16 | |||
| 13 | /* | 17 | /* |
| 14 | * Domain numbers | 18 | * Domain numbers |
| 15 | * | 19 | * |
| @@ -130,8 +130,4 @@ struct mm_struct; · 129 unmodified lines | |||
| 130 | extern unsigned long arch_randomize_brk(struct mm_struct *mm); | 130 | extern unsigned long arch_randomize_brk(struct mm_struct *mm); |
| 131 | #define arch_randomize_brk arch_randomize_brk | 131 | #define arch_randomize_brk arch_randomize_brk |
| 132 | 132 | ||
| 133 | extern int vectors_user_mapping(void); | ||
| 134 | #define arch_setup_additional_pages(bprm, uses_interp) vectors_user_mapping() | ||
| 135 | #define ARCH_HAS_SETUP_ADDITIONAL_PAGES | ||
| 136 | |||
| 137 | #endif | 133 | #endif |
| @@ -0,0 +1,6 @@ | |||
| 1 | #ifndef __ASM_ARM_EXEC_H | ||
| 2 | #define __ASM_ARM_EXEC_H | ||
| 3 | |||
| 4 | #define arch_align_stack(x) (x) | ||
| 5 | |||
| 6 | #endif /* __ASM_ARM_EXEC_H */ | ||
| @@ -9,7 +9,12 @@ · 8 unmodified lines | |||
| 9 | * | 9 | * |
| 10 | * Integrator AP has 16-bit timers, Integrator CP, Versatile and Realview | 10 | * Integrator AP has 16-bit timers, Integrator CP, Versatile and Realview |
| 11 | * can have 16-bit or 32-bit selectable via a bit in the control register. | 11 | * can have 16-bit or 32-bit selectable via a bit in the control register. |
| 12 | * | ||
| 13 | * Every SP804 contains two identical timers. | ||
| 12 | */ | 14 | */ |
| 15 | #define TIMER_1_BASE 0x00 | ||
| 16 | #define TIMER_2_BASE 0x20 | ||
| 17 | |||
| 13 | #define TIMER_LOAD 0x00 /* ACVR rw */ | 18 | #define TIMER_LOAD 0x00 /* ACVR rw */ |
| 14 | #define TIMER_VALUE 0x04 /* ACVR ro */ | 19 | #define TIMER_VALUE 0x04 /* ACVR ro */ |
| 15 | #define TIMER_CTRL 0x08 /* ACVR rw */ | 20 | #define TIMER_CTRL 0x08 /* ACVR rw */ |
| @@ -103,11 +103,11 @@ · 102 unmodified lines | |||
| 103 | #define L2X0_ADDR_FILTER_EN 1 | 103 | #define L2X0_ADDR_FILTER_EN 1 |
| 104 | 104 | ||
| 105 | #ifndef __ASSEMBLY__ | 105 | #ifndef __ASSEMBLY__ |
| 106 | extern void __init l2x0_init(void __iomem *base, __u32 aux_val, __u32 aux_mask); | 106 | extern void __init l2x0_init(void __iomem *base, u32 aux_val, u32 aux_mask); |
| 107 | #if defined(CONFIG_CACHE_L2X0) && defined(CONFIG_OF) | 107 | #if defined(CONFIG_CACHE_L2X0) && defined(CONFIG_OF) |
| 108 | extern int l2x0_of_init(__u32 aux_val, __u32 aux_mask); | 108 | extern int l2x0_of_init(u32 aux_val, u32 aux_mask); |
| 109 | #else | 109 | #else |
| 110 | static inline int l2x0_of_init(__u32 aux_val, __u32 aux_mask) | 110 | static inline int l2x0_of_init(u32 aux_val, u32 aux_mask) |
| 111 | { | 111 | { |
| 112 | return -ENODEV; | 112 | return -ENODEV; |
| 113 | } | 113 | } |
| @@ -11,14 +11,6 @@ · 10 unmodified lines | |||
| 11 | /* IOC / IOMD based hardware */ | 11 | /* IOC / IOMD based hardware */ |
| 12 | #include <asm/hardware/iomd.h> | 12 | #include <asm/hardware/iomd.h> |
| 13 | 13 | ||
| 14 | .macro disable_fiq | ||
| 15 | mov r12, #ioc_base_high | ||
| 16 | .if ioc_base_low | ||
| 17 | orr r12, r12, #ioc_base_low | ||
| 18 | .endif | ||
| 19 | strb r12, [r12, #0x38] @ Disable FIQ register | ||
| 20 | .endm | ||
| 21 | |||
| 22 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | 14 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp |
| 23 | ldrb \irqstat, [\base, #IOMD_IRQREQB] @ get high priority first | 15 | ldrb \irqstat, [\base, #IOMD_IRQREQB] @ get high priority first |
| 24 | ldr \tmp, =irq_prio_h | 16 | ldr \tmp, =irq_prio_h |
| @@ -231,6 +231,9 @@ extern int iop3xx_get_init_atu(void); · 230 unmodified lines | |||
| 231 | 231 | ||
| 232 | 232 | ||
| 233 | #ifndef __ASSEMBLY__ | 233 | #ifndef __ASSEMBLY__ |
| 234 | |||
| 235 | #include <linux/types.h> | ||
| 236 | |||
| 234 | void iop3xx_map_io(void); | 237 | void iop3xx_map_io(void); |
| 235 | void iop_init_cp6_handler(void); | 238 | void iop_init_cp6_handler(void); |
| 236 | void iop_init_time(unsigned long tickrate); | 239 | void iop_init_time(unsigned long tickrate); |
| @@ -49,7 +49,6 @@ struct iop_adma_device { · 48 unmodified lines | |||
| 49 | /** | 49 | /** |
| 50 | * struct iop_adma_chan - internal representation of an ADMA device | 50 | * struct iop_adma_chan - internal representation of an ADMA device |
| 51 | * @pending: allows batching of hardware operations | 51 | * @pending: allows batching of hardware operations |
| 52 | * @completed_cookie: identifier for the most recently completed operation | ||
| 53 | * @lock: serializes enqueue/dequeue operations to the slot pool | 52 | * @lock: serializes enqueue/dequeue operations to the slot pool |
| 54 | * @mmr_base: memory mapped register base | 53 | * @mmr_base: memory mapped register base |
| 55 | * @chain: device chain view of the descriptors | 54 | * @chain: device chain view of the descriptors |
| @@ -62,7 +61,6 @@ struct iop_adma_device { · 6 unmodified lines | |||
| 62 | */ | 61 | */ |
| 63 | struct iop_adma_chan { | 62 | struct iop_adma_chan { |
| 64 | int pending; | 63 | int pending; |
| 65 | dma_cookie_t completed_cookie; | ||
| 66 | spinlock_t lock; /* protects the descriptor slot pool */ | 64 | spinlock_t lock; /* protects the descriptor slot pool */ |
| 67 | void __iomem *mmr_base; | 65 | void __iomem *mmr_base; |
| 68 | struct list_head chain; | 66 | struct list_head chain; |
| @@ -9,6 +9,9 @@ · 8 unmodified lines | |||
| 9 | 9 | ||
| 10 | #ifndef __ASM_HARDWARE_IT8152_H | 10 | #ifndef __ASM_HARDWARE_IT8152_H |
| 11 | #define __ASM_HARDWARE_IT8152_H | 11 | #define __ASM_HARDWARE_IT8152_H |
| 12 | |||
| 13 | #include <mach/irqs.h> | ||
| 14 | |||
| 12 | extern void __iomem *it8152_base_address; | 15 | extern void __iomem *it8152_base_address; |
| 13 | 16 | ||
| 14 | #define IT8152_IO_BASE (it8152_base_address + 0x03e00000) | 17 | #define IT8152_IO_BASE (it8152_base_address + 0x03e00000) |
| @@ -1,217 +0,0 @@ | |||
| 1 | /* linux/include/asm/hardware/pl330.h | ||
| 2 | * | ||
| 3 | * Copyright (C) 2010 Samsung Electronics Co. Ltd. | ||
| 4 | * Jaswinder Singh <jassi.brar@samsung.com> | ||
| 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 as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef __PL330_CORE_H | ||
| 22 | #define __PL330_CORE_H | ||
| 23 | |||
| 24 | #define PL330_MAX_CHAN 8 | ||
| 25 | #define PL330_MAX_IRQS 32 | ||
| 26 | #define PL330_MAX_PERI 32 | ||
| 27 | |||
| 28 | enum pl330_srccachectrl { | ||
| 29 | SCCTRL0 = 0, /* Noncacheable and nonbufferable */ | ||
| 30 | SCCTRL1, /* Bufferable only */ | ||
| 31 | SCCTRL2, /* Cacheable, but do not allocate */ | ||
| 32 | SCCTRL3, /* Cacheable and bufferable, but do not allocate */ | ||
| 33 | SINVALID1, | ||
| 34 | SINVALID2, | ||
| 35 | SCCTRL6, /* Cacheable write-through, allocate on reads only */ | ||
| 36 | SCCTRL7, /* Cacheable write-back, allocate on reads only */ | ||
| 37 | }; | ||
| 38 | |||
| 39 | enum pl330_dstcachectrl { | ||
| 40 | DCCTRL0 = 0, /* Noncacheable and nonbufferable */ | ||
| 41 | DCCTRL1, /* Bufferable only */ | ||
| 42 | DCCTRL2, /* Cacheable, but do not allocate */ | ||
| 43 | DCCTRL3, /* Cacheable and bufferable, but do not allocate */ | ||
| 44 | DINVALID1, /* AWCACHE = 0x1000 */ | ||
| 45 | DINVALID2, | ||
| 46 | DCCTRL6, /* Cacheable write-through, allocate on writes only */ | ||
| 47 | DCCTRL7, /* Cacheable write-back, allocate on writes only */ | ||
| 48 | }; | ||
| 49 | |||
| 50 | /* Populated by the PL330 core driver for DMA API driver's info */ | ||
| 51 | struct pl330_config { | ||
| 52 | u32 periph_id; | ||
| 53 | u32 pcell_id; | ||
| 54 | #define DMAC_MODE_NS (1 << 0) | ||
| 55 | unsigned int mode; | ||
| 56 | unsigned int data_bus_width:10; /* In number of bits */ | ||
| 57 | unsigned int data_buf_dep:10; | ||
| 58 | unsigned int num_chan:4; | ||
| 59 | unsigned int num_peri:6; | ||
| 60 | u32 peri_ns; | ||
| 61 | unsigned int num_events:6; | ||
| 62 | u32 irq_ns; | ||
| 63 | }; | ||
| 64 | |||
| 65 | /* Handle to the DMAC provided to the PL330 core */ | ||
| 66 | struct pl330_info { | ||
| 67 | /* Owning device */ | ||
| 68 | struct device *dev; | ||
| 69 | /* Size of MicroCode buffers for each channel. */ | ||
| 70 | unsigned mcbufsz; | ||
| 71 | /* ioremap'ed address of PL330 registers. */ | ||
| 72 | void __iomem *base; | ||
| 73 | /* Client can freely use it. */ | ||
| 74 | void *client_data; | ||
| 75 | /* PL330 core data, Client must not touch it. */ | ||
| 76 | void *pl330_data; | ||
| 77 | /* Populated by the PL330 core driver during pl330_add */ | ||
| 78 | struct pl330_config pcfg; | ||
| 79 | /* | ||
| 80 | * If the DMAC has some reset mechanism, then the | ||
| 81 | * client may want to provide pointer to the method. | ||
| 82 | */ | ||
| 83 | void (*dmac_reset)(struct pl330_info *pi); | ||
| 84 | }; | ||
| 85 | |||
| 86 | enum pl330_byteswap { | ||
| 87 | SWAP_NO = 0, | ||
| 88 | SWAP_2, | ||
| 89 | SWAP_4, | ||
| 90 | SWAP_8, | ||
| 91 | SWAP_16, | ||
| 92 | }; | ||
| 93 | |||
| 94 | /** | ||
| 95 | * Request Configuration. | ||
| 96 | * The PL330 core does not modify this and uses the last | ||
| 97 | * working configuration if the request doesn't provide any. | ||
| 98 | * | ||
| 99 | * The Client may want to provide this info only for the | ||
| 100 | * first request and a request with new settings. | ||
| 101 | */ | ||
| 102 | struct pl330_reqcfg { | ||
| 103 | /* Address Incrementing */ | ||
| 104 | unsigned dst_inc:1; | ||
| 105 | unsigned src_inc:1; | ||
| 106 | |||
| 107 | /* | ||
| 108 | * For now, the SRC & DST protection levels | ||
| 109 | * and burst size/length are assumed same. | ||
| 110 | */ | ||
| 111 | bool nonsecure; | ||
| 112 | bool privileged; | ||
| 113 | bool insnaccess; | ||
| 114 | unsigned brst_len:5; | ||
| 115 | unsigned brst_size:3; /* in power of 2 */ | ||
| 116 | |||
| 117 | enum pl330_dstcachectrl dcctl; | ||
| 118 | enum pl330_srccachectrl scctl; | ||
| 119 | enum pl330_byteswap swap; | ||
| 120 | }; | ||
| 121 | |||
| 122 | /* | ||
| 123 | * One cycle of DMAC operation. | ||
| 124 | * There may be more than one xfer in a request. | ||
| 125 | */ | ||
| 126 | struct pl330_xfer { | ||
| 127 | u32 src_addr; | ||
| 128 | u32 dst_addr; | ||
| 129 | /* Size to xfer */ | ||
| 130 | u32 bytes; | ||
| 131 | /* | ||
| 132 | * Pointer to next xfer in the list. | ||
| 133 | * The last xfer in the req must point to NULL. | ||
| 134 | */ | ||
| 135 | struct pl330_xfer *next; | ||
| 136 | }; | ||
| 137 | |||
| 138 | /* The xfer callbacks are made with one of these arguments. */ | ||
| 139 | enum pl330_op_err { | ||
| 140 | /* The all xfers in the request were success. */ | ||
| 141 | PL330_ERR_NONE, | ||
| 142 | /* If req aborted due to global error. */ | ||
| 143 | PL330_ERR_ABORT, | ||
| 144 | /* If req failed due to problem with Channel. */ | ||
| 145 | PL330_ERR_FAIL, | ||
| 146 | }; | ||
| 147 | |||
| 148 | enum pl330_reqtype { | ||
| 149 | MEMTOMEM, | ||
| 150 | MEMTODEV, | ||
| 151 | DEVTOMEM, | ||
| 152 | DEVTODEV, | ||
| 153 | }; | ||
| 154 | |||
| 155 | /* A request defining Scatter-Gather List ending with NULL xfer. */ | ||
| 156 | struct pl330_req { | ||
| 157 | enum pl330_reqtype rqtype; | ||
| 158 | /* Index of peripheral for the xfer. */ | ||
| 159 | unsigned peri:5; | ||
| 160 | /* Unique token for this xfer, set by the client. */ | ||
| 161 | void *token; | ||
| 162 | /* Callback to be called after xfer. */ | ||
| 163 | void (*xfer_cb)(void *token, enum pl330_op_err err); | ||
| 164 | /* If NULL, req will be done at last set parameters. */ | ||
| 165 | struct pl330_reqcfg *cfg; | ||
| 166 | /* Pointer to first xfer in the request. */ | ||
| 167 | struct pl330_xfer *x; | ||
| 168 | }; | ||
| 169 | |||
| 170 | /* | ||
| 171 | * To know the status of the channel and DMAC, the client | ||
| 172 | * provides a pointer to this structure. The PL330 core | ||
| 173 | * fills it with current information. | ||
| 174 | */ | ||
| 175 | struct pl330_chanstatus { | ||
| 176 | /* | ||
| 177 | * If the DMAC engine halted due to some error, | ||
| 178 | * the client should remove-add DMAC. | ||
| 179 | */ | ||
| 180 | bool dmac_halted; | ||
| 181 | /* | ||
| 182 | * If channel is halted due to some error, | ||
| 183 | * the client should ABORT/FLUSH and START the channel. | ||
| 184 | */ | ||
| 185 | bool faulting; | ||
| 186 | /* Location of last load */ | ||
| 187 | u32 src_addr; | ||
| 188 | /* Location of last store */ | ||
| 189 | u32 dst_addr; | ||
| 190 | /* | ||
| 191 | * Pointer to the currently active req, NULL if channel is | ||
| 192 | * inactive, even though the requests may be present. | ||
| 193 | */ | ||
| 194 | struct pl330_req *top_req; | ||
| 195 | /* Pointer to req waiting second in the queue if any. */ | ||
| 196 | struct pl330_req *wait_req; | ||
| 197 | }; | ||
| 198 | |||
| 199 | enum pl330_chan_op { | ||
| 200 | /* Start the channel */ | ||
| 201 | PL330_OP_START, | ||
| 202 | /* Abort the active xfer */ | ||
| 203 | PL330_OP_ABORT, | ||
| 204 | /* Stop xfer and flush queue */ | ||
| 205 | PL330_OP_FLUSH, | ||
| 206 | }; | ||
| 207 | |||
| 208 | extern int pl330_add(struct pl330_info *); | ||
| 209 | extern void pl330_del(struct pl330_info *pi); | ||
| 210 | extern int pl330_update(const struct pl330_info *pi); | ||
| 211 | extern void pl330_release_channel(void *ch_id); | ||
| 212 | extern void *pl330_request_channel(const struct pl330_info *pi); | ||
| 213 | extern int pl330_chan_status(void *ch_id, struct pl330_chanstatus *pstatus); | ||
| 214 | extern int pl330_chan_ctrl(void *ch_id, enum pl330_chan_op op); | ||
| 215 | extern int pl330_submit_req(void *ch_id, struct pl330_req *r); | ||
| 216 | |||
| 217 | #endif /* __PL330_CORE_H */ | ||
| @@ -132,33 +132,9 @@ · 131 unmodified lines | |||
| 132 | #define SKPCR_DCLKEN (1<<7) | 132 | #define SKPCR_DCLKEN (1<<7) |
| 133 | #define SKPCR_PWMCLKEN (1<<8) | 133 | #define SKPCR_PWMCLKEN (1<<8) |
| 134 | 134 | ||
| 135 | /* | 135 | /* USB Host controller */ |
| 136 | * USB Host controller | ||
| 137 | */ | ||
| 138 | #define SA1111_USB 0x0400 | 136 | #define SA1111_USB 0x0400 |
| 139 | 137 | ||
| 140 | /* | ||
| 141 | * Offsets from SA1111_USB_BASE | ||
| 142 | */ | ||
| 143 | #define SA1111_USB_STATUS 0x0118 | ||
| 144 | #define SA1111_USB_RESET 0x011c | ||
| 145 | #define SA1111_USB_IRQTEST 0x0120 | ||
| 146 | |||
| 147 | #define USB_RESET_FORCEIFRESET (1 << 0) | ||
| 148 | #define USB_RESET_FORCEHCRESET (1 << 1) | ||
| 149 | #define USB_RESET_CLKGENRESET (1 << 2) | ||
| 150 | #define USB_RESET_SIMSCALEDOWN (1 << 3) | ||
| 151 | #define USB_RESET_USBINTTEST (1 << 4) | ||
| 152 | #define USB_RESET_SLEEPSTBYEN (1 << 5) | ||
| 153 | #define USB_RESET_PWRSENSELOW (1 << 6) | ||
| 154 | #define USB_RESET_PWRCTRLLOW (1 << 7) | ||
| 155 | |||
| 156 | #define USB_STATUS_IRQHCIRMTWKUP (1 << 7) | ||
| 157 | #define USB_STATUS_IRQHCIBUFFACC (1 << 8) | ||
| 158 | #define USB_STATUS_NIRQHCIM (1 << 9) | ||
| 159 | #define USB_STATUS_NHCIMFCLR (1 << 10) | ||
| 160 | #define USB_STATUS_USBPWRSENSE (1 << 11) | ||
| 161 | |||
| 162 | /* | 138 | /* |
| 163 | * Serial Audio Controller | 139 | * Serial Audio Controller |
| 164 | * | 140 | * |
| @@ -327,22 +303,6 @@ · 162 unmodified lines | |||
| 327 | * PC_SSR GPIO Block C Sleep State | 303 | * PC_SSR GPIO Block C Sleep State |
| 328 | */ | 304 | */ |
| 329 | 305 | ||
| 330 | #define _PA_DDR _SA1111( 0x1000 ) | ||
| 331 | #define _PA_DRR _SA1111( 0x1004 ) | ||
| 332 | #define _PA_DWR _SA1111( 0x1004 ) | ||
| 333 | #define _PA_SDR _SA1111( 0x1008 ) | ||
| 334 | #define _PA_SSR _SA1111( 0x100c ) | ||
| 335 | #define _PB_DDR _SA1111( 0x1010 ) | ||
| 336 | #define _PB_DRR _SA1111( 0x1014 ) | ||
| 337 | #define _PB_DWR _SA1111( 0x1014 ) | ||
| 338 | #define _PB_SDR _SA1111( 0x1018 ) | ||
| 339 | #define _PB_SSR _SA1111( 0x101c ) | ||
| 340 | #define _PC_DDR _SA1111( 0x1020 ) | ||
| 341 | #define _PC_DRR _SA1111( 0x1024 ) | ||
| 342 | #define _PC_DWR _SA1111( 0x1024 ) | ||
| 343 | #define _PC_SDR _SA1111( 0x1028 ) | ||
| 344 | #define _PC_SSR _SA1111( 0x102c ) | ||
| 345 | |||
| 346 | #define SA1111_GPIO 0x1000 | 306 | #define SA1111_GPIO 0x1000 |
| 347 | 307 | ||
| 348 | #define SA1111_GPIO_PADDR (0x000) | 308 | #define SA1111_GPIO_PADDR (0x000) |
| @@ -425,106 +385,30 @@ · 76 unmodified lines | |||
| 425 | #define SA1111_WAKEPOL0 0x0034 | 385 | #define SA1111_WAKEPOL0 0x0034 |
| 426 | #define SA1111_WAKEPOL1 0x0038 | 386 | #define SA1111_WAKEPOL1 0x0038 |
| 427 | 387 | ||
| 428 | /* | 388 | /* PS/2 Trackpad and Mouse Interfaces */ |
| 429 | * PS/2 Trackpad and Mouse Interfaces | ||
| 430 | * | ||
| 431 | * Registers | ||
| 432 | * PS2CR Control Register | ||
| 433 | * PS2STAT Status Register | ||
| 434 | * PS2DATA Transmit/Receive Data register | ||
| 435 | * PS2CLKDIV Clock Division Register | ||
| 436 | * PS2PRECNT Clock Precount Register | ||
| 437 | * PS2TEST1 Test register 1 | ||
| 438 | * PS2TEST2 Test register 2 | ||
| 439 | * PS2TEST3 Test register 3 | ||
| 440 | * PS2TEST4 Test register 4 | ||
| 441 | */ | ||
| 442 | |||
| 443 | #define SA1111_KBD 0x0a00 | 389 | #define SA1111_KBD 0x0a00 |
| 444 | #define SA1111_MSE 0x0c00 | 390 | #define SA1111_MSE 0x0c00 |
| 445 | 391 | ||
| 446 | /* | 392 | /* PCMCIA Interface */ |
| 447 | * These are offsets from the above bases. | 393 | #define SA1111_PCMCIA 0x1600 |
| 448 | */ | ||
| 449 | #define SA1111_PS2CR 0x0000 | ||
| 450 | #define SA1111_PS2STAT 0x0004 | ||
| 451 | #define SA1111_PS2DATA 0x0008 | ||
| 452 | #define SA1111_PS2CLKDIV 0x000c | ||
| 453 | #define SA1111_PS2PRECNT 0x0010 | ||
| 454 | |||
| 455 | #define PS2CR_ENA 0x08 | ||
| 456 | #define PS2CR_FKD 0x02 | ||
| 457 | #define PS2CR_FKC 0x01 | ||
| 458 | |||
| 459 | #define PS2STAT_STP 0x0100 | ||
| 460 | #define PS2STAT_TXE 0x0080 | ||
| 461 | #define PS2STAT_TXB 0x0040 | ||
| 462 | #define PS2STAT_RXF 0x0020 | ||
| 463 | #define PS2STAT_RXB 0x0010 | ||
| 464 | #define PS2STAT_ENA 0x0008 | ||
| 465 | #define PS2STAT_RXP 0x0004 | ||
| 466 | #define PS2STAT_KBD 0x0002 | ||
| 467 | #define PS2STAT_KBC 0x0001 | ||
| 468 | 394 | ||
| 469 | /* | ||
| 470 | * PCMCIA Interface | ||
| 471 | * | ||
| 472 | * Registers | ||
| 473 | * PCSR Status Register | ||
| 474 | * PCCR Control Register | ||
| 475 | * PCSSR Sleep State Register | ||
| 476 | */ | ||
| 477 | |||
| 478 | #define SA1111_PCMCIA 0x1600 | ||
| 479 | |||
| 480 | /* | ||
| 481 | * These are offsets from the above base. | ||
| 482 | */ | ||
| 483 | #define SA1111_PCCR 0x0000 | ||
| 484 | #define SA1111_PCSSR 0x0004 | ||
| 485 | #define SA1111_PCSR 0x0008 | ||
| 486 | |||
| 487 | #define PCSR_S0_READY (1<<0) | ||
| 488 | #define PCSR_S1_READY (1<<1) | ||
| 489 | #define PCSR_S0_DETECT (1<<2) | ||
| 490 | #define PCSR_S1_DETECT (1<<3) | ||
| 491 | #define PCSR_S0_VS1 (1<<4) | ||
| 492 | #define PCSR_S0_VS2 (1<<5) | ||
| 493 | #define PCSR_S1_VS1 (1<<6) | ||
| 494 | #define PCSR_S1_VS2 (1<<7) | ||
| 495 | #define PCSR_S0_WP (1<<8) | ||
| 496 | #define PCSR_S1_WP (1<<9) | ||
| 497 | #define PCSR_S0_BVD1 (1<<10) | ||
| 498 | #define PCSR_S0_BVD2 (1<<11) | ||
| 499 | #define PCSR_S1_BVD1 (1<<12) | ||
| 500 | #define PCSR_S1_BVD2 (1<<13) | ||
| 501 | |||
| 502 | #define PCCR_S0_RST (1<<0) | ||
| 503 | #define PCCR_S1_RST (1<<1) | ||
| 504 | #define PCCR_S0_FLT (1<<2) | ||
| 505 | #define PCCR_S1_FLT (1<<3) | ||
| 506 | #define PCCR_S0_PWAITEN (1<<4) | ||
| 507 | #define PCCR_S1_PWAITEN (1<<5) | ||
| 508 | #define PCCR_S0_PSE (1<<6) | ||
| 509 | #define PCCR_S1_PSE (1<<7) | ||
| 510 | |||
| 511 | #define PCSSR_S0_SLEEP (1<<0) | ||
| 512 | #define PCSSR_S1_SLEEP (1<<1) | ||
| 513 | 395 | ||
| 514 | 396 | ||
| 515 | 397 | ||
| 516 | 398 | ||
| 517 | extern struct bus_type sa1111_bus_type; | 399 | extern struct bus_type sa1111_bus_type; |
| 518 | 400 | ||
| 519 | #define SA1111_DEVID_SBI 0 | 401 | #define SA1111_DEVID_SBI (1 << 0) |
| 520 | #define SA1111_DEVID_SK 1 | 402 | #define SA1111_DEVID_SK (1 << 1) |
| 521 | #define SA1111_DEVID_USB 2 | 403 | #define SA1111_DEVID_USB (1 << 2) |
| 522 | #define SA1111_DEVID_SAC 3 | 404 | #define SA1111_DEVID_SAC (1 << 3) |
| 523 | #define SA1111_DEVID_SSP 4 | 405 | #define SA1111_DEVID_SSP (1 << 4) |
| 524 | #define SA1111_DEVID_PS2 5 | 406 | #define SA1111_DEVID_PS2 (3 << 5) |
| 525 | #define SA1111_DEVID_GPIO 6 | 407 | #define SA1111_DEVID_PS2_KBD (1 << 5) |
| 526 | #define SA1111_DEVID_INT 7 | 408 | #define SA1111_DEVID_PS2_MSE (1 << 6) |
| 527 | #define SA1111_DEVID_PCMCIA 8 | 409 | #define SA1111_DEVID_GPIO (1 << 7) |
| 410 | #define SA1111_DEVID_INT (1 << 8) | ||
| 411 | #define SA1111_DEVID_PCMCIA (1 << 9) | ||
| 528 | 412 | ||
| 529 | struct sa1111_dev { | 413 | struct sa1111_dev { |
| 530 | struct device dev; | 414 | struct device dev; |
| @@ -548,6 +432,7 @@ struct sa1111_driver { · 17 unmodified lines | |||
| 548 | int (*remove)(struct sa1111_dev *); | 432 | int (*remove)(struct sa1111_dev *); |
| 549 | int (*suspend)(struct sa1111_dev *, pm_message_t); | 433 | int (*suspend)(struct sa1111_dev *, pm_message_t); |
| 550 | int (*resume)(struct sa1111_dev *); | 434 | int (*resume)(struct sa1111_dev *); |
| 435 | void (*shutdown)(struct sa1111_dev *); | ||
| 551 | }; | 436 | }; |
| 552 | 437 | ||
| 553 | #define SA1111_DRV(_d) container_of((_d), struct sa1111_driver, drv) | 438 | #define SA1111_DRV(_d) container_of((_d), struct sa1111_driver, drv) |
| @@ -555,9 +440,10 @@ struct sa1111_driver { · 1 unmodified line | |||
| 555 | #define SA1111_DRIVER_NAME(_sadev) ((_sadev)->dev.driver->name) | 440 | #define SA1111_DRIVER_NAME(_sadev) ((_sadev)->dev.driver->name) |
| 556 | 441 | ||
| 557 | /* | 442 | /* |
| 558 | * These frob the SKPCR register. | 443 | * These frob the SKPCR register, and call platform specific |
| 444 | * enable/disable functions. | ||
| 559 | */ | 445 | */ |
| 560 | void sa1111_enable_device(struct sa1111_dev *); | 446 | int sa1111_enable_device(struct sa1111_dev *); |
| 561 | void sa1111_disable_device(struct sa1111_dev *); | 447 | void sa1111_disable_device(struct sa1111_dev *); |
| 562 | 448 | ||
| 563 | unsigned int sa1111_pll_clock(struct sa1111_dev *); | 449 | unsigned int sa1111_pll_clock(struct sa1111_dev *); |
| @@ -580,6 +466,10 @@ void sa1111_set_sleep_io(struct sa1111_dev *sadev, unsigned int bits, unsigned i · 16 unmodified lines | |||
| 580 | 466 | ||
| 581 | struct sa1111_platform_data { | 467 | struct sa1111_platform_data { |
| 582 | int irq_base; /* base for cascaded on-chip IRQs */ | 468 | int irq_base; /* base for cascaded on-chip IRQs */ |
| 469 | unsigned disable_devs; | ||
| 470 | void *data; | ||
| 471 | int (*enable)(void *, unsigned); | ||
| 472 | void (*disable)(void *, unsigned); | ||
| 583 | }; | 473 | }; |
| 584 | 474 | ||
| 585 | #endif /* _ASM_ARCH_SA1111 */ | 475 | #endif /* _ASM_ARCH_SA1111 */ |
| @@ -1,2 +1,15 @@ | |||
| 1 | void sp804_clocksource_init(void __iomem *, const char *); | 1 | void __sp804_clocksource_and_sched_clock_init(void __iomem *, |
| 2 | const char *, int); | ||
| 3 | |||
| 4 | static inline void sp804_clocksource_init(void __iomem *base, const char *name) | ||
| 5 | { | ||
| 6 | __sp804_clocksource_and_sched_clock_init(base, name, 0); | ||
| 7 | } | ||
| 8 | |||
| 9 | static inline void sp804_clocksource_and_sched_clock_init(void __iomem *base, | ||
| 10 | const char *name) | ||
| 11 | { | ||
| 12 | __sp804_clocksource_and_sched_clock_init(base, name, 1); | ||
| 13 | } | ||
| 14 | |||
| 2 | void sp804_clockevents_init(void __iomem *, unsigned int, const char *); | 15 | void sp804_clockevents_init(void __iomem *, unsigned int, const char *); |
| @@ -26,7 +26,6 @@ · 25 unmodified lines | |||
| 26 | #include <linux/types.h> | 26 | #include <linux/types.h> |
| 27 | #include <asm/byteorder.h> | 27 | #include <asm/byteorder.h> |
| 28 | #include <asm/memory.h> | 28 | #include <asm/memory.h> |
| 29 | #include <asm/system.h> | ||
| 30 | #include <asm-generic/pci_iomap.h> | 29 | #include <asm-generic/pci_iomap.h> |
| 31 | 30 | ||
| 32 | /* | 31 | /* |
| @@ -83,6 +82,11 @@ extern void __iomem *__arm_ioremap_pfn(unsigned long, unsigned long, size_t, uns · 50 unmodified lines | |||
| 83 | extern void __iomem *__arm_ioremap(unsigned long, size_t, unsigned int); | 82 | extern void __iomem *__arm_ioremap(unsigned long, size_t, unsigned int); |
| 84 | extern void __iomem *__arm_ioremap_exec(unsigned long, size_t, bool cached); | 83 | extern void __iomem *__arm_ioremap_exec(unsigned long, size_t, bool cached); |
| 85 | extern void __iounmap(volatile void __iomem *addr); | 84 | extern void __iounmap(volatile void __iomem *addr); |
| 85 | extern void __arm_iounmap(volatile void __iomem *addr); | ||
| 86 | |||
| 87 | extern void __iomem * (*arch_ioremap_caller)(unsigned long, size_t, | ||
| 88 | unsigned int, void *); | ||
| 89 | extern void (*arch_iounmap)(volatile void __iomem *); | ||
| 86 | 90 | ||
| 87 | /* | 91 | /* |
| 88 | * Bad read/write accesses... | 92 | * Bad read/write accesses... |
| @@ -97,8 +101,11 @@ static inline void __iomem *__typesafe_io(unsigned long addr) · 8 unmodified lines | |||
| 97 | return (void __iomem *)addr; | 101 | return (void __iomem *)addr; |
| 98 | } | 102 | } |
| 99 | 103 | ||
| 104 | #define IOMEM(x) ((void __force __iomem *)(x)) | ||
| 105 | |||
| 100 | /* IO barriers */ | 106 | /* IO barriers */ |
| 101 | #ifdef CONFIG_ARM_DMA_MEM_BUFFERABLE | 107 | #ifdef CONFIG_ARM_DMA_MEM_BUFFERABLE |
| 108 | #include <asm/barrier.h> | ||
| 102 | #define __iormb() rmb() | 109 | #define __iormb() rmb() |
| 103 | #define __iowmb() wmb() | 110 | #define __iowmb() wmb() |
| 104 | #else | 111 | #else |
| @@ -109,7 +116,11 @@ static inline void __iomem *__typesafe_io(unsigned long addr) · 4 unmodified lines | |||
| 109 | /* | 116 | /* |
| 110 | * Now, pick up the machine-defined IO definitions | 117 | * Now, pick up the machine-defined IO definitions |
| 111 | */ | 118 | */ |
| 119 | #ifdef CONFIG_NEED_MACH_IO_H | ||
| 112 | #include <mach/io.h> | 120 | #include <mach/io.h> |
| 121 | #else | ||
| 122 | #define __io(a) __typesafe_io((a) & IO_SPACE_LIMIT) | ||
| 123 | #endif | ||
| 113 | 124 | ||
| 114 | /* | 125 | /* |
| 115 | * This is the limit of PC card/PCI/ISA IO space, which is by default | 126 | * This is the limit of PC card/PCI/ISA IO space, which is by default |
| @@ -211,18 +222,18 @@ extern void _memset_io(volatile void __iomem *, int, size_t); · 95 unmodified lines | |||
| 211 | * Again, this are defined to perform little endian accesses. See the | 222 | * Again, this are defined to perform little endian accesses. See the |
| 212 | * IO port primitives for more information. | 223 | * IO port primitives for more information. |
| 213 | */ | 224 | */ |
| 214 | #ifdef __mem_pci | 225 | #ifndef readl |
| 215 | #define readb_relaxed(c) ({ u8 __r = __raw_readb(__mem_pci(c)); __r; }) | 226 | #define readb_relaxed(c) ({ u8 __r = __raw_readb(c); __r; }) |
| 216 | #define readw_relaxed(c) ({ u16 __r = le16_to_cpu((__force __le16) \ | 227 | #define readw_relaxed(c) ({ u16 __r = le16_to_cpu((__force __le16) \ |
| 217 | __raw_readw(__mem_pci(c))); __r; }) | 228 | __raw_readw(c)); __r; }) |
| 218 | #define readl_relaxed(c) ({ u32 __r = le32_to_cpu((__force __le32) \ | 229 | #define readl_relaxed(c) ({ u32 __r = le32_to_cpu((__force __le32) \ |
| 219 | __raw_readl(__mem_pci(c))); __r; }) | 230 | __raw_readl(c)); __r; }) |
| 220 | 231 | ||
| 221 | #define writeb_relaxed(v,c) ((void)__raw_writeb(v,__mem_pci(c))) | 232 | #define writeb_relaxed(v,c) ((void)__raw_writeb(v,c)) |
| 222 | #define writew_relaxed(v,c) ((void)__raw_writew((__force u16) \ | 233 | #define writew_relaxed(v,c) ((void)__raw_writew((__force u16) \ |
| 223 | cpu_to_le16(v),__mem_pci(c))) | 234 | cpu_to_le16(v),c)) |
| 224 | #define writel_relaxed(v,c) ((void)__raw_writel((__force u32) \ | 235 | #define writel_relaxed(v,c) ((void)__raw_writel((__force u32) \ |
| 225 | cpu_to_le32(v),__mem_pci(c))) | 236 | cpu_to_le32(v),c)) |
| 226 | 237 | ||
| 227 | #define readb(c) ({ u8 __v = readb_relaxed(c); __iormb(); __v; }) | 238 | #define readb(c) ({ u8 __v = readb_relaxed(c); __iormb(); __v; }) |
| 228 | #define readw(c) ({ u16 __v = readw_relaxed(c); __iormb(); __v; }) | 239 | #define readw(c) ({ u16 __v = readw_relaxed(c); __iormb(); __v; }) |
| @@ -232,30 +243,19 @@ extern void _memset_io(volatile void __iomem *, int, size_t); · 3 unmodified lines | |||
| 232 | #define writew(v,c) ({ __iowmb(); writew_relaxed(v,c); }) | 243 | #define writew(v,c) ({ __iowmb(); writew_relaxed(v,c); }) |
| 233 | #define writel(v,c) ({ __iowmb(); writel_relaxed(v,c); }) | 244 | #define writel(v,c) ({ __iowmb(); writel_relaxed(v,c); }) |
| 234 | 245 | ||
| 235 | #define readsb(p,d,l) __raw_readsb(__mem_pci(p),d,l) | 246 | #define readsb(p,d,l) __raw_readsb(p,d,l) |
| 236 | #define readsw(p,d,l) __raw_readsw(__mem_pci(p),d,l) | 247 | #define readsw(p,d,l) __raw_readsw(p,d,l) |
| 237 | #define readsl(p,d,l) __raw_readsl(__mem_pci(p),d,l) | 248 | #define readsl(p,d,l) __raw_readsl(p,d,l) |
| 238 | |||
| 239 | #define writesb(p,d,l) __raw_writesb(__mem_pci(p),d,l) | ||
| 240 | #define writesw(p,d,l) __raw_writesw(__mem_pci(p),d,l) | ||
| 241 | #define writesl(p,d,l) __raw_writesl(__mem_pci(p),d,l) | ||
| 242 | 249 | ||
| 243 | #define memset_io(c,v,l) _memset_io(__mem_pci(c),(v),(l)) | 250 | #define writesb(p,d,l) __raw_writesb(p,d,l) |
| 244 | #define memcpy_fromio(a,c,l) _memcpy_fromio((a),__mem_pci(c),(l)) | 251 | #define writesw(p,d,l) __raw_writesw(p,d,l) |
| 245 | #define memcpy_toio(c,a,l) _memcpy_toio(__mem_pci(c),(a),(l)) | 252 | #define writesl(p,d,l) __raw_writesl(p,d,l) |
| 246 | 253 | ||
| 247 | #elif !defined(readb) | 254 | #define memset_io(c,v,l) _memset_io(c,(v),(l)) |
| 255 | #define memcpy_fromio(a,c,l) _memcpy_fromio((a),c,(l)) | ||
| 256 | #define memcpy_toio(c,a,l) _memcpy_toio(c,(a),(l)) | ||
| 248 | 257 | ||
| 249 | #define readb(c) (__readwrite_bug("readb"),0) | 258 | #endif /* readl */ |
| 250 | #define readw(c) (__readwrite_bug("readw"),0) | ||
| 251 | #define readl(c) (__readwrite_bug("readl"),0) | ||
| 252 | #define writeb(v,c) __readwrite_bug("writeb") | ||
| 253 | #define writew(v,c) __readwrite_bug("writew") | ||
| 254 | #define writel(v,c) __readwrite_bug("writel") | ||
| 255 | |||
| 256 | #define check_signature(io,sig,len) (0) | ||
| 257 | |||
| 258 | #endif /* __mem_pci */ | ||
| 259 | 259 | ||
| 260 | /* | 260 | /* |
| 261 | * ioremap and friends. | 261 | * ioremap and friends. |
| @@ -264,16 +264,11 @@ extern void _memset_io(volatile void __iomem *, int, size_t); · 2 unmodified lines | |||
| 264 | * Documentation/io-mapping.txt. | 264 | * Documentation/io-mapping.txt. |
| 265 | * | 265 | * |
| 266 | */ | 266 | */ |
| 267 | #ifndef __arch_ioremap | 267 | #define ioremap(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE) |
| 268 | #define __arch_ioremap __arm_ioremap | 268 | #define ioremap_nocache(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE) |
| 269 | #define __arch_iounmap __iounmap | 269 | #define ioremap_cached(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE_CACHED) |
| 270 | #endif | 270 | #define ioremap_wc(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE_WC) |
| 271 | 271 | #define iounmap __arm_iounmap | |
| 272 | #define ioremap(cookie,size) __arch_ioremap((cookie), (size), MT_DEVICE) | ||
| 273 | #define ioremap_nocache(cookie,size) __arch_ioremap((cookie), (size), MT_DEVICE) | ||
| 274 | #define ioremap_cached(cookie,size) __arch_ioremap((cookie), (size), MT_DEVICE_CACHED) | ||
| 275 | #define ioremap_wc(cookie,size) __arch_ioremap((cookie), (size), MT_DEVICE_WC) | ||
| 276 | #define iounmap __arch_iounmap | ||
| 277 | 272 | ||
| 278 | /* | 273 | /* |
| 279 | * io{read,write}{8,16,32} macros | 274 | * io{read,write}{8,16,32} macros |
| @@ -1,14 +1,18 @@ | |||
| 1 | #ifndef __ASM_ARM_IRQ_H | 1 | #ifndef __ASM_ARM_IRQ_H |
| 2 | #define __ASM_ARM_IRQ_H | 2 | #define __ASM_ARM_IRQ_H |
| 3 | 3 | ||
| 4 | #define NR_IRQS_LEGACY 16 | ||
| 5 | |||
| 6 | #ifndef CONFIG_SPARSE_IRQ | ||
| 4 | #include <mach/irqs.h> | 7 | #include <mach/irqs.h> |
| 8 | #else | ||
| 9 | #define NR_IRQS NR_IRQS_LEGACY | ||
| 10 | #endif | ||
| 5 | 11 | ||
| 6 | #ifndef irq_canonicalize | 12 | #ifndef irq_canonicalize |
| 7 | #define irq_canonicalize(i) (i) | 13 | #define irq_canonicalize(i) (i) |
| 8 | #endif | 14 | #endif |
| 9 | 15 | ||
| 10 | #define NR_IRQS_LEGACY 16 | ||
| 11 | |||
| 12 | /* | 16 | /* |
| 13 | * Use this value to indicate lack of interrupt | 17 | * Use this value to indicate lack of interrupt |
| 14 | * capability | 18 | * capability |
| @@ -0,0 +1,41 @@ | |||
| 1 | #ifndef _ASM_ARM_JUMP_LABEL_H | ||
| 2 | #define _ASM_ARM_JUMP_LABEL_H | ||
| 3 | |||
| 4 | #ifdef __KERNEL__ | ||
| 5 | |||
| 6 | #include <linux/types.h> | ||
| 7 | #include <asm/system.h> | ||
| 8 | |||
| 9 | #define JUMP_LABEL_NOP_SIZE 4 | ||
| 10 | |||
| 11 | #ifdef CONFIG_THUMB2_KERNEL | ||
| 12 | #define JUMP_LABEL_NOP "nop.w" | ||
| 13 | #else | ||
| 14 | #define JUMP_LABEL_NOP "nop" | ||
| 15 | #endif | ||
| 16 | |||
| 17 | static __always_inline bool arch_static_branch(struct static_key *key) | ||
| 18 | { | ||
| 19 | asm goto("1:\n\t" | ||
| 20 | JUMP_LABEL_NOP "\n\t" | ||
| 21 | ".pushsection __jump_table, \"aw\"\n\t" | ||
| 22 | ".word 1b, %l[l_yes], %c0\n\t" | ||
| 23 | ".popsection\n\t" | ||
| 24 | : : "i" (key) : : l_yes); | ||
| 25 | |||
| 26 | return false; | ||
| 27 | l_yes: | ||
| 28 | return true; | ||
| 29 | } | ||
| 30 | |||
| 31 | #endif /* __KERNEL__ */ | ||
| 32 | |||
| 33 | typedef u32 jump_label_t; | ||
| 34 | |||
| 35 | struct jump_entry { | ||
| 36 | jump_label_t code; | ||
| 37 | jump_label_t target; | ||
| 38 | jump_label_t key; | ||
| 39 | }; | ||
| 40 | |||
| 41 | #endif | ||
| @@ -11,47 +11,24 @@ · 10 unmodified lines | |||
| 11 | #define __ASM_ARM_LOCALTIMER_H | 11 | #define __ASM_ARM_LOCALTIMER_H |
| 12 | 12 | ||
| 13 | #include <linux/errno.h> | 13 | #include <linux/errno.h> |
| 14 | #include <linux/interrupt.h> | ||
| 15 | 14 | ||
| 16 | struct clock_event_device; | 15 | struct clock_event_device; |
| 17 | 16 | ||
| 18 | /* | 17 | struct local_timer_ops { |
| 19 | * Setup a per-cpu timer, whether it be a local timer or dummy broadcast | 18 | int (*setup)(struct clock_event_device *); |
| 20 | */ | 19 | void (*stop)(struct clock_event_device *); |
| 21 | void percpu_timer_setup(void); | 20 | }; |
| 22 | 21 | ||
| 23 | #ifdef CONFIG_LOCAL_TIMERS | 22 | #ifdef CONFIG_LOCAL_TIMERS |
| 24 | |||
| 25 | #ifdef CONFIG_HAVE_ARM_TWD | ||
| 26 | |||
| 27 | #include "smp_twd.h" | ||
| 28 | |||
| 29 | #define local_timer_stop(c) twd_timer_stop((c)) | ||
| 30 | |||
| 31 | #else | ||
| 32 | |||
| 33 | /* | ||
| 34 | * Stop the local timer | ||
| 35 | */ | ||
| 36 | void local_timer_stop(struct clock_event_device *); | ||
| 37 | |||
| 38 | #endif | ||
| 39 | |||
| 40 | /* | 23 | /* |
| 41 | * Setup a local timer interrupt for a CPU. | 24 | * Register a local timer driver |
| 42 | */ | 25 | */ |
| 43 | int local_timer_setup(struct clock_event_device *); | 26 | int local_timer_register(struct local_timer_ops *); |
| 44 | |||
| 45 | #else | 27 | #else |
| 46 | 28 | static inline int local_timer_register(struct local_timer_ops *ops) | |
| 47 | static inline int local_timer_setup(struct clock_event_device *evt) | ||
| 48 | { | 29 | { |
| 49 | return -ENXIO; | 30 | return -ENXIO; |
| 50 | } | 31 | } |
| 51 | |||
| 52 | static inline void local_timer_stop(struct clock_event_device *evt) | ||
| 53 | { | ||
| 54 | } | ||
| 55 | #endif | 32 | #endif |
| 56 | 33 | ||
| 57 | #endif | 34 | #endif |
| @@ -5,7 +5,9 @@ · 4 unmodified lines | |||
| 5 | #define _ASM_MC146818RTC_H | 5 | #define _ASM_MC146818RTC_H |
| 6 | 6 | ||
| 7 | #include <linux/io.h> | 7 | #include <linux/io.h> |
| 8 | #include <mach/irqs.h> | 8 | #include <linux/kernel.h> |
| 9 | |||
| 10 | #define RTC_IRQ BUILD_BUG_ON(1) | ||
| 9 | 11 | ||
| 10 | #ifndef RTC_PORT | 12 | #ifndef RTC_PORT |
| 11 | #define RTC_PORT(x) (0x70 + (x)) | 13 | #define RTC_PORT(x) (0x70 + (x)) |
| @@ -116,6 +116,8 @@ · 115 unmodified lines | |||
| 116 | #define MODULES_END (END_MEM) | 116 | #define MODULES_END (END_MEM) |
| 117 | #define MODULES_VADDR (PHYS_OFFSET) | 117 | #define MODULES_VADDR (PHYS_OFFSET) |
| 118 | 118 | ||
| 119 | #define XIP_VIRT_ADDR(physaddr) (physaddr) | ||
| 120 | |||
| 119 | #endif /* !CONFIG_MMU */ | 121 | #endif /* !CONFIG_MMU */ |
| 120 | 122 | ||
| 121 | /* | 123 | /* |
| @@ -34,4 +34,11 @@ typedef struct { · 33 unmodified lines | |||
| 34 | 34 | ||
| 35 | #endif | 35 | #endif |
| 36 | 36 | ||
| 37 | /* | ||
| 38 | * switch_mm() may do a full cache flush over the context switch, | ||
| 39 | * so enable interrupts over the context switch to avoid high | ||
| 40 | * latency. | ||
| 41 | */ | ||
| 42 | #define __ARCH_WANT_INTERRUPTS_ON_CTXSW | ||
| 43 | |||
| 37 | #endif | 44 | #endif |
| @@ -18,6 +18,7 @@ · 17 unmodified lines | |||
| 18 | #include <asm/cacheflush.h> | 18 | #include <asm/cacheflush.h> |
| 19 | #include <asm/cachetype.h> | 19 | #include <asm/cachetype.h> |
| 20 | #include <asm/proc-fns.h> | 20 | #include <asm/proc-fns.h> |
| 21 | #include <asm-generic/mm_hooks.h> | ||
| 21 | 22 | ||
| 22 | void __check_kvm_seq(struct mm_struct *mm); | 23 | void __check_kvm_seq(struct mm_struct *mm); |
| 23 | 24 | ||
| @@ -133,32 +134,4 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next, · 109 unmodified lines | |||
| 133 | #define deactivate_mm(tsk,mm) do { } while (0) | 134 | #define deactivate_mm(tsk,mm) do { } while (0) |
| 134 | #define activate_mm(prev,next) switch_mm(prev, next, NULL) | 135 | #define activate_mm(prev,next) switch_mm(prev, next, NULL) |
| 135 | 136 | ||
| 136 | /* | ||
| 137 | * We are inserting a "fake" vma for the user-accessible vector page so | ||
| 138 | * gdb and friends can get to it through ptrace and /proc/<pid>/mem. | ||
| 139 | * But we also want to remove it before the generic code gets to see it | ||
| 140 | * during process exit or the unmapping of it would cause total havoc. | ||
| 141 | * (the macro is used as remove_vma() is static to mm/mmap.c) | ||
| 142 | */ | ||
| 143 | #define arch_exit_mmap(mm) \ | ||
| 144 | do { \ | ||
| 145 | struct vm_area_struct *high_vma = find_vma(mm, 0xffff0000); \ | ||
| 146 | if (high_vma) { \ | ||
| 147 | BUG_ON(high_vma->vm_next); /* it should be last */ \ | ||
| 148 | if (high_vma->vm_prev) \ | ||
| 149 | high_vma->vm_prev->vm_next = NULL; \ | ||
| 150 | else \ | ||
| 151 | mm->mmap = NULL; \ | ||
| 152 | rb_erase(&high_vma->vm_rb, &mm->mm_rb); \ | ||
| 153 | mm->mmap_cache = NULL; \ | ||
| 154 | mm->map_count--; \ | ||
| 155 | remove_vma(high_vma); \ | ||
| 156 | } \ | ||
| 157 | } while (0) | ||
| 158 | |||
| 159 | static inline void arch_dup_mmap(struct mm_struct *oldmm, | ||
| 160 | struct mm_struct *mm) | ||
| 161 | { | ||
| 162 | } | ||
| 163 | |||
| 164 | #endif | 137 | #endif |
| @@ -17,4 +17,63 @@ extern asmlinkage unsigned int arm_check_condition(u32 opcode, u32 psr); · 16 unmodified lines | |||
| 17 | #define ARM_OPCODE_CONDTEST_PASS 1 | 17 | #define ARM_OPCODE_CONDTEST_PASS 1 |
| 18 | #define ARM_OPCODE_CONDTEST_UNCOND 2 | 18 | #define ARM_OPCODE_CONDTEST_UNCOND 2 |
| 19 | 19 | ||
| 20 | |||
| 21 | /* | ||
| 22 | * Opcode byteswap helpers | ||
| 23 | * | ||
| 24 | * These macros help with converting instructions between a canonical integer | ||
| 25 | * format and in-memory representation, in an endianness-agnostic manner. | ||
| 26 | * | ||
| 27 | * __mem_to_opcode_*() convert from in-memory representation to canonical form. | ||
| 28 | * __opcode_to_mem_*() convert from canonical form to in-memory representation. | ||
| 29 | * | ||
| 30 | * | ||
| 31 | * Canonical instruction representation: | ||
| 32 | * | ||
| 33 | * ARM: 0xKKLLMMNN | ||
| 34 | * Thumb 16-bit: 0x0000KKLL, where KK < 0xE8 | ||
| 35 | * Thumb 32-bit: 0xKKLLMMNN, where KK >= 0xE8 | ||
| 36 | * | ||
| 37 | * There is no way to distinguish an ARM instruction in canonical representation | ||
| 38 | * from a Thumb instruction (just as these cannot be distinguished in memory). | ||
| 39 | * Where this distinction is important, it needs to be tracked separately. | ||
| 40 | * | ||
| 41 | * Note that values in the range 0x0000E800..0xE7FFFFFF intentionally do not | ||
| 42 | * represent any valid Thumb-2 instruction. For this range, | ||
| 43 | * __opcode_is_thumb32() and __opcode_is_thumb16() will both be false. | ||
| 44 | */ | ||
| 45 | |||
| 46 | #ifndef __ASSEMBLY__ | ||
| 47 | |||
| 48 | #include <linux/types.h> | ||
| 49 | #include <linux/swab.h> | ||
| 50 | |||
| 51 | #ifdef CONFIG_CPU_ENDIAN_BE8 | ||
| 52 | #define __opcode_to_mem_arm(x) swab32(x) | ||
| 53 | #define __opcode_to_mem_thumb16(x) swab16(x) | ||
| 54 | #define __opcode_to_mem_thumb32(x) swahb32(x) | ||
| 55 | #else | ||
| 56 | #define __opcode_to_mem_arm(x) ((u32)(x)) | ||
| 57 | #define __opcode_to_mem_thumb16(x) ((u16)(x)) | ||
| 58 | #define __opcode_to_mem_thumb32(x) swahw32(x) | ||
| 59 | #endif | ||
| 60 | |||
| 61 | #define __mem_to_opcode_arm(x) __opcode_to_mem_arm(x) | ||
| 62 | #define __mem_to_opcode_thumb16(x) __opcode_to_mem_thumb16(x) | ||
| 63 | #define __mem_to_opcode_thumb32(x) __opcode_to_mem_thumb32(x) | ||
| 64 | |||
| 65 | /* Operations specific to Thumb opcodes */ | ||
| 66 | |||
| 67 | /* Instruction size checks: */ | ||
| 68 | #define __opcode_is_thumb32(x) ((u32)(x) >= 0xE8000000UL) | ||
| 69 | #define __opcode_is_thumb16(x) ((u32)(x) < 0xE800UL) | ||
| 70 | |||
| 71 | /* Operations to construct or split 32-bit Thumb instructions: */ | ||
| 72 | #define __opcode_thumb32_first(x) ((u16)((x) >> 16)) | ||
| 73 | #define __opcode_thumb32_second(x) ((u16)(x)) | ||
| 74 | #define __opcode_thumb32_compose(first, second) \ | ||
| 75 | (((u32)(u16)(first) << 16) | (u32)(u16)(second)) | ||
| 76 | |||
| 77 | #endif /* __ASSEMBLY__ */ | ||
| 78 | |||
| 20 | #endif /* __ASM_ARM_OPCODES_H */ | 79 | #endif /* __ASM_ARM_OPCODES_H */ |
| @@ -151,6 +151,8 @@ extern void __cpu_copy_user_highpage(struct page *to, struct page *from, · 150 unmodified lines | |||
| 151 | #define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) | 151 | #define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) |
| 152 | extern void copy_page(void *to, const void *from); | 152 | extern void copy_page(void *to, const void *from); |
| 153 | 153 | ||
| 154 | #define __HAVE_ARCH_GATE_AREA 1 | ||
| 155 | |||
| 154 | #ifdef CONFIG_ARM_LPAE | 156 | #ifdef CONFIG_ARM_LPAE |
| 155 | #include <asm/pgtable-3level-types.h> | 157 | #include <asm/pgtable-3level-types.h> |
| 156 | #else | 158 | #else |
| @@ -57,14 +57,6 @@ static inline void pci_dma_burst_advice(struct pci_dev *pdev, · 56 unmodified lines | |||
| 57 | extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, | 57 | extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, |
| 58 | enum pci_mmap_state mmap_state, int write_combine); | 58 | enum pci_mmap_state mmap_state, int write_combine); |
| 59 | 59 | ||
| 60 | extern void | ||
| 61 | pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, | ||
| 62 | struct resource *res); | ||
| 63 | |||
| 64 | extern void | ||
| 65 | pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, | ||
| 66 | struct pci_bus_region *region); | ||
| 67 | |||
| 68 | /* | 60 | /* |
| 69 | * Dummy implementation; always return 0. | 61 | * Dummy implementation; always return 0. |
| 70 | */ | 62 | */ |
| @@ -22,6 +22,7 @@ enum arm_perf_pmu_ids { · 21 unmodified lines | |||
| 22 | ARM_PERF_PMU_ID_CA9, | 22 | ARM_PERF_PMU_ID_CA9, |
| 23 | ARM_PERF_PMU_ID_CA5, | 23 | ARM_PERF_PMU_ID_CA5, |
| 24 | ARM_PERF_PMU_ID_CA15, | 24 | ARM_PERF_PMU_ID_CA15, |
| 25 | ARM_PERF_PMU_ID_CA7, | ||
| 25 | ARM_NUM_PMU_IDS, | 26 | ARM_NUM_PMU_IDS, |
| 26 | }; | 27 | }; |
| 27 | 28 | ||
| @@ -19,59 +19,22 @@ · 18 unmodified lines | |||
| 19 | * assume GCC is being used. | 19 | * assume GCC is being used. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | typedef unsigned long __kernel_ino_t; | ||
| 23 | typedef unsigned short __kernel_mode_t; | 22 | typedef unsigned short __kernel_mode_t; |
| 23 | #define __kernel_mode_t __kernel_mode_t | ||
| 24 | |||
| 24 | typedef unsigned short __kernel_nlink_t; | 25 | typedef unsigned short __kernel_nlink_t; |
| 25 | typedef long __kernel_off_t; | 26 | #define __kernel_nlink_t __kernel_nlink_t |
| 26 | typedef int __kernel_pid_t; | 27 | |
| 27 | typedef unsigned short __kernel_ipc_pid_t; | 28 | typedef unsigned short __kernel_ipc_pid_t; |
| 29 | #define __kernel_ipc_pid_t __kernel_ipc_pid_t | ||
| 30 | |||
| 28 | typedef unsigned short __kernel_uid_t; | 31 | typedef unsigned short __kernel_uid_t; |
| 29 | typedef unsigned short __kernel_gid_t; | 32 | typedef unsigned short __kernel_gid_t; |
| 30 | typedef unsigned int __kernel_size_t; | 33 | #define __kernel_uid_t __kernel_uid_t |
| 31 | typedef int __kernel_ssize_t; | ||
| 32 | typedef int __kernel_ptrdiff_t; | ||
| 33 | typedef long __kernel_time_t; | ||
| 34 | typedef long __kernel_suseconds_t; | ||
| 35 | typedef long __kernel_clock_t; | ||
| 36 | typedef int __kernel_timer_t; | ||
| 37 | typedef int __kernel_clockid_t; | ||
| 38 | typedef int __kernel_daddr_t; | ||
| 39 | typedef char * __kernel_caddr_t; | ||
| 40 | typedef unsigned short __kernel_uid16_t; | ||
| 41 | typedef unsigned short __kernel_gid16_t; | ||
| 42 | typedef unsigned int __kernel_uid32_t; | ||
| 43 | typedef unsigned int __kernel_gid32_t; | ||
| 44 | 34 | ||
| 45 | typedef unsigned short __kernel_old_uid_t; | ||
| 46 | typedef unsigned short __kernel_old_gid_t; | ||
| 47 | typedef unsigned short __kernel_old_dev_t; | 35 | typedef unsigned short __kernel_old_dev_t; |
| 36 | #define __kernel_old_dev_t __kernel_old_dev_t | ||
| 48 | 37 | ||
| 49 | #ifdef __GNUC__ | 38 | #include <asm-generic/posix_types.h> |
| 50 | typedef long long __kernel_loff_t; | ||
| 51 | #endif | ||
| 52 | |||
| 53 | typedef struct { | ||
| 54 | int val[2]; | ||
| 55 | } __kernel_fsid_t; | ||
| 56 | |||
| 57 | #if defined(__KERNEL__) | ||
| 58 | |||
| 59 | #undef __FD_SET | ||
| 60 | #define __FD_SET(fd, fdsetp) \ | ||
| 61 | (((fd_set *)(fdsetp))->fds_bits[(fd) >> 5] |= (1<<((fd) & 31))) | ||
| 62 | |||
| 63 | #undef __FD_CLR | ||
| 64 | #define __FD_CLR(fd, fdsetp) \ | ||
| 65 | (((fd_set *)(fdsetp))->fds_bits[(fd) >> 5] &= ~(1<<((fd) & 31))) | ||
| 66 | |||
| 67 | #undef __FD_ISSET | ||
| 68 | #define __FD_ISSET(fd, fdsetp) \ | ||
| 69 | ((((fd_set *)(fdsetp))->fds_bits[(fd) >> 5] & (1<<((fd) & 31))) != 0) | ||
| 70 | |||
| 71 | #undef __FD_ZERO | ||
| 72 | #define __FD_ZERO(fdsetp) \ | ||
| 73 | (memset (fdsetp, 0, sizeof (*(fd_set *)(fdsetp)))) | ||
| 74 | |||
| 75 | #endif | ||
| 76 | 39 | ||
| 77 | #endif | 40 | #endif |
| @@ -22,7 +22,6 @@ · 21 unmodified lines | |||
| 22 | #include <asm/hw_breakpoint.h> | 22 | #include <asm/hw_breakpoint.h> |
| 23 | #include <asm/ptrace.h> | 23 | #include <asm/ptrace.h> |
| 24 | #include <asm/types.h> | 24 | #include <asm/types.h> |
| 25 | #include <asm/system.h> | ||
| 26 | 25 | ||
| 27 | #ifdef __KERNEL__ | 26 | #ifdef __KERNEL__ |
| 28 | #define STACK_TOP ((current->personality & ADDR_LIMIT_32BIT) ? \ | 27 | #define STACK_TOP ((current->personality & ADDR_LIMIT_32BIT) ? \ |
| @@ -56,7 +55,6 @@ struct thread_struct { · 27 unmodified lines | |||
| 56 | #define start_thread(regs,pc,sp) \ | 55 | #define start_thread(regs,pc,sp) \ |
| 57 | ({ \ | 56 | ({ \ |
| 58 | unsigned long *stack = (unsigned long *)sp; \ | 57 | unsigned long *stack = (unsigned long *)sp; \ |
| 59 | set_fs(USER_DS); \ | ||
| 60 | memset(regs->uregs, 0, sizeof(regs->uregs)); \ | 58 | memset(regs->uregs, 0, sizeof(regs->uregs)); \ |
| 61 | if (current->personality & ADDR_LIMIT_32BIT) \ | 59 | if (current->personality & ADDR_LIMIT_32BIT) \ |
| 62 | regs->ARM_cpsr = USR_MODE; \ | 60 | regs->ARM_cpsr = USR_MODE; \ |
| @@ -90,6 +88,8 @@ unsigned long get_wchan(struct task_struct *p); · 27 unmodified lines | |||
| 90 | #define cpu_relax() barrier() | 88 | #define cpu_relax() barrier() |
| 91 | #endif | 89 | #endif |
| 92 | 90 | ||
| 91 | void cpu_idle_wait(void); | ||
| 92 | |||
| 93 | /* | 93 | /* |
| 94 | * Create a new kernel thread | 94 | * Create a new kernel thread |
| 95 | */ | 95 | */ |
| @@ -13,8 +13,6 @@ · 12 unmodified lines | |||
| 13 | 13 | ||
| 14 | #ifdef CONFIG_OF | 14 | #ifdef CONFIG_OF |
| 15 | 15 | ||
| 16 | #include <asm/irq.h> | ||
| 17 | |||
| 18 | extern struct machine_desc *setup_machine_fdt(unsigned int dt_phys); | 16 | extern struct machine_desc *setup_machine_fdt(unsigned int dt_phys); |
| 19 | extern void arm_dt_memblock_reserve(void); | 17 | extern void arm_dt_memblock_reserve(void); |
| 20 | 18 | ||
| @@ -18,11 +18,28 @@ · 17 unmodified lines | |||
| 18 | #define TWD_TIMER_CONTROL_PERIODIC (1 << 1) | 18 | #define TWD_TIMER_CONTROL_PERIODIC (1 << 1) |
| 19 | #define TWD_TIMER_CONTROL_IT_ENABLE (1 << 2) | 19 | #define TWD_TIMER_CONTROL_IT_ENABLE (1 << 2) |
| 20 | 20 | ||
| 21 | struct clock_event_device; | 21 | #include <linux/ioport.h> |
| 22 | 22 | ||
| 23 | extern void __iomem *twd_base; | 23 | struct twd_local_timer { |
| 24 | struct resource res[2]; | ||
| 25 | }; | ||
| 24 | 26 | ||
| 25 | void twd_timer_setup(struct clock_event_device *); | 27 | #define DEFINE_TWD_LOCAL_TIMER(name,base,irq) \ |
| 26 | void twd_timer_stop(struct clock_event_device *); | 28 | struct twd_local_timer name __initdata = { \ |
| 29 | .res = { \ | ||
| 30 | DEFINE_RES_MEM(base, 0x10), \ | ||
| 31 | DEFINE_RES_IRQ(irq), \ | ||
| 32 | }, \ | ||
| 33 | }; | ||
| 34 | |||
| 35 | int twd_local_timer_register(struct twd_local_timer *); | ||
| 36 | |||
| 37 | #ifdef CONFIG_HAVE_ARM_TWD | ||
| 38 | void twd_local_timer_of_register(void); | ||
| 39 | #else | ||
| 40 | static inline void twd_local_timer_of_register(void) | ||
| 41 | { | ||
| 42 | } | ||
| 43 | #endif | ||
| 27 | 44 | ||
| 28 | #endif | 45 | #endif |
| @@ -0,0 +1,18 @@ | |||
| 1 | #ifndef __ASM_ARM_SWITCH_TO_H | ||
| 2 | #define __ASM_ARM_SWITCH_TO_H | ||
| 3 | |||
| 4 | #include <linux/thread_info.h> | ||
| 5 | |||
| 6 | /* | ||
| 7 | * switch_to(prev, next) should switch from task `prev' to `next' | ||
| 8 | * `prev' will never be the same as `next'. schedule() itself | ||
| 9 | * contains the memory barrier to tell GCC not to cache `current'. | ||
| 10 | */ | ||
| 11 | extern struct task_struct *__switch_to(struct task_struct *, struct thread_info *, struct thread_info *); | ||
| 12 | |||
| 13 | #define switch_to(prev,next,last) \ | ||
| 14 | do { \ | ||
| 15 | last = __switch_to(prev,task_thread_info(prev), task_thread_info(next)); \ | ||
| 16 | } while (0) | ||
| 17 | |||
| 18 | #endif /* __ASM_ARM_SWITCH_TO_H */ | ||
| @@ -1,543 +1,8 @@ | |||
| 1 | #ifndef __ASM_ARM_SYSTEM_H | 1 | /* FILE TO BE DELETED. DO NOT ADD STUFF HERE! */ |
| 2 | #define __ASM_ARM_SYSTEM_H | 2 | #include <asm/barrier.h> |
| 3 | 3 | #include <asm/compiler.h> | |
| 4 | #ifdef __KERNEL__ | 4 | #include <asm/cmpxchg.h> |
| 5 | 5 | #include <asm/exec.h> | |
| 6 | #define CPU_ARCH_UNKNOWN 0 | 6 | #include <asm/switch_to.h> |
| 7 | #define CPU_ARCH_ARMv3 1 | 7 | #include <asm/system_info.h> |
| 8 | #define CPU_ARCH_ARMv4 2 | 8 | #include <asm/system_misc.h> |
| 9 | #define CPU_ARCH_ARMv4T 3 | ||
| 10 | #define CPU_ARCH_ARMv5 4 | ||
| 11 | #define CPU_ARCH_ARMv5T 5 | ||
| 12 | #define CPU_ARCH_ARMv5TE 6 | ||
| 13 | #define CPU_ARCH_ARMv5TEJ 7 | ||
| 14 | #define CPU_ARCH_ARMv6 8 | ||
| 15 | #define CPU_ARCH_ARMv7 9 | ||
| 16 | |||
| 17 | /* | ||
| 18 | * CR1 bits (CP#15 CR1) | ||
| 19 | */ | ||
| 20 | #define CR_M (1 << 0) /* MMU enable */ | ||
| 21 | #define CR_A (1 << 1) /* Alignment abort enable */ | ||
| 22 | #define CR_C (1 << 2) /* Dcache enable */ | ||
| 23 | #define CR_W (1 << 3) /* Write buffer enable */ | ||
| 24 | #define CR_P (1 << 4) /* 32-bit exception handler */ | ||
| 25 | #define CR_D (1 << 5) /* 32-bit data address range */ | ||
| 26 | #define CR_L (1 << 6) /* Implementation defined */ | ||
| 27 | #define CR_B (1 << 7) /* Big endian */ | ||
| 28 | #define CR_S (1 << 8) /* System MMU protection */ | ||
| 29 | #define CR_R (1 << 9) /* ROM MMU protection */ | ||
| 30 | #define CR_F (1 << 10) /* Implementation defined */ | ||
| 31 | #define CR_Z (1 << 11) /* Implementation defined */ | ||
| 32 | #define CR_I (1 << 12) /* Icache enable */ | ||
| 33 | #define CR_V (1 << 13) /* Vectors relocated to 0xffff0000 */ | ||
| 34 | #define CR_RR (1 << 14) /* Round Robin cache replacement */ | ||
| 35 | #define CR_L4 (1 << 15) /* LDR pc can set T bit */ | ||
| 36 | #define CR_DT (1 << 16) | ||
| 37 | #define CR_IT (1 << 18) | ||
| 38 | #define CR_ST (1 << 19) | ||
| 39 | #define CR_FI (1 << 21) /* Fast interrupt (lower latency mode) */ | ||
| 40 | #define CR_U (1 << 22) /* Unaligned access operation */ | ||
| 41 | #define CR_XP (1 << 23) /* Extended page tables */ | ||
| 42 | #define CR_VE (1 << 24) /* Vectored interrupts */ | ||
| 43 | #define CR_EE (1 << 25) /* Exception (Big) Endian */ | ||
| 44 | #define CR_TRE (1 << 28) /* TEX remap enable */ | ||
| 45 | #define CR_AFE (1 << 29) /* Access flag enable */ | ||
| 46 | #define CR_TE (1 << 30) /* Thumb exception enable */ | ||
| 47 | |||
| 48 | /* | ||
| 49 | * This is used to ensure the compiler did actually allocate the register we | ||
| 50 | * asked it for some inline assembly sequences. Apparently we can't trust | ||
| 51 | * the compiler from one version to another so a bit of paranoia won't hurt. | ||
| 52 | * This string is meant to be concatenated with the inline asm string and | ||
| 53 | * will cause compilation to stop on mismatch. | ||
| 54 | * (for details, see gcc PR 15089) | ||
| 55 | */ | ||
| 56 | #define __asmeq(x, y) ".ifnc " x "," y " ; .err ; .endif\n\t" | ||
| 57 | |||
| 58 | #ifndef __ASSEMBLY__ | ||
| 59 | |||
| 60 | #include <linux/compiler.h> | ||
| 61 | #include <linux/linkage.h> | ||
| 62 | #include <linux/irqflags.h> | ||
| 63 | |||
| 64 | #include <asm/outercache.h> | ||
| 65 | |||
| 66 | struct thread_info; | ||
| 67 | struct task_struct; | ||
| 68 | |||
| 69 | /* information about the system we're running on */ | ||
| 70 | extern unsigned int system_rev; | ||
| 71 | extern unsigned int system_serial_low; | ||
| 72 | extern unsigned int system_serial_high; | ||
| 73 | extern unsigned int mem_fclk_21285; | ||
| 74 | |||
| 75 | struct pt_regs; | ||
| 76 | |||
| 77 | void die(const char *msg, struct pt_regs *regs, int err); | ||
| 78 | |||
| 79 | struct siginfo; | ||
| 80 | void arm_notify_die(const char *str, struct pt_regs *regs, struct siginfo *info, | ||
| 81 | unsigned long err, unsigned long trap); | ||
| 82 | |||
| 83 | #ifdef CONFIG_ARM_LPAE | ||
| 84 | #define FAULT_CODE_ALIGNMENT 33 | ||
| 85 | #define FAULT_CODE_DEBUG 34 | ||
| 86 | #else | ||
| 87 | #define FAULT_CODE_ALIGNMENT 1 | ||
| 88 | #define FAULT_CODE_DEBUG 2 | ||
| 89 | #endif | ||
| 90 | |||
| 91 | void hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int, | ||
| 92 | struct pt_regs *), | ||
| 93 | int sig, int code, const char *name); | ||
| 94 | |||
| 95 | void hook_ifault_code(int nr, int (*fn)(unsigned long, unsigned int, | ||
| 96 | struct pt_regs *), | ||
| 97 | int sig, int code, const char *name); | ||
| 98 | |||
| 99 | #define xchg(ptr,x) \ | ||
| 100 | ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) | ||
| 101 | |||
| 102 | extern asmlinkage void c_backtrace(unsigned long fp, int pmode); | ||
| 103 | |||
| 104 | struct mm_struct; | ||
| 105 | extern void show_pte(struct mm_struct *mm, unsigned long addr); | ||
| 106 | extern void __show_regs(struct pt_regs *); | ||
| 107 | |||
| 108 | extern int __pure cpu_architecture(void); | ||
| 109 | extern void cpu_init(void); | ||
| 110 | |||
| 111 | void soft_restart(unsigned long); | ||
| 112 | extern void (*arm_pm_restart)(char str, const char *cmd); | ||
| 113 | |||
| 114 | #define UDBG_UNDEFINED (1 << 0) | ||
| 115 | #define UDBG_SYSCALL (1 << 1) | ||
| 116 | #define UDBG_BADABORT (1 << 2) | ||
| 117 | #define UDBG_SEGV (1 << 3) | ||
| 118 | #define UDBG_BUS (1 << 4) | ||
| 119 | |||
| 120 | extern unsigned int user_debug; | ||
| 121 | |||
| 122 | #if __LINUX_ARM_ARCH__ >= 4 | ||
| 123 | #define vectors_high() (cr_alignment & CR_V) | ||
| 124 | #else | ||
| 125 | #define vectors_high() (0) | ||
| 126 | #endif | ||
| 127 | |||
| 128 | #if __LINUX_ARM_ARCH__ >= 7 || \ | ||
| 129 | (__LINUX_ARM_ARCH__ == 6 && defined(CONFIG_CPU_32v6K)) | ||
| 130 | #define sev() __asm__ __volatile__ ("sev" : : : "memory") | ||
| 131 | #define wfe() __asm__ __volatile__ ("wfe" : : : "memory") | ||
| 132 | #define wfi() __asm__ __volatile__ ("wfi" : : : "memory") | ||
| 133 | #endif | ||
| 134 | |||
| 135 | #if __LINUX_ARM_ARCH__ >= 7 | ||
| 136 | #define isb() __asm__ __volatile__ ("isb" : : : "memory") | ||
| 137 | #define dsb() __asm__ __volatile__ ("dsb" : : : "memory") | ||
| 138 | #define dmb() __asm__ __volatile__ ("dmb" : : : "memory") | ||
| 139 | #elif defined(CONFIG_CPU_XSC3) || __LINUX_ARM_ARCH__ == 6 | ||
| 140 | #define isb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c5, 4" \ | ||
| 141 | : : "r" (0) : "memory") | ||
| 142 | #define dsb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 4" \ | ||
| 143 | : : "r" (0) : "memory") | ||
| 144 | #define dmb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" \ | ||
| 145 | : : "r" (0) : "memory") | ||
| 146 | #elif defined(CONFIG_CPU_FA526) | ||
| 147 | #define isb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c5, 4" \ | ||
| 148 | : : "r" (0) : "memory") | ||
| 149 | #define dsb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 4" \ | ||
| 150 | : : "r" (0) : "memory") | ||
| 151 | #define dmb() __asm__ __volatile__ ("" : : : "memory") | ||
| 152 | #else | ||
| 153 | #define isb() __asm__ __volatile__ ("" : : : "memory") | ||
| 154 | #define dsb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 4" \ | ||
| 155 | : : "r" (0) : "memory") | ||
| 156 | #define dmb() __asm__ __volatile__ ("" : : : "memory") | ||
| 157 | #endif | ||
| 158 | |||
| 159 | #ifdef CONFIG_ARCH_HAS_BARRIERS | ||
| 160 | #include <mach/barriers.h> | ||
| 161 | #elif defined(CONFIG_ARM_DMA_MEM_BUFFERABLE) || defined(CONFIG_SMP) | ||
| 162 | #define mb() do { dsb(); outer_sync(); } while (0) | ||
| 163 | #define rmb() dsb() | ||
| 164 | #define wmb() mb() | ||
| 165 | #else | ||
| 166 | #include <asm/memory.h> | ||
| 167 | #define mb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) | ||
| 168 | #define rmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) | ||
| 169 | #define wmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) | ||
| 170 | #endif | ||
| 171 | |||
| 172 | #ifndef CONFIG_SMP | ||
| 173 | #define smp_mb() barrier() | ||
| 174 | #define smp_rmb() barrier() | ||
| 175 | #define smp_wmb() barrier() | ||
| 176 | #else | ||
| 177 | #define smp_mb() dmb() | ||
| 178 | #define smp_rmb() dmb() | ||
| 179 | #define smp_wmb() dmb() | ||
| 180 | #endif | ||
| 181 | |||
| 182 | #define read_barrier_depends() do { } while(0) | ||
| 183 | #define smp_read_barrier_depends() do { } while(0) | ||
| 184 | |||
| 185 | #define set_mb(var, value) do { var = value; smp_mb(); } while (0) | ||
| 186 | #define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t"); | ||
| 187 | |||
| 188 | extern unsigned long cr_no_alignment; /* defined in entry-armv.S */ | ||
| 189 | extern unsigned long cr_alignment; /* defined in entry-armv.S */ | ||
| 190 | |||
| 191 | static inline unsigned int get_cr(void) | ||
| 192 | { | ||
| 193 | unsigned int val; | ||
| 194 | asm("mrc p15, 0, %0, c1, c0, 0 @ get CR" : "=r" (val) : : "cc"); | ||
| 195 | return val; | ||
| 196 | } | ||
| 197 | |||
| 198 | static inline void set_cr(unsigned int val) | ||
| 199 | { | ||
| 200 | asm volatile("mcr p15, 0, %0, c1, c0, 0 @ set CR" | ||
| 201 | : : "r" (val) : "cc"); | ||
| 202 | isb(); | ||
| 203 | } | ||
| 204 | |||
| 205 | #ifndef CONFIG_SMP | ||
| 206 | extern void adjust_cr(unsigned long mask, unsigned long set); | ||
| 207 | #endif | ||
| 208 | |||
| 209 | #define CPACC_FULL(n) (3 << (n * 2)) | ||
| 210 | #define CPACC_SVC(n) (1 << (n * 2)) | ||
| 211 | #define CPACC_DISABLE(n) (0 << (n * 2)) | ||
| 212 | |||
| 213 | static inline unsigned int get_copro_access(void) | ||
| 214 | { | ||
| 215 | unsigned int val; | ||
| 216 | asm("mrc p15, 0, %0, c1, c0, 2 @ get copro access" | ||
| 217 | : "=r" (val) : : "cc"); | ||
| 218 | return val; | ||
| 219 | } | ||
| 220 | |||
| 221 | static inline void set_copro_access(unsigned int val) | ||
| 222 | { | ||
| 223 | asm volatile("mcr p15, 0, %0, c1, c0, 2 @ set copro access" | ||
| 224 | : : "r" (val) : "cc"); | ||
| 225 | isb(); | ||
| 226 | } | ||
| 227 | |||
| 228 | /* | ||
| 229 | * switch_mm() may do a full cache flush over the context switch, | ||
| 230 | * so enable interrupts over the context switch to avoid high | ||
| 231 | * latency. | ||
| 232 | */ | ||
| 233 | #define __ARCH_WANT_INTERRUPTS_ON_CTXSW | ||
| 234 | |||
| 235 | /* | ||
| 236 | * switch_to(prev, next) should switch from task `prev' to `next' | ||
| 237 | * `prev' will never be the same as `next'. schedule() itself | ||
| 238 | * contains the memory barrier to tell GCC not to cache `current'. | ||
| 239 | */ | ||
| 240 | extern struct task_struct *__switch_to(struct task_struct *, struct thread_info *, struct thread_info *); | ||
| 241 | |||
| 242 | #define switch_to(prev,next,last) \ | ||
| 243 | do { \ | ||
| 244 | last = __switch_to(prev,task_thread_info(prev), task_thread_info(next)); \ | ||
| 245 | } while (0) | ||
| 246 | |||
| 247 | #if defined(CONFIG_CPU_SA1100) || defined(CONFIG_CPU_SA110) | ||
| 248 | /* | ||
| 249 | * On the StrongARM, "swp" is terminally broken since it bypasses the | ||
| 250 | * cache totally. This means that the cache becomes inconsistent, and, | ||
| 251 | * since we use normal loads/stores as well, this is really bad. | ||
| 252 | * Typically, this causes oopsen in filp_close, but could have other, | ||
| 253 | * more disastrous effects. There are two work-arounds: | ||
| 254 | * 1. Disable interrupts and emulate the atomic swap | ||
| 255 | * 2. Clean the cache, perform atomic swap, flush the cache | ||
| 256 | * | ||
| 257 | * We choose (1) since its the "easiest" to achieve here and is not | ||
| 258 | * dependent on the processor type. | ||
| 259 | * | ||
| 260 | * NOTE that this solution won't work on an SMP system, so explcitly | ||
| 261 | * forbid it here. | ||
| 262 | */ | ||
| 263 | #define swp_is_buggy | ||
| 264 | #endif | ||
| 265 | |||
| 266 | static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size) | ||
| 267 | { | ||
| 268 | extern void __bad_xchg(volatile void *, int); | ||
| 269 | unsigned long ret; | ||
| 270 | #ifdef swp_is_buggy | ||
| 271 | unsigned long flags; | ||
| 272 | #endif | ||
| 273 | #if __LINUX_ARM_ARCH__ >= 6 | ||
| 274 | unsigned int tmp; | ||
| 275 | #endif | ||
| 276 | |||
| 277 | smp_mb(); | ||
| 278 | |||
| 279 | switch (size) { | ||
| 280 | #if __LINUX_ARM_ARCH__ >= 6 | ||
| 281 | case 1: | ||
| 282 | asm volatile("@ __xchg1\n" | ||
| 283 | "1: ldrexb %0, [%3]\n" | ||
| 284 | " strexb %1, %2, [%3]\n" | ||
| 285 | " teq %1, #0\n" | ||
| 286 | " bne 1b" | ||
| 287 | : "=&r" (ret), "=&r" (tmp) | ||
| 288 | : "r" (x), "r" (ptr) | ||
| 289 | : "memory", "cc"); | ||
| 290 | break; | ||
| 291 | case 4: | ||
| 292 | asm volatile("@ __xchg4\n" | ||
| 293 | "1: ldrex %0, [%3]\n" | ||
| 294 | " strex %1, %2, [%3]\n" | ||
| 295 | " teq %1, #0\n" | ||
| 296 | " bne 1b" | ||
| 297 | : "=&r" (ret), "=&r" (tmp) | ||
| 298 | : "r" (x), "r" (ptr) | ||
| 299 | : "memory", "cc"); | ||
| 300 | break; | ||
| 301 | #elif defined(swp_is_buggy) | ||
| 302 | #ifdef CONFIG_SMP | ||
| 303 | #error SMP is not supported on this platform | ||
| 304 | #endif | ||
| 305 | case 1: | ||
| 306 | raw_local_irq_save(flags); | ||
| 307 | ret = *(volatile unsigned char *)ptr; | ||
| 308 | *(volatile unsigned char *)ptr = x; | ||
| 309 | raw_local_irq_restore(flags); | ||
| 310 | break; | ||
| 311 | |||
| 312 | case 4: | ||
| 313 | raw_local_irq_save(flags); | ||
| 314 | ret = *(volatile unsigned long *)ptr; | ||
| 315 | *(volatile unsigned long *)ptr = x; | ||
| 316 | raw_local_irq_restore(flags); | ||
| 317 | break; | ||
| 318 | #else | ||
| 319 | case 1: | ||
| 320 | asm volatile("@ __xchg1\n" | ||
| 321 | " swpb %0, %1, [%2]" | ||
| 322 | : "=&r" (ret) | ||
| 323 | : "r" (x), "r" (ptr) | ||
| 324 | : "memory", "cc"); | ||
| 325 | break; | ||
| 326 | case 4: | ||
| 327 | asm volatile("@ __xchg4\n" | ||
| 328 | " swp %0, %1, [%2]" | ||
| 329 | : "=&r" (ret) | ||
| 330 | : "r" (x), "r" (ptr) | ||
| 331 | : "memory", "cc"); | ||
| 332 | break; | ||
| 333 | #endif | ||
| 334 | default: | ||
| 335 | __bad_xchg(ptr, size), ret = 0; | ||
| 336 | break; | ||
| 337 | } | ||
| 338 | smp_mb(); | ||
| 339 | |||
| 340 | return ret; | ||
| 341 | } | ||
| 342 | |||
| 343 | extern void disable_hlt(void); | ||
| 344 | extern void enable_hlt(void); | ||
| 345 | |||
| 346 | void cpu_idle_wait(void); | ||
| 347 | |||
| 348 | #include <asm-generic/cmpxchg-local.h> | ||
| 349 | |||
| 350 | #if __LINUX_ARM_ARCH__ < 6 | ||
| 351 | /* min ARCH < ARMv6 */ | ||
| 352 | |||
| 353 | #ifdef CONFIG_SMP | ||
| 354 | #error "SMP is not supported on this platform" | ||
| 355 | #endif | ||
| 356 | |||
| 357 | /* | ||
| 358 | * cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make | ||
| 359 | * them available. | ||
| 360 | */ | ||
| 361 | #define cmpxchg_local(ptr, o, n) \ | ||
| 362 | ((__typeof__(*(ptr)))__cmpxchg_local_generic((ptr), (unsigned long)(o),\ | ||
| 363 | (unsigned long)(n), sizeof(*(ptr)))) | ||
| 364 | #define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) | ||
| 365 | |||
| 366 | #ifndef CONFIG_SMP | ||
| 367 | #include <asm-generic/cmpxchg.h> | ||
| 368 | #endif | ||
| 369 | |||
| 370 | #else /* min ARCH >= ARMv6 */ | ||
| 371 | |||
| 372 | extern void __bad_cmpxchg(volatile void *ptr, int size); | ||
| 373 | |||
| 374 | /* | ||
| 375 | * cmpxchg only support 32-bits operands on ARMv6. | ||
| 376 | */ | ||
| 377 | |||
| 378 | static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, | ||
| 379 | unsigned long new, int size) | ||
| 380 | { | ||
| 381 | unsigned long oldval, res; | ||
| 382 | |||
| 383 | switch (size) { | ||
| 384 | #ifndef CONFIG_CPU_V6 /* min ARCH >= ARMv6K */ | ||
| 385 | case 1: | ||
| 386 | do { | ||
| 387 | asm volatile("@ __cmpxchg1\n" | ||
| 388 | " ldrexb %1, [%2]\n" | ||
| 389 | " mov %0, #0\n" | ||
| 390 | " teq %1, %3\n" | ||
| 391 | " strexbeq %0, %4, [%2]\n" | ||
| 392 | : "=&r" (res), "=&r" (oldval) | ||
| 393 | : "r" (ptr), "Ir" (old), "r" (new) | ||
| 394 | : "memory", "cc"); | ||
| 395 | } while (res); | ||
| 396 | break; | ||
| 397 | case 2: | ||
| 398 | do { | ||
| 399 | asm volatile("@ __cmpxchg1\n" | ||
| 400 | " ldrexh %1, [%2]\n" | ||
| 401 | " mov %0, #0\n" | ||
| 402 | " teq %1, %3\n" | ||
| 403 | " strexheq %0, %4, [%2]\n" | ||
| 404 | : "=&r" (res), "=&r" (oldval) | ||
| 405 | : "r" (ptr), "Ir" (old), "r" (new) | ||
| 406 | : "memory", "cc"); | ||
| 407 | } while (res); | ||
| 408 | break; | ||
| 409 | #endif | ||
| 410 | case 4: | ||
| 411 | do { | ||
| 412 | asm volatile("@ __cmpxchg4\n" | ||
| 413 | " ldrex %1, [%2]\n" | ||
| 414 | " mov %0, #0\n" | ||
| 415 | " teq %1, %3\n" | ||
| 416 | " strexeq %0, %4, [%2]\n" | ||
| 417 | : "=&r" (res), "=&r" (oldval) | ||
| 418 | : "r" (ptr), "Ir" (old), "r" (new) | ||
| 419 | : "memory", "cc"); | ||
| 420 | } while (res); | ||
| 421 | break; | ||
| 422 | default: | ||
| 423 | __bad_cmpxchg(ptr, size); | ||
| 424 | oldval = 0; | ||
| 425 | } | ||
| 426 | |||
| 427 | return oldval; | ||
| 428 | } | ||
| 429 | |||
| 430 | static inline unsigned long __cmpxchg_mb(volatile void *ptr, unsigned long old, | ||
| 431 | unsigned long new, int size) | ||
| 432 | { | ||
| 433 | unsigned long ret; | ||
| 434 | |||
| 435 | smp_mb(); | ||
| 436 | ret = __cmpxchg(ptr, old, new, size); | ||
| 437 | smp_mb(); | ||
| 438 | |||
| 439 | return ret; | ||
| 440 | } | ||
| 441 | |||
| 442 | #define cmpxchg(ptr,o,n) \ | ||
| 443 | ((__typeof__(*(ptr)))__cmpxchg_mb((ptr), \ | ||
| 444 | (unsigned long)(o), \ | ||
| 445 | (unsigned long)(n), \ | ||
| 446 | sizeof(*(ptr)))) | ||
| 447 | |||
| 448 | static inline unsigned long __cmpxchg_local(volatile void *ptr, | ||
| 449 | unsigned long old, | ||
| 450 | unsigned long new, int size) | ||
| 451 | { | ||
| 452 | unsigned long ret; | ||
| 453 | |||
| 454 | switch (size) { | ||
| 455 | #ifdef CONFIG_CPU_V6 /* min ARCH == ARMv6 */ | ||
| 456 | case 1: | ||
| 457 | case 2: | ||
| 458 | ret = __cmpxchg_local_generic(ptr, old, new, size); | ||
| 459 | break; | ||
| 460 | #endif | ||
| 461 | default: | ||
| 462 | ret = __cmpxchg(ptr, old, new, size); | ||
| 463 | } | ||
| 464 | |||
| 465 | return ret; | ||
| 466 | } | ||
| 467 | |||
| 468 | #define cmpxchg_local(ptr,o,n) \ | ||
| 469 | ((__typeof__(*(ptr)))__cmpxchg_local((ptr), \ | ||
| 470 | (unsigned long)(o), \ | ||
| 471 | (unsigned long)(n), \ | ||
| 472 | sizeof(*(ptr)))) | ||
| 473 | |||
| 474 | #ifndef CONFIG_CPU_V6 /* min ARCH >= ARMv6K */ | ||
| 475 | |||
| 476 | /* | ||
| 477 | * Note : ARMv7-M (currently unsupported by Linux) does not support | ||
| 478 | * ldrexd/strexd. If ARMv7-M is ever supported by the Linux kernel, it should | ||
| 479 | * not be allowed to use __cmpxchg64. | ||
| 480 | */ | ||
| 481 | static inline unsigned long long __cmpxchg64(volatile void *ptr, | ||
| 482 | unsigned long long old, | ||
| 483 | unsigned long long new) | ||
| 484 | { | ||
| 485 | register unsigned long long oldval asm("r0"); | ||
| 486 | register unsigned long long __old asm("r2") = old; | ||
| 487 | register unsigned long long __new asm("r4") = new; | ||
| 488 | unsigned long res; | ||
| 489 | |||
| 490 | do { | ||
| 491 | asm volatile( | ||
| 492 | " @ __cmpxchg8\n" | ||
| 493 | " ldrexd %1, %H1, [%2]\n" | ||
| 494 | " mov %0, #0\n" | ||
| 495 | " teq %1, %3\n" | ||
| 496 | " teqeq %H1, %H3\n" | ||
| 497 | " strexdeq %0, %4, %H4, [%2]\n" | ||
| 498 | : "=&r" (res), "=&r" (oldval) | ||
| 499 | : "r" (ptr), "Ir" (__old), "r" (__new) | ||
| 500 | : "memory", "cc"); | ||
| 501 | } while (res); | ||
| 502 | |||
| 503 | return oldval; | ||
| 504 | } | ||
| 505 | |||
| 506 | static inline unsigned long long __cmpxchg64_mb(volatile void *ptr, | ||
| 507 | unsigned long long old, | ||
| 508 | unsigned long long new) | ||
| 509 | { | ||
| 510 | unsigned long long ret; | ||
| 511 | |||
| 512 | smp_mb(); | ||
| 513 | ret = __cmpxchg64(ptr, old, new); | ||
| 514 | smp_mb(); | ||
| 515 | |||
| 516 | return ret; | ||
| 517 | } | ||
| 518 | |||
| 519 | #define cmpxchg64(ptr,o,n) \ | ||
| 520 | ((__typeof__(*(ptr)))__cmpxchg64_mb((ptr), \ | ||
| 521 | (unsigned long long)(o), \ | ||
| 522 | (unsigned long long)(n))) | ||
| 523 | |||
| 524 | #define cmpxchg64_local(ptr,o,n) \ | ||
| 525 | ((__typeof__(*(ptr)))__cmpxchg64((ptr), \ | ||
| 526 | (unsigned long long)(o), \ | ||
| 527 | (unsigned long long)(n))) | ||
| 528 | |||
| 529 | #else /* min ARCH = ARMv6 */ | ||
| 530 | |||
| 531 | #define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) | ||
| 532 | |||
| 533 | #endif | ||
| 534 | |||
| 535 | #endif /* __LINUX_ARM_ARCH__ >= 6 */ | ||
| 536 | |||
| 537 | #endif /* __ASSEMBLY__ */ | ||
| 538 | |||
| 539 | #define arch_align_stack(x) (x) | ||
| 540 | |||
| 541 | #endif /* __KERNEL__ */ | ||
| 542 | |||
| 543 | #endif | ||
| @@ -0,0 +1,27 @@ | |||
| 1 | #ifndef __ASM_ARM_SYSTEM_INFO_H | ||
| 2 | #define __ASM_ARM_SYSTEM_INFO_H | ||
| 3 | |||
| 4 | #define CPU_ARCH_UNKNOWN 0 | ||
| 5 | #define CPU_ARCH_ARMv3 1 | ||
| 6 | #define CPU_ARCH_ARMv4 2 | ||
| 7 | #define CPU_ARCH_ARMv4T 3 | ||
| 8 | #define CPU_ARCH_ARMv5 4 | ||
| 9 | #define CPU_ARCH_ARMv5T 5 | ||
| 10 | #define CPU_ARCH_ARMv5TE 6 | ||
| 11 | #define CPU_ARCH_ARMv5TEJ 7 | ||
| 12 | #define CPU_ARCH_ARMv6 8 | ||
| 13 | #define CPU_ARCH_ARMv7 9 | ||
| 14 | |||
| 15 | #ifndef __ASSEMBLY__ | ||
| 16 | |||
| 17 | /* information about the system we're running on */ | ||
| 18 | extern unsigned int system_rev; | ||
| 19 | extern unsigned int system_serial_low; | ||
| 20 | extern unsigned int system_serial_high; | ||
| 21 | extern unsigned int mem_fclk_21285; | ||
| 22 | |||
| 23 | extern int __pure cpu_architecture(void); | ||
| 24 | |||
| 25 | #endif /* !__ASSEMBLY__ */ | ||
| 26 | |||
| 27 | #endif /* __ASM_ARM_SYSTEM_INFO_H */ | ||
| @@ -0,0 +1,29 @@ | |||
| 1 | #ifndef __ASM_ARM_SYSTEM_MISC_H | ||
| 2 | #define __ASM_ARM_SYSTEM_MISC_H | ||
| 3 | |||
| 4 | #ifndef __ASSEMBLY__ | ||
| 5 | |||
| 6 | #include <linux/compiler.h> | ||
| 7 | #include <linux/linkage.h> | ||
| 8 | #include <linux/irqflags.h> | ||
| 9 | |||
| 10 | extern void cpu_init(void); | ||
| 11 | |||
| 12 | void soft_restart(unsigned long); | ||
| 13 | extern void (*arm_pm_restart)(char str, const char *cmd); | ||
| 14 | extern void (*arm_pm_idle)(void); | ||
| 15 | |||
| 16 | #define UDBG_UNDEFINED (1 << 0) | ||
| 17 | #define UDBG_SYSCALL (1 << 1) | ||
| 18 | #define UDBG_BADABORT (1 << 2) | ||
| 19 | #define UDBG_SEGV (1 << 3) | ||
| 20 | #define UDBG_BUS (1 << 4) | ||
| 21 | |||
| 22 | extern unsigned int user_debug; | ||
| 23 | |||
| 24 | extern void disable_hlt(void); | ||
| 25 | extern void enable_hlt(void); | ||
| 26 | |||
| 27 | #endif /* !__ASSEMBLY__ */ | ||
| 28 | |||
| 29 | #endif /* __ASM_ARM_SYSTEM_MISC_H */ | ||
| @@ -318,6 +318,21 @@ extern struct cpu_tlb_fns cpu_tlb; · 317 unmodified lines | |||
| 318 | 318 | ||
| 319 | #define tlb_flag(f) ((always_tlb_flags & (f)) || (__tlb_flag & possible_tlb_flags & (f))) | 319 | #define tlb_flag(f) ((always_tlb_flags & (f)) || (__tlb_flag & possible_tlb_flags & (f))) |
| 320 | 320 | ||
| 321 | #define __tlb_op(f, insnarg, arg) \ | ||
| 322 | do { \ | ||
| 323 | if (always_tlb_flags & (f)) \ | ||
| 324 | asm("mcr " insnarg \ | ||
| 325 | : : "r" (arg) : "cc"); \ | ||
| 326 | else if (possible_tlb_flags & (f)) \ | ||
| 327 | asm("tst %1, %2\n\t" \ | ||
| 328 | "mcrne " insnarg \ | ||
| 329 | : : "r" (arg), "r" (__tlb_flag), "Ir" (f) \ | ||
| 330 | : "cc"); \ | ||
| 331 | } while (0) | ||
| 332 | |||
| 333 | #define tlb_op(f, regs, arg) __tlb_op(f, "p15, 0, %0, " regs, arg) | ||
| 334 | #define tlb_l2_op(f, regs, arg) __tlb_op(f, "p15, 1, %0, " regs, arg) | ||
| 335 | |||
| 321 | static inline void local_flush_tlb_all(void) | 336 | static inline void local_flush_tlb_all(void) |
| 322 | { | 337 | { |
| 323 | const int zero = 0; | 338 | const int zero = 0; |
| @@ -326,16 +341,11 @@ static inline void local_flush_tlb_all(void) · 2 unmodified lines | |||
| 326 | if (tlb_flag(TLB_WB)) | 341 | if (tlb_flag(TLB_WB)) |
| 327 | dsb(); | 342 | dsb(); |
| 328 | 343 | ||
| 329 | if (tlb_flag(TLB_V3_FULL)) | 344 | tlb_op(TLB_V3_FULL, "c6, c0, 0", zero); |
| 330 | asm("mcr p15, 0, %0, c6, c0, 0" : : "r" (zero) : "cc"); | 345 | tlb_op(TLB_V4_U_FULL | TLB_V6_U_FULL, "c8, c7, 0", zero); |
| 331 | if (tlb_flag(TLB_V4_U_FULL | TLB_V6_U_FULL)) | 346 | tlb_op(TLB_V4_D_FULL | TLB_V6_D_FULL, "c8, c6, 0", zero); |
| 332 | asm("mcr p15, 0, %0, c8, c7, 0" : : "r" (zero) : "cc"); | 347 | tlb_op(TLB_V4_I_FULL | TLB_V6_I_FULL, "c8, c5, 0", zero); |
| 333 | if (tlb_flag(TLB_V4_D_FULL | TLB_V6_D_FULL)) | 348 | tlb_op(TLB_V7_UIS_FULL, "c8, c3, 0", zero); |
| 334 | asm("mcr p15, 0, %0, c8, c6, 0" : : "r" (zero) : "cc"); | ||
| 335 | if (tlb_flag(TLB_V4_I_FULL | TLB_V6_I_FULL)) | ||
| 336 | asm("mcr p15, 0, %0, c8, c5, 0" : : "r" (zero) : "cc"); | ||
| 337 | if (tlb_flag(TLB_V7_UIS_FULL)) | ||
| 338 | asm("mcr p15, 0, %0, c8, c3, 0" : : "r" (zero) : "cc"); | ||
| 339 | 349 | ||
| 340 | if (tlb_flag(TLB_BARRIER)) { | 350 | if (tlb_flag(TLB_BARRIER)) { |
| 341 | dsb(); | 351 | dsb(); |
| @@ -352,29 +362,23 @@ static inline void local_flush_tlb_mm(struct mm_struct *mm) · 10 unmodified lines | |||
| 352 | if (tlb_flag(TLB_WB)) | 362 | if (tlb_flag(TLB_WB)) |
| 353 | dsb(); | 363 | dsb(); |
| 354 | 364 | ||
| 355 | if (cpumask_test_cpu(get_cpu(), mm_cpumask(mm))) { | 365 | if (possible_tlb_flags & (TLB_V3_FULL|TLB_V4_U_FULL|TLB_V4_D_FULL|TLB_V4_I_FULL)) { |
| 356 | if (tlb_flag(TLB_V3_FULL)) | 366 | if (cpumask_test_cpu(get_cpu(), mm_cpumask(mm))) { |
| 357 | asm("mcr p15, 0, %0, c6, c0, 0" : : "r" (zero) : "cc"); | 367 | tlb_op(TLB_V3_FULL, "c6, c0, 0", zero); |
| 358 | if (tlb_flag(TLB_V4_U_FULL)) | 368 | tlb_op(TLB_V4_U_FULL, "c8, c7, 0", zero); |
| 359 | asm("mcr p15, 0, %0, c8, c7, 0" : : "r" (zero) : "cc"); | 369 | tlb_op(TLB_V4_D_FULL, "c8, c6, 0", zero); |
| 360 | if (tlb_flag(TLB_V4_D_FULL)) | 370 | tlb_op(TLB_V4_I_FULL, "c8, c5, 0", zero); |
| 361 | asm("mcr p15, 0, %0, c8, c6, 0" : : "r" (zero) : "cc"); | 371 | } |
| 362 | if (tlb_flag(TLB_V4_I_FULL)) | 372 | put_cpu(); |
| 363 | asm("mcr p15, 0, %0, c8, c5, 0" : : "r" (zero) : "cc"); | ||
| 364 | } | 373 | } |
| 365 | put_cpu(); | 374 | |
| 366 | 375 | tlb_op(TLB_V6_U_ASID, "c8, c7, 2", asid); | |
| 367 | if (tlb_flag(TLB_V6_U_ASID)) | 376 | tlb_op(TLB_V6_D_ASID, "c8, c6, 2", asid); |
| 368 | asm("mcr p15, 0, %0, c8, c7, 2" : : "r" (asid) : "cc"); | 377 | tlb_op(TLB_V6_I_ASID, "c8, c5, 2", asid); |
| 369 | if (tlb_flag(TLB_V6_D_ASID)) | ||
| 370 | asm("mcr p15, 0, %0, c8, c6, 2" : : "r" (asid) : "cc"); | ||
| 371 | if (tlb_flag(TLB_V6_I_ASID)) | ||
| 372 | asm("mcr p15, 0, %0, c8, c5, 2" : : "r" (asid) : "cc"); | ||
| 373 | if (tlb_flag(TLB_V7_UIS_ASID)) | ||
| 374 | #ifdef CONFIG_ARM_ERRATA_720789 | 378 | #ifdef CONFIG_ARM_ERRATA_720789 |
| 375 | asm("mcr p15, 0, %0, c8, c3, 0" : : "r" (zero) : "cc"); | 379 | tlb_op(TLB_V7_UIS_ASID, "c8, c3, 0", zero); |
| 376 | #else | 380 | #else |
| 377 | asm("mcr p15, 0, %0, c8, c3, 2" : : "r" (asid) : "cc"); | 381 | tlb_op(TLB_V7_UIS_ASID, "c8, c3, 2", asid); |
| 378 | #endif | 382 | #endif |
| 379 | 383 | ||
| 380 | if (tlb_flag(TLB_BARRIER)) | 384 | if (tlb_flag(TLB_BARRIER)) |
| @@ -392,30 +396,23 @@ local_flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr) · 11 unmodified lines | |||
| 392 | if (tlb_flag(TLB_WB)) | 396 | if (tlb_flag(TLB_WB)) |
| 393 | dsb(); | 397 | dsb(); |
| 394 | 398 | ||
| 395 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) { | 399 | if (possible_tlb_flags & (TLB_V3_PAGE|TLB_V4_U_PAGE|TLB_V4_D_PAGE|TLB_V4_I_PAGE|TLB_V4_I_FULL) && |
| 396 | if (tlb_flag(TLB_V3_PAGE)) | 400 | cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) { |
| 397 | asm("mcr p15, 0, %0, c6, c0, 0" : : "r" (uaddr) : "cc"); | 401 | tlb_op(TLB_V3_PAGE, "c6, c0, 0", uaddr); |
| 398 | if (tlb_flag(TLB_V4_U_PAGE)) | 402 | tlb_op(TLB_V4_U_PAGE, "c8, c7, 1", uaddr); |
| 399 | asm("mcr p15, 0, %0, c8, c7, 1" : : "r" (uaddr) : "cc"); | 403 | tlb_op(TLB_V4_D_PAGE, "c8, c6, 1", uaddr); |
| 400 | if (tlb_flag(TLB_V4_D_PAGE)) | 404 | tlb_op(TLB_V4_I_PAGE, "c8, c5, 1", uaddr); |
| 401 | asm("mcr p15, 0, %0, c8, c6, 1" : : "r" (uaddr) : "cc"); | ||
| 402 | if (tlb_flag(TLB_V4_I_PAGE)) | ||
| 403 | asm("mcr p15, 0, %0, c8, c5, 1" : : "r" (uaddr) : "cc"); | ||
| 404 | if (!tlb_flag(TLB_V4_I_PAGE) && tlb_flag(TLB_V4_I_FULL)) | 405 | if (!tlb_flag(TLB_V4_I_PAGE) && tlb_flag(TLB_V4_I_FULL)) |
| 405 | asm("mcr p15, 0, %0, c8, c5, 0" : : "r" (zero) : "cc"); | 406 | asm("mcr p15, 0, %0, c8, c5, 0" : : "r" (zero) : "cc"); |
| 406 | } | 407 | } |
| 407 | 408 | ||
| 408 | if (tlb_flag(TLB_V6_U_PAGE)) | 409 | tlb_op(TLB_V6_U_PAGE, "c8, c7, 1", uaddr); |
| 409 | asm("mcr p15, 0, %0, c8, c7, 1" : : "r" (uaddr) : "cc"); | 410 | tlb_op(TLB_V6_D_PAGE, "c8, c6, 1", uaddr); |
| 410 | if (tlb_flag(TLB_V6_D_PAGE)) | 411 | tlb_op(TLB_V6_I_PAGE, "c8, c5, 1", uaddr); |
| 411 | asm("mcr p15, 0, %0, c8, c6, 1" : : "r" (uaddr) : "cc"); | ||
| 412 | if (tlb_flag(TLB_V6_I_PAGE)) | ||
| 413 | asm("mcr p15, 0, %0, c8, c5, 1" : : "r" (uaddr) : "cc"); | ||
| 414 | if (tlb_flag(TLB_V7_UIS_PAGE)) | ||
| 415 | #ifdef CONFIG_ARM_ERRATA_720789 | 412 | #ifdef CONFIG_ARM_ERRATA_720789 |
| 416 | asm("mcr p15, 0, %0, c8, c3, 3" : : "r" (uaddr & PAGE_MASK) : "cc"); | 413 | tlb_op(TLB_V7_UIS_PAGE, "c8, c3, 3", uaddr & PAGE_MASK); |
| 417 | #else | 414 | #else |
| 418 | asm("mcr p15, 0, %0, c8, c3, 1" : : "r" (uaddr) : "cc"); | 415 | tlb_op(TLB_V7_UIS_PAGE, "c8, c3, 1", uaddr); |
| 419 | #endif | 416 | #endif |
| 420 | 417 | ||
| 421 | if (tlb_flag(TLB_BARRIER)) | 418 | if (tlb_flag(TLB_BARRIER)) |
| @@ -432,25 +429,17 @@ static inline void local_flush_tlb_kernel_page(unsigned long kaddr) · 10 unmodified lines | |||
| 432 | if (tlb_flag(TLB_WB)) | 429 | if (tlb_flag(TLB_WB)) |
| 433 | dsb(); | 430 | dsb(); |
| 434 | 431 | ||
| 435 | if (tlb_flag(TLB_V3_PAGE)) | 432 | tlb_op(TLB_V3_PAGE, "c6, c0, 0", kaddr); |
| 436 | asm("mcr p15, 0, %0, c6, c0, 0" : : "r" (kaddr) : "cc"); | 433 | tlb_op(TLB_V4_U_PAGE, "c8, c7, 1", kaddr); |
| 437 | if (tlb_flag(TLB_V4_U_PAGE)) | 434 | tlb_op(TLB_V4_D_PAGE, "c8, c6, 1", kaddr); |
| 438 | asm("mcr p15, 0, %0, c8, c7, 1" : : "r" (kaddr) : "cc"); | 435 | tlb_op(TLB_V4_I_PAGE, "c8, c5, 1", kaddr); |
| 439 | if (tlb_flag(TLB_V4_D_PAGE)) | ||
| 440 | asm("mcr p15, 0, %0, c8, c6, 1" : : "r" (kaddr) : "cc"); | ||
| 441 | if (tlb_flag(TLB_V4_I_PAGE)) | ||
| 442 | asm("mcr p15, 0, %0, c8, c5, 1" : : "r" (kaddr) : "cc"); | ||
| 443 | if (!tlb_flag(TLB_V4_I_PAGE) && tlb_flag(TLB_V4_I_FULL)) | 436 | if (!tlb_flag(TLB_V4_I_PAGE) && tlb_flag(TLB_V4_I_FULL)) |
| 444 | asm("mcr p15, 0, %0, c8, c5, 0" : : "r" (zero) : "cc"); | 437 | asm("mcr p15, 0, %0, c8, c5, 0" : : "r" (zero) : "cc"); |
| 445 | 438 | ||
| 446 | if (tlb_flag(TLB_V6_U_PAGE)) | 439 | tlb_op(TLB_V6_U_PAGE, "c8, c7, 1", kaddr); |
| 447 | asm("mcr p15, 0, %0, c8, c7, 1" : : "r" (kaddr) : "cc"); | 440 | tlb_op(TLB_V6_D_PAGE, "c8, c6, 1", kaddr); |
| 448 | if (tlb_flag(TLB_V6_D_PAGE)) | 441 | tlb_op(TLB_V6_I_PAGE, "c8, c5, 1", kaddr); |
| 449 | asm("mcr p15, 0, %0, c8, c6, 1" : : "r" (kaddr) : "cc"); | 442 | tlb_op(TLB_V7_UIS_PAGE, "c8, c3, 1", kaddr); |
| 450 | if (tlb_flag(TLB_V6_I_PAGE)) | ||
| 451 | asm("mcr p15, 0, %0, c8, c5, 1" : : "r" (kaddr) : "cc"); | ||
| 452 | if (tlb_flag(TLB_V7_UIS_PAGE)) | ||
| 453 | asm("mcr p15, 0, %0, c8, c3, 1" : : "r" (kaddr) : "cc"); | ||
| 454 | 443 | ||
| 455 | if (tlb_flag(TLB_BARRIER)) { | 444 | if (tlb_flag(TLB_BARRIER)) { |
| 456 | dsb(); | 445 | dsb(); |
| @@ -475,13 +464,8 @@ static inline void flush_pmd_entry(void *pmd) · 18 unmodified lines | |||
| 475 | { | 464 | { |
| 476 | const unsigned int __tlb_flag = __cpu_tlb_flags; | 465 | const unsigned int __tlb_flag = __cpu_tlb_flags; |
| 477 | 466 | ||
| 478 | if (tlb_flag(TLB_DCLEAN)) | 467 | tlb_op(TLB_DCLEAN, "c7, c10, 1 @ flush_pmd", pmd); |
| 479 | asm("mcr p15, 0, %0, c7, c10, 1 @ flush_pmd" | 468 | tlb_l2_op(TLB_L2CLEAN_FR, "c15, c9, 1 @ L2 flush_pmd", pmd); |
| 480 | : : "r" (pmd) : "cc"); | ||
| 481 | |||
| 482 | if (tlb_flag(TLB_L2CLEAN_FR)) | ||
| 483 | asm("mcr p15, 1, %0, c15, c9, 1 @ L2 flush_pmd" | ||
| 484 | : : "r" (pmd) : "cc"); | ||
| 485 | 469 | ||
| 486 | if (tlb_flag(TLB_WB)) | 470 | if (tlb_flag(TLB_WB)) |
| 487 | dsb(); | 471 | dsb(); |
| @@ -491,15 +475,11 @@ static inline void clean_pmd_entry(void *pmd) · 3 unmodified lines | |||
| 491 | { | 475 | { |
| 492 | const unsigned int __tlb_flag = __cpu_tlb_flags; | 476 | const unsigned int __tlb_flag = __cpu_tlb_flags; |
| 493 | 477 | ||
| 494 | if (tlb_flag(TLB_DCLEAN)) | 478 | tlb_op(TLB_DCLEAN, "c7, c10, 1 @ flush_pmd", pmd); |
| 495 | asm("mcr p15, 0, %0, c7, c10, 1 @ flush_pmd" | 479 | tlb_l2_op(TLB_L2CLEAN_FR, "c15, c9, 1 @ L2 flush_pmd", pmd); |
| 496 | : : "r" (pmd) : "cc"); | ||
| 497 | |||
| 498 | if (tlb_flag(TLB_L2CLEAN_FR)) | ||
| 499 | asm("mcr p15, 1, %0, c15, c9, 1 @ L2 flush_pmd" | ||
| 500 | : : "r" (pmd) : "cc"); | ||
| 501 | } | 480 | } |
| 502 | 481 | ||
| 482 | #undef tlb_op | ||
| 503 | #undef tlb_flag | 483 | #undef tlb_flag |
| 504 | #undef always_tlb_flags | 484 | #undef always_tlb_flags |
| 505 | #undef possible_tlb_flags | 485 | #undef possible_tlb_flags |
| @@ -46,7 +46,7 @@ static inline int in_exception_text(unsigned long ptr) · 45 unmodified lines | |||
| 46 | return in ? : __in_irqentry_text(ptr); | 46 | return in ? : __in_irqentry_text(ptr); |
| 47 | } | 47 | } |
| 48 | 48 | ||
| 49 | extern void __init early_trap_init(void); | 49 | extern void __init early_trap_init(void *); |
| 50 | extern void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long frame); | 50 | extern void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long frame); |
| 51 | extern void ptrace_break(struct task_struct *tsk, struct pt_regs *regs); | 51 | extern void ptrace_break(struct task_struct *tsk, struct pt_regs *regs); |
| 52 | 52 | ||
| @@ -16,8 +16,8 @@ · 15 unmodified lines | |||
| 16 | #include <asm/errno.h> | 16 | #include <asm/errno.h> |
| 17 | #include <asm/memory.h> | 17 | #include <asm/memory.h> |
| 18 | #include <asm/domain.h> | 18 | #include <asm/domain.h> |
| 19 | #include <asm/system.h> | ||
| 20 | #include <asm/unified.h> | 19 | #include <asm/unified.h> |
| 20 | #include <asm/compiler.h> | ||
| 21 | 21 | ||
| 22 | #define VERIFY_READ 0 | 22 | #define VERIFY_READ 0 |
| 23 | #define VERIFY_WRITE 1 | 23 | #define VERIFY_WRITE 1 |
| @@ -7,6 +7,8 @@ AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET) · 6 unmodified lines | |||
| 7 | 7 | ||
| 8 | ifdef CONFIG_FUNCTION_TRACER | 8 | ifdef CONFIG_FUNCTION_TRACER |
| 9 | CFLAGS_REMOVE_ftrace.o = -pg | 9 | CFLAGS_REMOVE_ftrace.o = -pg |
| 10 | CFLAGS_REMOVE_insn.o = -pg | ||
| 11 | CFLAGS_REMOVE_patch.o = -pg | ||
| 10 | endif | 12 | endif |
| 11 | 13 | ||
| 12 | CFLAGS_REMOVE_return_address.o = -pg | 14 | CFLAGS_REMOVE_return_address.o = -pg |
| @@ -14,30 +16,29 @@ CFLAGS_REMOVE_return_address.o = -pg · 1 unmodified line | |||
| 14 | # Object file lists. | 16 | # Object file lists. |
| 15 | 17 | ||
| 16 | obj-y := elf.o entry-armv.o entry-common.o irq.o opcodes.o \ | 18 | obj-y := elf.o entry-armv.o entry-common.o irq.o opcodes.o \ |
| 17 | process.o ptrace.o return_address.o setup.o signal.o \ | 19 | process.o ptrace.o return_address.o sched_clock.o \ |
| 18 | sys_arm.o stacktrace.o time.o traps.o | 20 | setup.o signal.o stacktrace.o sys_arm.o time.o traps.o |
| 19 | 21 | ||
| 20 | obj-$(CONFIG_DEPRECATED_PARAM_STRUCT) += compat.o | 22 | obj-$(CONFIG_DEPRECATED_PARAM_STRUCT) += compat.o |
| 21 | 23 | ||
| 22 | obj-$(CONFIG_LEDS) += leds.o | 24 | obj-$(CONFIG_LEDS) += leds.o |
| 23 | obj-$(CONFIG_OC_ETM) += etm.o | 25 | obj-$(CONFIG_OC_ETM) += etm.o |
| 24 | 26 | obj-$(CONFIG_CPU_IDLE) += cpuidle.o | |
| 25 | obj-$(CONFIG_ISA_DMA_API) += dma.o | 27 | obj-$(CONFIG_ISA_DMA_API) += dma.o |
| 26 | obj-$(CONFIG_ARCH_ACORN) += ecard.o | ||
| 27 | obj-$(CONFIG_FIQ) += fiq.o fiqasm.o | 28 | obj-$(CONFIG_FIQ) += fiq.o fiqasm.o |
| 28 | obj-$(CONFIG_MODULES) += armksyms.o module.o | 29 | obj-$(CONFIG_MODULES) += armksyms.o module.o |
| 29 | obj-$(CONFIG_ARTHUR) += arthur.o | 30 | obj-$(CONFIG_ARTHUR) += arthur.o |
| 30 | obj-$(CONFIG_ISA_DMA) += dma-isa.o | 31 | obj-$(CONFIG_ISA_DMA) += dma-isa.o |
| 31 | obj-$(CONFIG_PCI) += bios32.o isa.o | 32 | obj-$(CONFIG_PCI) += bios32.o isa.o |
| 32 | obj-$(CONFIG_ARM_CPU_SUSPEND) += sleep.o suspend.o | 33 | obj-$(CONFIG_ARM_CPU_SUSPEND) += sleep.o suspend.o |
| 33 | obj-$(CONFIG_HAVE_SCHED_CLOCK) += sched_clock.o | ||
| 34 | obj-$(CONFIG_SMP) += smp.o smp_tlb.o | 34 | obj-$(CONFIG_SMP) += smp.o smp_tlb.o |
| 35 | obj-$(CONFIG_HAVE_ARM_SCU) += smp_scu.o | 35 | obj-$(CONFIG_HAVE_ARM_SCU) += smp_scu.o |
| 36 | obj-$(CONFIG_HAVE_ARM_TWD) += smp_twd.o | 36 | obj-$(CONFIG_HAVE_ARM_TWD) += smp_twd.o |
| 37 | obj-$(CONFIG_DYNAMIC_FTRACE) += ftrace.o | 37 | obj-$(CONFIG_DYNAMIC_FTRACE) += ftrace.o insn.o |
| 38 | obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o | 38 | obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o insn.o |
| 39 | obj-$(CONFIG_JUMP_LABEL) += jump_label.o insn.o patch.o | ||
| 39 | obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o | 40 | obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o |
| 40 | obj-$(CONFIG_KPROBES) += kprobes.o kprobes-common.o | 41 | obj-$(CONFIG_KPROBES) += kprobes.o kprobes-common.o patch.o |
| 41 | ifdef CONFIG_THUMB2_KERNEL | 42 | ifdef CONFIG_THUMB2_KERNEL |
| 42 | obj-$(CONFIG_KPROBES) += kprobes-thumb.o | 43 | obj-$(CONFIG_KPROBES) += kprobes-thumb.o |
| 43 | else | 44 | else |
| @@ -62,9 +63,6 @@ obj-$(CONFIG_SWP_EMULATE) += swp_emulate.o · 18 unmodified lines | |||
| 62 | CFLAGS_swp_emulate.o := -Wa,-march=armv7-a | 63 | CFLAGS_swp_emulate.o := -Wa,-march=armv7-a |
| 63 | obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o | 64 | obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o |
| 64 | 65 | ||
| 65 | obj-$(CONFIG_CRUNCH) += crunch.o crunch-bits.o | ||
| 66 | AFLAGS_crunch-bits.o := -Wa,-mcpu=ep9312 | ||
| 67 | |||
| 68 | obj-$(CONFIG_CPU_XSCALE) += xscale-cp0.o | 66 | obj-$(CONFIG_CPU_XSCALE) += xscale-cp0.o |
| 69 | obj-$(CONFIG_CPU_XSC3) += xscale-cp0.o | 67 | obj-$(CONFIG_CPU_XSC3) += xscale-cp0.o |
| 70 | obj-$(CONFIG_CPU_MOHAWK) += xscale-cp0.o | 68 | obj-$(CONFIG_CPU_MOHAWK) += xscale-cp0.o |
| @@ -18,7 +18,6 @@ · 17 unmodified lines | |||
| 18 | #include <linux/io.h> | 18 | #include <linux/io.h> |
| 19 | 19 | ||
| 20 | #include <asm/checksum.h> | 20 | #include <asm/checksum.h> |
| 21 | #include <asm/system.h> | ||
| 22 | #include <asm/ftrace.h> | 21 | #include <asm/ftrace.h> |
| 23 | 22 | ||
| 24 | /* | 23 | /* |
| @@ -16,7 +16,6 @@ · 15 unmodified lines | |||
| 16 | #include <asm/mach/pci.h> | 16 | #include <asm/mach/pci.h> |
| 17 | 17 | ||
| 18 | static int debug_pci; | 18 | static int debug_pci; |
| 19 | static int use_firmware; | ||
| 20 | 19 | ||
| 21 | /* | 20 | /* |
| 22 | * We can't use pci_find_device() here since we are | 21 | * We can't use pci_find_device() here since we are |
| @@ -294,35 +293,12 @@ static inline int pdev_bad_for_parity(struct pci_dev *dev) · 271 unmodified lines | |||
| 294 | 293 | ||
| 295 | } | 294 | } |
| 296 | 295 | ||
| 297 | /* | ||
| 298 | * Adjust the device resources from bus-centric to Linux-centric. | ||
| 299 | */ | ||
| 300 | static void __devinit | ||
| 301 | pdev_fixup_device_resources(struct pci_sys_data *root, struct pci_dev *dev) | ||
| 302 | { | ||
| 303 | resource_size_t offset; | ||
| 304 | int i; | ||
| 305 | |||
| 306 | for (i = 0; i < PCI_NUM_RESOURCES; i++) { | ||
| 307 | if (dev->resource[i].start == 0) | ||
| 308 | continue; | ||
| 309 | if (dev->resource[i].flags & IORESOURCE_MEM) | ||
| 310 | offset = root->mem_offset; | ||
| 311 | else | ||
| 312 | offset = root->io_offset; | ||
| 313 | |||
| 314 | dev->resource[i].start += offset; | ||
| 315 | dev->resource[i].end += offset; | ||
| 316 | } | ||
| 317 | } | ||
| 318 | |||
| 319 | /* | 296 | /* |
| 320 | * pcibios_fixup_bus - Called after each bus is probed, | 297 | * pcibios_fixup_bus - Called after each bus is probed, |
| 321 | * but before its children are examined. | 298 | * but before its children are examined. |
| 322 | */ | 299 | */ |
| 323 | void pcibios_fixup_bus(struct pci_bus *bus) | 300 | void pcibios_fixup_bus(struct pci_bus *bus) |
| 324 | { | 301 | { |
| 325 | struct pci_sys_data *root = bus->sysdata; | ||
| 326 | struct pci_dev *dev; | 302 | struct pci_dev *dev; |
| 327 | u16 features = PCI_COMMAND_SERR | PCI_COMMAND_PARITY | PCI_COMMAND_FAST_BACK; | 303 | u16 features = PCI_COMMAND_SERR | PCI_COMMAND_PARITY | PCI_COMMAND_FAST_BACK; |
| 328 | 304 | ||
| @@ -333,8 +309,6 @@ void pcibios_fixup_bus(struct pci_bus *bus) · 4 unmodified lines | |||
| 333 | list_for_each_entry(dev, &bus->devices, bus_list) { | 309 | list_for_each_entry(dev, &bus->devices, bus_list) { |
| 334 | u16 status; | 310 | u16 status; |
| 335 | 311 | ||
| 336 | pdev_fixup_device_resources(root, dev); | ||
| 337 | |||
| 338 | pci_read_config_word(dev, PCI_STATUS, &status); | 312 | pci_read_config_word(dev, PCI_STATUS, &status); |
| 339 | 313 | ||
| 340 | /* | 314 | /* |
| @@ -399,43 +373,6 @@ void pcibios_fixup_bus(struct pci_bus *bus) · 58 unmodified lines | |||
| 399 | EXPORT_SYMBOL(pcibios_fixup_bus); | 373 | EXPORT_SYMBOL(pcibios_fixup_bus); |
| 400 | #endif | 374 | #endif |
| 401 | 375 | ||
| 402 | /* | ||
| 403 | * Convert from Linux-centric to bus-centric addresses for bridge devices. | ||
| 404 | */ | ||
| 405 | void | ||
| 406 | pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, | ||
| 407 | struct resource *res) | ||
| 408 | { | ||
| 409 | struct pci_sys_data *root = dev->sysdata; | ||
| 410 | unsigned long offset = 0; | ||
| 411 | |||
| 412 | if (res->flags & IORESOURCE_IO) | ||
| 413 | offset = root->io_offset; | ||
| 414 | if (res->flags & IORESOURCE_MEM) | ||
| 415 | offset = root->mem_offset; | ||
| 416 | |||
| 417 | region->start = res->start - offset; | ||
| 418 | region->end = res->end - offset; | ||
| 419 | } | ||
| 420 | EXPORT_SYMBOL(pcibios_resource_to_bus); | ||
| 421 | |||
| 422 | void __devinit | ||
| 423 | pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, | ||
| 424 | struct pci_bus_region *region) | ||
| 425 | { | ||
| 426 | struct pci_sys_data *root = dev->sysdata; | ||
| 427 | unsigned long offset = 0; | ||
| 428 | |||
| 429 | if (res->flags & IORESOURCE_IO) | ||
| 430 | offset = root->io_offset; | ||
| 431 | if (res->flags & IORESOURCE_MEM) | ||
| 432 | offset = root->mem_offset; | ||
| 433 | |||
| 434 | res->start = region->start + offset; | ||
| 435 | res->end = region->end + offset; | ||
| 436 | } | ||
| 437 | EXPORT_SYMBOL(pcibios_bus_to_resource); | ||
| 438 | |||
| 439 | /* | 376 | /* |
| 440 | * Swizzle the device pin each time we cross a bridge. | 377 | * Swizzle the device pin each time we cross a bridge. |
| 441 | * This might update pin and returns the slot number. | 378 | * This might update pin and returns the slot number. |
| @@ -497,10 +434,10 @@ static void __init pcibios_init_hw(struct hw_pci *hw) · 55 unmodified lines | |||
| 497 | 434 | ||
| 498 | if (ret > 0) { | 435 | if (ret > 0) { |
| 499 | if (list_empty(&sys->resources)) { | 436 | if (list_empty(&sys->resources)) { |
| 500 | pci_add_resource(&sys->resources, | 437 | pci_add_resource_offset(&sys->resources, |
| 501 | &ioport_resource); | 438 | &ioport_resource, sys->io_offset); |
| 502 | pci_add_resource(&sys->resources, | 439 | pci_add_resource_offset(&sys->resources, |
| 503 | &iomem_resource); | 440 | &iomem_resource, sys->mem_offset); |
| 504 | } | 441 | } |
| 505 | 442 | ||
| 506 | sys->bus = hw->scan(nr, sys); | 443 | sys->bus = hw->scan(nr, sys); |
| @@ -525,6 +462,7 @@ void __init pci_common_init(struct hw_pci *hw) · 18 unmodified lines | |||
| 525 | 462 | ||
| 526 | INIT_LIST_HEAD(&hw->buses); | 463 | INIT_LIST_HEAD(&hw->buses); |
| 527 | 464 | ||
| 465 | pci_add_flags(PCI_REASSIGN_ALL_RSRC); | ||
| 528 | if (hw->preinit) | 466 | if (hw->preinit) |
| 529 | hw->preinit(); | 467 | hw->preinit(); |
| 530 | pcibios_init_hw(hw); | 468 | pcibios_init_hw(hw); |
| @@ -536,7 +474,7 @@ void __init pci_common_init(struct hw_pci *hw) · 5 unmodified lines | |||
| 536 | list_for_each_entry(sys, &hw->buses, node) { | 474 | list_for_each_entry(sys, &hw->buses, node) { |
| 537 | struct pci_bus *bus = sys->bus; | 475 | struct pci_bus *bus = sys->bus; |
| 538 | 476 | ||
| 539 | if (!use_firmware) { | 477 | if (!pci_has_flag(PCI_PROBE_ONLY)) { |
| 540 | /* | 478 | /* |
| 541 | * Size the bridge windows. | 479 | * Size the bridge windows. |
| 542 | */ | 480 | */ |
| @@ -573,7 +511,7 @@ char * __init pcibios_setup(char *str) · 30 unmodified lines | |||
| 573 | debug_pci = 1; | 511 | debug_pci = 1; |
| 574 | return NULL; | 512 | return NULL; |
| 575 | } else if (!strcmp(str, "firmware")) { | 513 | } else if (!strcmp(str, "firmware")) { |
| 576 | use_firmware = 1; | 514 | pci_add_flags(PCI_PROBE_ONLY); |
| 577 | return NULL; | 515 | return NULL; |
| 578 | } | 516 | } |
| 579 | return str; | 517 | return str; |
| @@ -0,0 +1,21 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2012 Linaro Ltd. | ||
| 3 | * | ||
| 4 | * The code contained herein is licensed under the GNU General Public | ||
| 5 | * License. You may obtain a copy of the GNU General Public License | ||
| 6 | * Version 2 or later at the following locations: | ||
| 7 | * | ||
| 8 | * http://www.opensource.org/licenses/gpl-license.html | ||
| 9 | * http://www.gnu.org/copyleft/gpl.html | ||
| 10 | */ | ||
| 11 | |||
| 12 | #include <linux/cpuidle.h> | ||
| 13 | #include <asm/proc-fns.h> | ||
| 14 | |||
| 15 | int arm_cpuidle_simple_enter(struct cpuidle_device *dev, | ||
| 16 | struct cpuidle_driver *drv, int index) | ||
| 17 | { | ||
| 18 | cpu_do_idle(); | ||
| 19 | |||
| 20 | return index; | ||
| 21 | } | ||
| @@ -10,6 +10,7 @@ · 9 unmodified lines | |||
| 10 | * 32-bit debugging code | 10 | * 32-bit debugging code |
| 11 | */ | 11 | */ |
| 12 | #include <linux/linkage.h> | 12 | #include <linux/linkage.h> |
| 13 | #include <asm/assembler.h> | ||
| 13 | 14 | ||
| 14 | .text | 15 | .text |
| 15 | 16 | ||
| @@ -100,7 +101,7 @@ · 84 unmodified lines | |||
| 100 | 101 | ||
| 101 | #endif /* CONFIG_CPU_V6 */ | 102 | #endif /* CONFIG_CPU_V6 */ |
| 102 | 103 | ||
| 103 | #else | 104 | #elif !defined(CONFIG_DEBUG_SEMIHOSTING) |
| 104 | #include <mach/debug-macro.S> | 105 | #include <mach/debug-macro.S> |
| 105 | #endif /* CONFIG_DEBUG_ICEDCC */ | 106 | #endif /* CONFIG_DEBUG_ICEDCC */ |
| 106 | 107 | ||
| @@ -155,6 +156,8 @@ hexbuf: .space 16 · 48 unmodified lines | |||
| 155 | 156 | ||
| 156 | .ltorg | 157 | .ltorg |
| 157 | 158 | ||
| 159 | #ifndef CONFIG_DEBUG_SEMIHOSTING | ||
| 160 | |||
| 158 | ENTRY(printascii) | 161 | ENTRY(printascii) |
| 159 | addruart_current r3, r1, r2 | 162 | addruart_current r3, r1, r2 |
| 160 | b 2f | 163 | b 2f |
| @@ -177,3 +180,24 @@ ENTRY(printch) · 16 unmodified lines | |||
| 177 | mov r0, #0 | 180 | mov r0, #0 |
| 178 | b 1b | 181 | b 1b |
| 179 | ENDPROC(printch) | 182 | ENDPROC(printch) |
| 183 | |||
| 184 | #else | ||
| 185 | |||
| 186 | ENTRY(printascii) | ||
| 187 | mov r1, r0 | ||
| 188 | mov r0, #0x04 @ SYS_WRITE0 | ||
| 189 | ARM( svc #0x123456 ) | ||
| 190 | THUMB( svc #0xab ) | ||
| 191 | mov pc, lr | ||
| 192 | ENDPROC(printascii) | ||
| 193 | |||
| 194 | ENTRY(printch) | ||
| 195 | adr r1, hexbuf | ||
| 196 | strb r0, [r1] | ||
| 197 | mov r0, #0x03 @ SYS_WRITEC | ||
| 198 | ARM( svc #0x123456 ) | ||
| 199 | THUMB( svc #0xab ) | ||
| 200 | mov pc, lr | ||
| 201 | ENDPROC(printch) | ||
| 202 | |||
| 203 | #endif | ||
| @@ -3,6 +3,7 @@ · 2 unmodified lines | |||
| 3 | #include <linux/personality.h> | 3 | #include <linux/personality.h> |
| 4 | #include <linux/binfmts.h> | 4 | #include <linux/binfmts.h> |
| 5 | #include <linux/elf.h> | 5 | #include <linux/elf.h> |
| 6 | #include <asm/system_info.h> | ||
| 6 | 7 | ||
| 7 | int elf_check_arch(const struct elf32_hdr *x) | 8 | int elf_check_arch(const struct elf32_hdr *x) |
| 8 | { | 9 | { |
| @@ -15,16 +15,19 @@ · 14 unmodified lines | |||
| 15 | * that causes it to save wrong values... Be aware! | 15 | * that causes it to save wrong values... Be aware! |
| 16 | */ | 16 | */ |
| 17 | 17 | ||
| 18 | #include <asm/assembler.h> | ||
| 18 | #include <asm/memory.h> | 19 | #include <asm/memory.h> |
| 19 | #include <asm/glue-df.h> | 20 | #include <asm/glue-df.h> |
| 20 | #include <asm/glue-pf.h> | 21 | #include <asm/glue-pf.h> |
| 21 | #include <asm/vfpmacros.h> | 22 | #include <asm/vfpmacros.h> |
| 23 | #ifndef CONFIG_MULTI_IRQ_HANDLER | ||
| 22 | #include <mach/entry-macro.S> | 24 | #include <mach/entry-macro.S> |
| 25 | #endif | ||
| 23 | #include <asm/thread_notify.h> | 26 | #include <asm/thread_notify.h> |
| 24 | #include <asm/unwind.h> | 27 | #include <asm/unwind.h> |
| 25 | #include <asm/unistd.h> | 28 | #include <asm/unistd.h> |
| 26 | #include <asm/tls.h> | 29 | #include <asm/tls.h> |
| 27 | #include <asm/system.h> | 30 | #include <asm/system_info.h> |
| 28 | 31 | ||
| 29 | #include "entry-header.S" | 32 | #include "entry-header.S" |
| 30 | #include <asm/entry-macro-multi.S> | 33 | #include <asm/entry-macro-multi.S> |
| @@ -1101,7 +1104,6 @@ __stubs_start: · 1070 unmodified lines | |||
| 1101 | * get out of that mode without clobbering one register. | 1104 | * get out of that mode without clobbering one register. |
| 1102 | */ | 1105 | */ |
| 1103 | vector_fiq: | 1106 | vector_fiq: |
| 1104 | disable_fiq | ||
| 1105 | subs pc, lr, #4 | 1107 | subs pc, lr, #4 |
| 1106 | 1108 | ||
| 1107 | /*============================================================================= | 1109 | /*============================================================================= |
| @@ -10,9 +10,15 @@ · 9 unmodified lines | |||
| 10 | 10 | ||
| 11 | #include <asm/unistd.h> | 11 | #include <asm/unistd.h> |
| 12 | #include <asm/ftrace.h> | 12 | #include <asm/ftrace.h> |
| 13 | #include <mach/entry-macro.S> | ||
| 14 | #include <asm/unwind.h> | 13 | #include <asm/unwind.h> |
| 15 | 14 | ||
| 15 | #ifdef CONFIG_NEED_RET_TO_USER | ||
| 16 | #include <mach/entry-macro.S> | ||
| 17 | #else | ||
| 18 | .macro arch_ret_to_user, tmp1, tmp2 | ||
| 19 | .endm | ||
| 20 | #endif | ||
| 21 | |||
| 16 | #include "entry-header.S" | 22 | #include "entry-header.S" |
| 17 | 23 | ||
| 18 | 24 | ||
| @@ -42,9 +42,9 @@ · 41 unmodified lines | |||
| 42 | #include <linux/seq_file.h> | 42 | #include <linux/seq_file.h> |
| 43 | 43 | ||
| 44 | #include <asm/cacheflush.h> | 44 | #include <asm/cacheflush.h> |
| 45 | #include <asm/cp15.h> | ||
| 45 | #include <asm/fiq.h> | 46 | #include <asm/fiq.h> |
| 46 | #include <asm/irq.h> | 47 | #include <asm/irq.h> |
| 47 | #include <asm/system.h> | ||
| 48 | #include <asm/traps.h> | 48 | #include <asm/traps.h> |
| 49 | 49 | ||
| 50 | static unsigned long no_fiq_insn; | 50 | static unsigned long no_fiq_insn; |
| @@ -16,10 +16,13 @@ · 15 unmodified lines | |||
| 16 | #include <linux/uaccess.h> | 16 | #include <linux/uaccess.h> |
| 17 | 17 | ||
| 18 | #include <asm/cacheflush.h> | 18 | #include <asm/cacheflush.h> |
| 19 | #include <asm/opcodes.h> | ||
| 19 | #include <asm/ftrace.h> | 20 | #include <asm/ftrace.h> |
| 20 | 21 | ||
| 22 | #include "insn.h" | ||
| 23 | |||
| 21 | #ifdef CONFIG_THUMB2_KERNEL | 24 | #ifdef CONFIG_THUMB2_KERNEL |
| 22 | #define NOP 0xeb04f85d /* pop.w {lr} */ | 25 | #define NOP 0xf85deb04 /* pop.w {lr} */ |
| 23 | #else | 26 | #else |
| 24 | #define NOP 0xe8bd4000 /* pop {lr} */ | 27 | #define NOP 0xe8bd4000 /* pop {lr} */ |
| 25 | #endif | 28 | #endif |
| @@ -60,76 +63,31 @@ static unsigned long adjust_address(struct dyn_ftrace *rec, unsigned long addr) · 34 unmodified lines | |||
| 60 | } | 63 | } |
| 61 | #endif | 64 | #endif |
| 62 | 65 | ||
| 63 | #ifdef CONFIG_THUMB2_KERNEL | ||
| 64 | static unsigned long ftrace_gen_branch(unsigned long pc, unsigned long addr, | ||
| 65 | bool link) | ||
| 66 | { | ||
| 67 | unsigned long s, j1, j2, i1, i2, imm10, imm11; | ||
| 68 | unsigned long first, second; | ||
| 69 | long offset; | ||
| 70 | |||
| 71 | offset = (long)addr - (long)(pc + 4); | ||
| 72 | if (offset < -16777216 || offset > 16777214) { | ||
| 73 | WARN_ON_ONCE(1); | ||
| 74 | return 0; | ||
| 75 | } | ||
| 76 | |||
| 77 | s = (offset >> 24) & 0x1; | ||
| 78 | i1 = (offset >> 23) & 0x1; | ||
| 79 | i2 = (offset >> 22) & 0x1; | ||
| 80 | imm10 = (offset >> 12) & 0x3ff; | ||
| 81 | imm11 = (offset >> 1) & 0x7ff; | ||
| 82 | |||
| 83 | j1 = (!i1) ^ s; | ||
| 84 | j2 = (!i2) ^ s; | ||
| 85 | |||
| 86 | first = 0xf000 | (s << 10) | imm10; | ||
| 87 | second = 0x9000 | (j1 << 13) | (j2 << 11) | imm11; | ||
| 88 | if (link) | ||
| 89 | second |= 1 << 14; | ||
| 90 | |||
| 91 | return (second << 16) | first; | ||
| 92 | } | ||
| 93 | #else | ||
| 94 | static unsigned long ftrace_gen_branch(unsigned long pc, unsigned long addr, | ||
| 95 | bool link) | ||
| 96 | { | ||
| 97 | unsigned long opcode = 0xea000000; | ||
| 98 | long offset; | ||
| 99 | |||
| 100 | if (link) | ||
| 101 | opcode |= 1 << 24; | ||
| 102 | |||
| 103 | offset = (long)addr - (long)(pc + 8); | ||
| 104 | if (unlikely(offset < -33554432 || offset > 33554428)) { | ||
| 105 | /* Can't generate branches that far (from ARM ARM). Ftrace | ||
| 106 | * doesn't generate branches outside of kernel text. | ||
| 107 | */ | ||
| 108 | WARN_ON_ONCE(1); | ||
| 109 | return 0; | ||
| 110 | } | ||
| 111 | |||
| 112 | offset = (offset >> 2) & 0x00ffffff; | ||
| 113 | |||
| 114 | return opcode | offset; | ||
| 115 | } | ||
| 116 | #endif | ||
| 117 | |||
| 118 | static unsigned long ftrace_call_replace(unsigned long pc, unsigned long addr) | 66 | static unsigned long ftrace_call_replace(unsigned long pc, unsigned long addr) |
| 119 | { | 67 | { |
| 120 | return ftrace_gen_branch(pc, addr, true); | 68 | return arm_gen_branch_link(pc, addr); |
| 121 | } | 69 | } |
| 122 | 70 | ||
| 123 | static int ftrace_modify_code(unsigned long pc, unsigned long old, | 71 | static int ftrace_modify_code(unsigned long pc, unsigned long old, |
| 124 | unsigned long new) | 72 | unsigned long new, bool validate) |
| 125 | { | 73 | { |
| 126 | unsigned long replaced; | 74 | unsigned long replaced; |
| 127 | 75 | ||
| 128 | if (probe_kernel_read(&replaced, (void *)pc, MCOUNT_INSN_SIZE)) | 76 | if (IS_ENABLED(CONFIG_THUMB2_KERNEL)) { |
| 129 | return -EFAULT; | 77 | old = __opcode_to_mem_thumb32(old); |
| 78 | new = __opcode_to_mem_thumb32(new); | ||
| 79 | } else { | ||
| 80 | old = __opcode_to_mem_arm(old); | ||
| 81 | new = __opcode_to_mem_arm(new); | ||
| 82 | } | ||
| 130 | 83 | ||
| 131 | if (replaced != old) | 84 | if (validate) { |
| 132 | return -EINVAL; | 85 | if (probe_kernel_read(&replaced, (void *)pc, MCOUNT_INSN_SIZE)) |
| 86 | return -EFAULT; | ||
| 87 | |||
| 88 | if (replaced != old) | ||
| 89 | return -EINVAL; | ||
| 90 | } | ||
| 133 | 91 | ||
| 134 | if (probe_kernel_write((void *)pc, &new, MCOUNT_INSN_SIZE)) | 92 | if (probe_kernel_write((void *)pc, &new, MCOUNT_INSN_SIZE)) |
| 135 | return -EPERM; | 93 | return -EPERM; |
| @@ -141,23 +99,21 @@ static int ftrace_modify_code(unsigned long pc, unsigned long old, · 5 unmodified lines | |||
| 141 | 99 | ||
| 142 | int ftrace_update_ftrace_func(ftrace_func_t func) | 100 | int ftrace_update_ftrace_func(ftrace_func_t func) |
| 143 | { | 101 | { |
| 144 | unsigned long pc, old; | 102 | unsigned long pc; |
| 145 | unsigned long new; | 103 | unsigned long new; |
| 146 | int ret; | 104 | int ret; |
| 147 | 105 | ||
| 148 | pc = (unsigned long)&ftrace_call; | 106 | pc = (unsigned long)&ftrace_call; |
| 149 | memcpy(&old, &ftrace_call, MCOUNT_INSN_SIZE); | ||
| 150 | new = ftrace_call_replace(pc, (unsigned long)func); | 107 | new = ftrace_call_replace(pc, (unsigned long)func); |
| 151 | 108 | ||
| 152 | ret = ftrace_modify_code(pc, old, new); | 109 | ret = ftrace_modify_code(pc, 0, new, false); |
| 153 | 110 | ||
| 154 | #ifdef CONFIG_OLD_MCOUNT | 111 | #ifdef CONFIG_OLD_MCOUNT |
| 155 | if (!ret) { | 112 | if (!ret) { |
| 156 | pc = (unsigned long)&ftrace_call_old; | 113 | pc = (unsigned long)&ftrace_call_old; |
| 157 | memcpy(&old, &ftrace_call_old, MCOUNT_INSN_SIZE); | ||
| 158 | new = ftrace_call_replace(pc, (unsigned long)func); | 114 | new = ftrace_call_replace(pc, (unsigned long)func); |
| 159 | 115 | ||
| 160 | ret = ftrace_modify_code(pc, old, new); | 116 | ret = ftrace_modify_code(pc, 0, new, false); |
| 161 | } | 117 | } |
| 162 | #endif | 118 | #endif |
| 163 | 119 | ||
| @@ -172,7 +128,7 @@ int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) · 8 unmodified lines | |||
| 172 | old = ftrace_nop_replace(rec); | 128 | old = ftrace_nop_replace(rec); |
| 173 | new = ftrace_call_replace(ip, adjust_address(rec, addr)); | 129 | new = ftrace_call_replace(ip, adjust_address(rec, addr)); |
| 174 | 130 | ||
| 175 | return ftrace_modify_code(rec->ip, old, new); | 131 | return ftrace_modify_code(rec->ip, old, new, true); |
| 176 | } | 132 | } |
| 177 | 133 | ||
| 178 | int ftrace_make_nop(struct module *mod, | 134 | int ftrace_make_nop(struct module *mod, |
| @@ -185,7 +141,7 @@ int ftrace_make_nop(struct module *mod, · 6 unmodified lines | |||
| 185 | 141 | ||
| 186 | old = ftrace_call_replace(ip, adjust_address(rec, addr)); | 142 | old = ftrace_call_replace(ip, adjust_address(rec, addr)); |
| 187 | new = ftrace_nop_replace(rec); | 143 | new = ftrace_nop_replace(rec); |
| 188 | ret = ftrace_modify_code(ip, old, new); | 144 | ret = ftrace_modify_code(ip, old, new, true); |
| 189 | 145 | ||
| 190 | #ifdef CONFIG_OLD_MCOUNT | 146 | #ifdef CONFIG_OLD_MCOUNT |
| 191 | if (ret == -EINVAL && addr == MCOUNT_ADDR) { | 147 | if (ret == -EINVAL && addr == MCOUNT_ADDR) { |
| @@ -193,7 +149,7 @@ int ftrace_make_nop(struct module *mod, · 1 unmodified line | |||
| 193 | 149 | ||
| 194 | old = ftrace_call_replace(ip, adjust_address(rec, addr)); | 150 | old = ftrace_call_replace(ip, adjust_address(rec, addr)); |
| 195 | new = ftrace_nop_replace(rec); | 151 | new = ftrace_nop_replace(rec); |
| 196 | ret = ftrace_modify_code(ip, old, new); | 152 | ret = ftrace_modify_code(ip, old, new, true); |
| 197 | } | 153 | } |
| 198 | #endif | 154 | #endif |
| 199 | 155 | ||
| @@ -249,12 +205,12 @@ static int __ftrace_modify_caller(unsigned long *callsite, · 49 unmodified lines | |||
| 249 | { | 205 | { |
| 250 | unsigned long caller_fn = (unsigned long) func; | 206 | unsigned long caller_fn = (unsigned long) func; |
| 251 | unsigned long pc = (unsigned long) callsite; | 207 | unsigned long pc = (unsigned long) callsite; |
| 252 | unsigned long branch = ftrace_gen_branch(pc, caller_fn, false); | 208 | unsigned long branch = arm_gen_branch(pc, caller_fn); |
| 253 | unsigned long nop = 0xe1a00000; /* mov r0, r0 */ | 209 | unsigned long nop = 0xe1a00000; /* mov r0, r0 */ |
| 254 | unsigned long old = enable ? nop : branch; | 210 | unsigned long old = enable ? nop : branch; |
| 255 | unsigned long new = enable ? branch : nop; | 211 | unsigned long new = enable ? branch : nop; |
| 256 | 212 | ||
| 257 | return ftrace_modify_code(pc, old, new); | 213 | return ftrace_modify_code(pc, old, new, true); |
| 258 | } | 214 | } |
| 259 | 215 | ||
| 260 | static int ftrace_modify_graph_caller(bool enable) | 216 | static int ftrace_modify_graph_caller(bool enable) |
| @@ -17,8 +17,8 @@ · 16 unmodified lines | |||
| 17 | #include <asm/assembler.h> | 17 | #include <asm/assembler.h> |
| 18 | #include <asm/ptrace.h> | 18 | #include <asm/ptrace.h> |
| 19 | #include <asm/asm-offsets.h> | 19 | #include <asm/asm-offsets.h> |
| 20 | #include <asm/cp15.h> | ||
| 20 | #include <asm/thread_info.h> | 21 | #include <asm/thread_info.h> |
| 21 | #include <asm/system.h> | ||
| 22 | 22 | ||
| 23 | /* | 23 | /* |
| 24 | * Kernel startup entry point. | 24 | * Kernel startup entry point. |
| @@ -15,12 +15,12 @@ · 14 unmodified lines | |||
| 15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
| 16 | 16 | ||
| 17 | #include <asm/assembler.h> | 17 | #include <asm/assembler.h> |
| 18 | #include <asm/cp15.h> | ||
| 18 | #include <asm/domain.h> | 19 | #include <asm/domain.h> |
| 19 | #include <asm/ptrace.h> | 20 | #include <asm/ptrace.h> |
| 20 | #include <asm/asm-offsets.h> | 21 | #include <asm/asm-offsets.h> |
| 21 | #include <asm/memory.h> | 22 | #include <asm/memory.h> |
| 22 | #include <asm/thread_info.h> | 23 | #include <asm/thread_info.h> |
| 23 | #include <asm/system.h> | ||
| 24 | #include <asm/pgtable.h> | 24 | #include <asm/pgtable.h> |
| 25 | 25 | ||
| 26 | #ifdef CONFIG_DEBUG_LL | 26 | #ifdef CONFIG_DEBUG_LL |
| @@ -265,7 +265,7 @@ __create_page_tables: · 238 unmodified lines | |||
| 265 | str r6, [r3] | 265 | str r6, [r3] |
| 266 | 266 | ||
| 267 | #ifdef CONFIG_DEBUG_LL | 267 | #ifdef CONFIG_DEBUG_LL |
| 268 | #ifndef CONFIG_DEBUG_ICEDCC | 268 | #if !defined(CONFIG_DEBUG_ICEDCC) && !defined(CONFIG_DEBUG_SEMIHOSTING) |
| 269 | /* | 269 | /* |
| 270 | * Map in IO space for serial debugging. | 270 | * Map in IO space for serial debugging. |
| 271 | * This allows debug messages to be output | 271 | * This allows debug messages to be output |
| @@ -297,10 +297,10 @@ __create_page_tables: · 25 unmodified lines | |||
| 297 | cmp r0, r6 | 297 | cmp r0, r6 |
| 298 | blo 1b | 298 | blo 1b |
| 299 | 299 | ||
| 300 | #else /* CONFIG_DEBUG_ICEDCC */ | 300 | #else /* CONFIG_DEBUG_ICEDCC || CONFIG_DEBUG_SEMIHOSTING */ |
| 301 | /* we don't need any serial debugging mappings for ICEDCC */ | 301 | /* we don't need any serial debugging mappings */ |
| 302 | ldr r7, [r10, #PROCINFO_IO_MMUFLAGS] @ io_mmuflags | 302 | ldr r7, [r10, #PROCINFO_IO_MMUFLAGS] @ io_mmuflags |
| 303 | #endif /* !CONFIG_DEBUG_ICEDCC */ | 303 | #endif |
| 304 | 304 | ||
| 305 | #if defined(CONFIG_ARCH_NETWINDER) || defined(CONFIG_ARCH_CATS) | 305 | #if defined(CONFIG_ARCH_NETWINDER) || defined(CONFIG_ARCH_CATS) |
| 306 | /* | 306 | /* |
| @@ -34,7 +34,6 @@ · 33 unmodified lines | |||
| 34 | #include <asm/current.h> | 34 | #include <asm/current.h> |
| 35 | #include <asm/hw_breakpoint.h> | 35 | #include <asm/hw_breakpoint.h> |
| 36 | #include <asm/kdebug.h> | 36 | #include <asm/kdebug.h> |
| 37 | #include <asm/system.h> | ||
| 38 | #include <asm/traps.h> | 37 | #include <asm/traps.h> |
| 39 | 38 | ||
| 40 | /* Breakpoint currently in use for each BRP. */ | 39 | /* Breakpoint currently in use for each BRP. */ |
| @@ -0,0 +1,62 @@ | |||
| 1 | #include <linux/bug.h> | ||
| 2 | #include <linux/kernel.h> | ||
| 3 | #include <asm/opcodes.h> | ||
| 4 | |||
| 5 | static unsigned long | ||
| 6 | __arm_gen_branch_thumb2(unsigned long pc, unsigned long addr, bool link) | ||
| 7 | { | ||
| 8 | unsigned long s, j1, j2, i1, i2, imm10, imm11; | ||
| 9 | unsigned long first, second; | ||
| 10 | long offset; | ||
| 11 | |||
| 12 | offset = (long)addr - (long)(pc + 4); | ||
| 13 | if (offset < -16777216 || offset > 16777214) { | ||
| 14 | WARN_ON_ONCE(1); | ||
| 15 | return 0; | ||
| 16 | } | ||
| 17 | |||
| 18 | s = (offset >> 24) & 0x1; | ||
| 19 | i1 = (offset >> 23) & 0x1; | ||
| 20 | i2 = (offset >> 22) & 0x1; | ||
| 21 | imm10 = (offset >> 12) & 0x3ff; | ||
| 22 | imm11 = (offset >> 1) & 0x7ff; | ||
| 23 | |||
| 24 | j1 = (!i1) ^ s; | ||
| 25 | j2 = (!i2) ^ s; | ||
| 26 | |||
| 27 | first = 0xf000 | (s << 10) | imm10; | ||
| 28 | second = 0x9000 | (j1 << 13) | (j2 << 11) | imm11; | ||
| 29 | if (link) | ||
| 30 | second |= 1 << 14; | ||
| 31 | |||
| 32 | return __opcode_thumb32_compose(first, second); | ||
| 33 | } | ||
| 34 | |||
| 35 | static unsigned long | ||
| 36 | __arm_gen_branch_arm(unsigned long pc, unsigned long addr, bool link) | ||
| 37 | { | ||
| 38 | unsigned long opcode = 0xea000000; | ||
| 39 | long offset; | ||
| 40 | |||
| 41 | if (link) | ||
| 42 | opcode |= 1 << 24; | ||
| 43 | |||
| 44 | offset = (long)addr - (long)(pc + 8); | ||
| 45 | if (unlikely(offset < -33554432 || offset > 33554428)) { | ||
| 46 | WARN_ON_ONCE(1); | ||
| 47 | return 0; | ||
| 48 | } | ||
| 49 | |||
| 50 | offset = (offset >> 2) & 0x00ffffff; | ||
| 51 | |||
| 52 | return opcode | offset; | ||
| 53 | } | ||
| 54 | |||
| 55 | unsigned long | ||
| 56 | __arm_gen_branch(unsigned long pc, unsigned long addr, bool link) | ||
| 57 | { | ||
| 58 | if (IS_ENABLED(CONFIG_THUMB2_KERNEL)) | ||
| 59 | return __arm_gen_branch_thumb2(pc, addr, link); | ||
| 60 | else | ||
| 61 | return __arm_gen_branch_arm(pc, addr, link); | ||
| 62 | } | ||
| @@ -0,0 +1,29 @@ | |||
| 1 | #ifndef __ASM_ARM_INSN_H | ||
| 2 | #define __ASM_ARM_INSN_H | ||
| 3 | |||
| 4 | static inline unsigned long | ||
| 5 | arm_gen_nop(void) | ||
| 6 | { | ||
| 7 | #ifdef CONFIG_THUMB2_KERNEL | ||
| 8 | return 0xf3af8000; /* nop.w */ | ||
| 9 | #else | ||
| 10 | return 0xe1a00000; /* mov r0, r0 */ | ||
| 11 | #endif | ||
| 12 | } | ||
| 13 | |||
| 14 | unsigned long | ||
| 15 | __arm_gen_branch(unsigned long pc, unsigned long addr, bool link); | ||
| 16 | |||
| 17 | static inline unsigned long | ||
| 18 | arm_gen_branch(unsigned long pc, unsigned long addr) | ||
| 19 | { | ||
| 20 | return __arm_gen_branch(pc, addr, false); | ||
| 21 | } | ||
| 22 | |||
| 23 | static inline unsigned long | ||
| 24 | arm_gen_branch_link(unsigned long pc, unsigned long addr) | ||
| 25 | { | ||
| 26 | return __arm_gen_branch(pc, addr, true); | ||
| 27 | } | ||
| 28 | |||
| 29 | #endif | ||
| @@ -36,7 +36,6 @@ · 35 unmodified lines | |||
| 36 | #include <linux/proc_fs.h> | 36 | #include <linux/proc_fs.h> |
| 37 | 37 | ||
| 38 | #include <asm/exception.h> | 38 | #include <asm/exception.h> |
| 39 | #include <asm/system.h> | ||
| 40 | #include <asm/mach/arch.h> | 39 | #include <asm/mach/arch.h> |
| 41 | #include <asm/mach/irq.h> | 40 | #include <asm/mach/irq.h> |
| 42 | #include <asm/mach/time.h> | 41 | #include <asm/mach/time.h> |
| @@ -181,10 +180,7 @@ void migrate_irqs(void) · 138 unmodified lines | |||
| 181 | local_irq_save(flags); | 180 | local_irq_save(flags); |
| 182 | 181 | ||
| 183 | for_each_irq_desc(i, desc) { | 182 | for_each_irq_desc(i, desc) { |
| 184 | bool affinity_broken = false; | 183 | bool affinity_broken; |
| 185 | |||
| 186 | if (!desc) | ||
| 187 | continue; | ||
| 188 | 184 | ||
| 189 | raw_spin_lock(&desc->lock); | 185 | raw_spin_lock(&desc->lock); |
| 190 | affinity_broken = migrate_one_irq(desc); | 186 | affinity_broken = migrate_one_irq(desc); |
| @@ -0,0 +1,39 @@ | |||
| 1 | #include <linux/kernel.h> | ||
| 2 | #include <linux/jump_label.h> | ||
| 3 | |||
| 4 | #include "insn.h" | ||
| 5 | #include "patch.h" | ||
| 6 | |||
| 7 | #ifdef HAVE_JUMP_LABEL | ||
| 8 | |||
| 9 | static void __arch_jump_label_transform(struct jump_entry *entry, | ||
| 10 | enum jump_label_type type, | ||
| 11 | bool is_static) | ||
| 12 | { | ||
| 13 | void *addr = (void *)entry->code; | ||
| 14 | unsigned int insn; | ||
| 15 | |||
| 16 | if (type == JUMP_LABEL_ENABLE) | ||
| 17 | insn = arm_gen_branch(entry->code, entry->target); | ||
| 18 | else | ||
| 19 | insn = arm_gen_nop(); | ||
| 20 | |||
| 21 | if (is_static) | ||
| 22 | __patch_text(addr, insn); | ||
| 23 | else | ||
| 24 | patch_text(addr, insn); | ||
| 25 | } | ||
| 26 | |||
| 27 | void arch_jump_label_transform(struct jump_entry *entry, | ||
| 28 | enum jump_label_type type) | ||
| 29 | { | ||
| 30 | __arch_jump_label_transform(entry, type, false); | ||
| 31 | } | ||
| 32 | |||
| 33 | void arch_jump_label_transform_static(struct jump_entry *entry, | ||
| 34 | enum jump_label_type type) | ||
| 35 | { | ||
| 36 | __arch_jump_label_transform(entry, type, true); | ||
| 37 | } | ||
| 38 | |||
| 39 | #endif | ||
| @@ -13,6 +13,7 @@ · 12 unmodified lines | |||
| 13 | 13 | ||
| 14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
| 15 | #include <linux/kprobes.h> | 15 | #include <linux/kprobes.h> |
| 16 | #include <asm/system_info.h> | ||
| 16 | 17 | ||
| 17 | #include "kprobes.h" | 18 | #include "kprobes.h" |
| 18 | 19 | ||
| @@ -29,6 +29,7 @@ · 28 unmodified lines | |||
| 29 | #include <asm/cacheflush.h> | 29 | #include <asm/cacheflush.h> |
| 30 | 30 | ||
| 31 | #include "kprobes.h" | 31 | #include "kprobes.h" |
| 32 | #include "patch.h" | ||
| 32 | 33 | ||
| 33 | #define MIN_STACK_SIZE(addr) \ | 34 | #define MIN_STACK_SIZE(addr) \ |
| 34 | min((unsigned long)MAX_STACK_SIZE, \ | 35 | min((unsigned long)MAX_STACK_SIZE, \ |
| @@ -103,57 +104,33 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p) · 68 unmodified lines | |||
| 103 | return 0; | 104 | return 0; |
| 104 | } | 105 | } |
| 105 | 106 | ||
| 106 | #ifdef CONFIG_THUMB2_KERNEL | ||
| 107 | |||
| 108 | /* | ||
| 109 | * For a 32-bit Thumb breakpoint spanning two memory words we need to take | ||
| 110 | * special precautions to insert the breakpoint atomically, especially on SMP | ||
| 111 | * systems. This is achieved by calling this arming function using stop_machine. | ||
| 112 | */ | ||
| 113 | static int __kprobes set_t32_breakpoint(void *addr) | ||
| 114 | { | ||
| 115 | ((u16 *)addr)[0] = KPROBE_THUMB32_BREAKPOINT_INSTRUCTION >> 16; | ||
| 116 | ((u16 *)addr)[1] = KPROBE_THUMB32_BREAKPOINT_INSTRUCTION & 0xffff; | ||
| 117 | flush_insns(addr, 2*sizeof(u16)); | ||
| 118 | return 0; | ||
| 119 | } | ||
| 120 | |||
| 121 | void __kprobes arch_arm_kprobe(struct kprobe *p) | 107 | void __kprobes arch_arm_kprobe(struct kprobe *p) |
| 122 | { | 108 | { |
| 123 | uintptr_t addr = (uintptr_t)p->addr & ~1; /* Remove any Thumb flag */ | 109 | unsigned int brkp; |
| 124 | 110 | void *addr; | |
| 125 | if (!is_wide_instruction(p->opcode)) { | 111 | |
| 126 | *(u16 *)addr = KPROBE_THUMB16_BREAKPOINT_INSTRUCTION; | 112 | if (IS_ENABLED(CONFIG_THUMB2_KERNEL)) { |
| 127 | flush_insns(addr, sizeof(u16)); | 113 | /* Remove any Thumb flag */ |
| 128 | } else if (addr & 2) { | 114 | addr = (void *)((uintptr_t)p->addr & ~1); |
| 129 | /* A 32-bit instruction spanning two words needs special care */ | 115 | |
| 130 | stop_machine(set_t32_breakpoint, (void *)addr, &cpu_online_map); | 116 | if (is_wide_instruction(p->opcode)) |
| 117 | brkp = KPROBE_THUMB32_BREAKPOINT_INSTRUCTION; | ||
| 118 | else | ||
| 119 | brkp = KPROBE_THUMB16_BREAKPOINT_INSTRUCTION; | ||
| 131 | } else { | 120 | } else { |
| 132 | /* Word aligned 32-bit instruction can be written atomically */ | ||
| 133 | u32 bkp = KPROBE_THUMB32_BREAKPOINT_INSTRUCTION; | ||
| 134 | #ifndef __ARMEB__ /* Swap halfwords for little-endian */ | ||
70 more lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 76 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 171 lines aren’t shown here.
This diff is large: its 124 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 54 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 115 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 194 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 59 lines aren’t shown here.
This diff is large: its 111 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 397 lines aren’t shown here.
This diff is large: its 1274 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 109 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 144 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 179 lines aren’t shown here.
This diff is large: its 110 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 271 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 362 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 58 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 397 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.
This diff is large: its 118 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 33 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 9 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 9 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 136 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 8 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 444 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 881 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 191 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 123 lines aren’t shown here.
This diff is large: its 138 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 67 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 31 lines aren’t shown here.
This diff is large: its 123 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 142 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 84 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 54 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 58 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 32 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 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 217 lines aren’t shown here.
This diff is large: its 106 lines aren’t shown here.
This diff is large: its 145 lines aren’t shown here.
This diff is large: its 417 lines aren’t shown here.
This diff is large: its 228 lines aren’t shown here.
This diff is large: its 19 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 29 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 37 lines aren’t shown here.
This diff is large: its 36 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 26 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 18 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 8 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 17 lines aren’t shown here.
This diff is large: its 213 lines aren’t shown here.
This diff is large: its 118 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 124 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 281 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 54 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 12 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 25 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 68 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 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 111 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 38 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 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 140 lines aren’t shown here.
File renamed without changes.
This diff is large: its 13 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 18 lines aren’t shown here.
This diff is large: its 210 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 23 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 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 214 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 142 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 1582 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 112 lines aren’t shown here.
This diff is large: its 78 lines aren’t shown here.
This diff is large: its 1248 lines aren’t shown here.
This diff is large: its 1565 lines aren’t shown here.
This diff is large: its 791 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 210 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 79 lines aren’t shown here.
This diff is large: its 198 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 17 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 273 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 614 lines aren’t shown here.
This diff is large: its 165 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 498 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 21 lines aren’t shown here.
This diff is large: its 50 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 314 lines aren’t shown here.
This diff is large: its 112 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 243 lines aren’t shown here.
This diff is large: its 171 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 13 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 8 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 20 lines aren’t shown here.
This diff is large: its 19 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 30 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 28 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 7 lines aren’t shown here.
This diff is large: its 2 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 74 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 37 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 301 lines aren’t shown here.
This diff is large: its 158 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 847 lines aren’t shown here.
This diff is large: its 90 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 104 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 198 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 178 lines aren’t shown here.
This diff is large: its 93 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 273 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 29 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 129 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 17 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 93 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 16 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 34 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 88 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 26 lines aren’t shown here.
This diff is large: its 10 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 51 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 7 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 10 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 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 15 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 23 lines aren’t shown here.
This diff is large: its 8 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 8 lines aren’t shown here.
This diff is large: its 16 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 8 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 16 lines aren’t shown here.
This diff is large: its 19 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 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 16 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 8 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 8 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 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 153 lines aren’t shown here.
This diff is large: its 76 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 99 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 18 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 17 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 11 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 354 lines aren’t shown here.
This diff is large: its 76 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 76 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 83 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 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 8 lines aren’t shown here.
This diff is large: its 13 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 22 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 24 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 26 lines aren’t shown here.
This diff is large: its 76 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 53 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 25 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 8 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 37 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 37 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 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 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 20 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 133 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 18 lines aren’t shown here.
This diff is large: its 11 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 89 lines aren’t shown here.
This diff is large: its 144 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 22 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 82 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 17 lines aren’t shown here.
This diff is large: its 6 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 23 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 261 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 142 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 20 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 72 lines aren’t shown here.
This diff is large: its 29 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 14 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 33 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 8 lines aren’t shown here.
This diff is large: its 468 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 22 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 13 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 109 lines aren’t shown here.
This diff is large: its 78 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 41 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 6 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 15 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 17 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 12 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 18 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 40 lines aren’t shown here.
This diff is large: its 118 lines aren’t shown here.
This diff is large: its 16 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 69 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 66 lines aren’t shown here.
This diff is large: its 16 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 202 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 38 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 84 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 92 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 15 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 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 114 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 12 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 28 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 13 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 67 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 48 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 8 lines aren’t shown here.
This diff is large: its 100 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 193 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 346 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 6 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 137 lines aren’t shown here.
This diff is large: its 115 lines aren’t shown here.
This diff is large: its 146 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 59 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 30 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 166 lines aren’t shown here.
This diff is large: its 111 lines aren’t shown here.
This diff is large: its 171 lines aren’t shown here.
This diff is large: its 13 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 20 lines aren’t shown here.
This diff is large: its 215 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 179 lines aren’t shown here.
This diff is large: its 273 lines aren’t shown here.
This diff is large: its 146 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 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 72 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 8 lines aren’t shown here.
This diff is large: its 18 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 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 523 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 41 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 15 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 40 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 11 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 34 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 8 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 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 23 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 8 lines aren’t shown here.
This diff is large: its 16 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 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 17 lines aren’t shown here.
This diff is large: its 18 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 8 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 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 32 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 59 lines aren’t shown here.
This diff is large: its 41 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 163 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 25 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 10 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 70 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 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 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 8 lines aren’t shown here.
This diff is large: its 24 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 16 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 8 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.
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 29 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 155 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 135 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 127 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 245 lines aren’t shown here.
File renamed without changes.
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 13 lines aren’t shown here.
This diff is large: its 10 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 27 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 165 lines aren’t shown here.
This diff is large: its 33 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 96 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 176 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 33 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 539 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This diff is large: its 21 lines aren’t shown here.
File renamed without changes.
This diff is large: its 21 lines aren’t shown here.
File renamed without changes.
This diff is large: its 159 lines aren’t shown here.
File renamed without changes.
This diff is large: its 24 lines aren’t shown here.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This diff is large: its 75 lines aren’t shown here.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This diff is large: its 19 lines aren’t shown here.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This diff is large: its 10 lines aren’t shown here.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This diff is large: its 8 lines aren’t shown here.
File renamed without changes.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This diff is large: its 48 lines aren’t shown here.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This diff is large: its 33 lines aren’t shown here.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This diff is large: its 10 lines aren’t shown here.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
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 35 lines aren’t shown here.
File renamed without changes.
File renamed without changes.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
File renamed without changes.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
File renamed without changes.
File renamed without changes.
This diff is large: its 43 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 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 19 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 105 lines aren’t shown here.
This diff is large: its 142 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 91 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 126 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 84 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 86 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 18 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 19 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 297 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 122 lines aren’t shown here.
This diff is large: its 130 lines aren’t shown here.
This diff is large: its 349 lines aren’t shown here.
This diff is large: its 278 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 244 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 21 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 18 lines aren’t shown here.
This diff is large: its 21 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 19 lines aren’t shown here.
This diff is large: its 64 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 10 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 106 lines aren’t shown here.
This diff is large: its 112 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 34 lines aren’t shown here.
This diff is large: its 634 lines aren’t shown here.
This diff is large: its 30 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 63 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 63 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 25 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 14 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 75 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 188 lines aren’t shown here.
This diff is large: its 89 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 36 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 36 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 53 lines aren’t shown here.
This diff is large: its 64 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 17 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 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 19 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.
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 64 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 10 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 19 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 21 lines aren’t shown here.
This diff is large: its 36 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 45 lines aren’t shown here.
This diff is large: its 19 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 26 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 152 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 146 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 45 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 51 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 29 lines aren’t shown here.
This diff is large: its 51 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 108 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 200 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 148 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 182 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 108 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 64 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 55 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 187 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 110 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 94 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 310 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 3100 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 8 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 21 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 53 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 81 lines aren’t shown here.
This diff is large: its 17 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 63 lines aren’t shown here.
This diff is large: its 138 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 282 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 21 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 58 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 125 lines aren’t shown here.
This diff is large: its 138 lines aren’t shown here.
This diff is large: its 127 lines aren’t shown here.
This diff is large: its 139 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 190 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 19 lines aren’t shown here.
This diff is large: its 17 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 9 lines aren’t shown here.
This diff is large: its 23 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 30 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 128 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 39 lines aren’t shown here.
This diff is large: its 6 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 72 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 192 lines aren’t shown here.
This diff is large: its 415 lines aren’t shown here.
This diff is large: its 19 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 8 lines aren’t shown here.
This diff is large: its 16 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 20 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 34 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 8 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 9 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 42 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 20 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 36 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 100 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 4 lines aren’t shown here.
This diff is large: its 916 lines aren’t shown here.
This diff is large: its 191 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 9 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 51 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 31 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 17 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 104 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 19 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 10 lines aren’t shown here.
This diff is large: its 84 lines aren’t shown here.
This diff is large: its 20 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 8 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 95 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 23 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 58 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 16 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 54 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 9 lines aren’t shown here.
This diff is large: its 158 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 11 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.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 30 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 37 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 16 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 39 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 40 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 144 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 36 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 18 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 94 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 6 lines aren’t shown here.
This diff is large: its 24 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 10 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 8 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 12 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.
This diff is large: its 9 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 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 23 lines aren’t shown here.
This diff is large: its 9 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 10 lines aren’t shown here.
This diff is large: its 98 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 124 lines aren’t shown here.
This diff is large: its 47 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 12 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 8 lines aren’t shown here.
This diff is large: its 9 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 10 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 6 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 8 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 24 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 11 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 64 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 169 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 30 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 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 9 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 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 69 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 26 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 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 71 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 123 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 36 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 8 lines aren’t shown here.
This diff is large: its 25 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 9 lines aren’t shown here.
This diff is large: its 61 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 10 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 141 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 42 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 35 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 26 lines aren’t shown here.
This diff is large: its 41 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 40 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 7 lines aren’t shown here.
This diff is large: its 69 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 15 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 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 10 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 28 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 130 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 23 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 88 lines aren’t shown here.
This diff is large: its 204 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 56 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 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 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 44 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 37 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 8 lines aren’t shown here.
This diff is large: its 8 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 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 17 lines aren’t shown here.
This diff is large: its 78 lines aren’t shown here.
This diff is large: its 36 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 49 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 89 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 37 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 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 29 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 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 95 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 222 lines aren’t shown here.
This diff is large: its 30 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 122 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 368 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 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 21 lines aren’t shown here.
This diff is large: its 159 lines aren’t shown here.
This diff is large: its 7 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 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 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 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 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 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 63 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 28 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 110 lines aren’t shown here.
This diff is large: its 9 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 12 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 10 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 98 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 31 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 200 lines aren’t shown here.
This diff is large: its 30 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 41 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 56 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 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 122 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 89 lines aren’t shown here.
This diff is large: its 346 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 204 lines aren’t shown here.
This diff is large: its 8 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 8 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 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 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 131 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 18 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 30 lines aren’t shown here.
This diff is large: its 136 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 236 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 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 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 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 12 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 89 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 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 21 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 29 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 26 lines aren’t shown here.
This diff is large: its 68 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 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 138 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 31 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 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 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 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 8 lines aren’t shown here.
This diff is large: its 123 lines aren’t shown here.
This diff is large: its 38 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 17 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 132 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 103 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 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 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 97 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 20 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 21 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 65 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 8 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 36 lines aren’t shown here.
This diff is large: its 94 lines aren’t shown here.
This diff is large: its 22 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 8 lines aren’t shown here.
This diff is large: its 122 lines aren’t shown here.
This diff is large: its 36 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 8 lines aren’t shown here.
This diff is large: its 7 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 11 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 133 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 41 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 166 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 67 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 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 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 152 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 141 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 90 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 16 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 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 18 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 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 69 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 310 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 58 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 10 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 8 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 191 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 199 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 171 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 71 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 46 lines aren’t shown here.
This diff is large: its 30 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 132 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 37 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 46 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 66 lines aren’t shown here.
This diff is large: its 593 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 12 lines aren’t shown here.
This diff is large: its 36 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 31 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 62 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 31 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 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 434 lines aren’t shown here.
This diff is large: its 173 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 150 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 28 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 16 lines aren’t shown here.
This diff is large: its 36 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 9 lines aren’t shown here.
This diff is large: its 49 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 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 14 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 17 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 71 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 68 lines aren’t shown here.
This diff is large: its 157 lines aren’t shown here.
This diff is large: its 991 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 717 lines aren’t shown here.
This diff is large: its 261 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 959 lines aren’t shown here.
This diff is large: its 223 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 364 lines aren’t shown here.
This diff is large: its 278 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 1144 lines aren’t shown here.
This diff is large: its 154 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 272 lines aren’t shown here.
This diff is large: its 80 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 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 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 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 70 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 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 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 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 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 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 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 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 16 lines aren’t shown here.
This diff is large: its 9 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 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 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 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 10 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 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 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 18 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 11 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 12 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 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 91 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 269 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 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 44 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 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 98 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 13 lines aren’t shown here.
This diff is large: its 64 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 39 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 19 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 45 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 101 lines aren’t shown here.
This diff is large: its 316 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 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 9 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 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 691 lines aren’t shown here.
This diff is large: its 125 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 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 8 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 423 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 141 lines aren’t shown here.
This diff is large: its 12 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 15 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 121 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 16 lines aren’t shown here.
This diff is large: its 50 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 91 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.
This diff is large: its 8 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 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 22 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 43 lines aren’t shown here.
This diff is large: its 112 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 7 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 11 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 41 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 22 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 9 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 59 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 47 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 12 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 8 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 130 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 185 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 69 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 47 lines aren’t shown here.
This diff is large: its 230 lines aren’t shown here.
This diff is large: its 245 lines aren’t shown here.
This diff is large: its 54 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 15 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 45 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 8 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 49 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 18 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 27 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 54 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 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 34 lines aren’t shown here.
This diff is large: its 49 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 215 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 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 13 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 78 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 22 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 13 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 48 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 20 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 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 23 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 8 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 57 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 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 113 lines aren’t shown here.
This diff is large: its 146 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 37 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 15 lines aren’t shown here.
This diff is large: its 15 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 20 lines aren’t shown here.
This diff is large: its 163 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 28 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 107 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 285 lines aren’t shown here.
This diff is large: its 332 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 23 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 31 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 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 15 lines aren’t shown here.
This diff is large: its 89 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 208 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 9 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 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 16 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 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 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 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 16 lines aren’t shown here.
This diff is large: its 20 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 74 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 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 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 36 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 69 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 150 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 23 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 21 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 29 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 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 77 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 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 15 lines aren’t shown here.
This diff is large: its 59 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 28 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 13 lines aren’t shown here.
This diff is large: its 93 lines aren’t shown here.
This diff is large: its 53 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 338 lines aren’t shown here.
This diff is large: its 58 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 15 lines aren’t shown here.
This diff is large: its 7 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 8 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 90 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 998 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 320 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 100 lines aren’t shown here.
This diff is large: its 493 lines aren’t shown here.
This diff is large: its 70 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 91 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
File renamed without changes.
This diff is large: its 65 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 6 lines aren’t shown here.
This diff is large: its 2 lines aren’t shown here.
This diff is large: its 5 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 8 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 10 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 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 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 33 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 35 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 21 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 29 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 16 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 8 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 162 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 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 26 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 8 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 19 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 175 lines aren’t shown here.
This diff is large: its 191 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 47 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 12 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 8 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 76 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 83 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 8 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 16 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 128 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 50 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 89 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 20 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 64 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 200 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 130 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 524 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 30 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 12 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 38 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 47 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 30 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 39 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 271 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 21 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 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 40 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 39 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 27 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 28 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 67 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 17 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 78 lines aren’t shown here.
This diff is large: its 19 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 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 38 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 161 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 197 lines aren’t shown here.
This diff is large: its 138 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 207 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 40 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 312 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 87 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 13 lines aren’t shown here.
This diff is large: its 238 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 310 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 217 lines aren’t shown here.
This diff is large: its 158 lines aren’t shown here.
This diff is large: its 647 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 94 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 26 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 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 9 lines aren’t shown here.
This diff is large: its 171 lines aren’t shown here.
This diff is large: its 93 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 35 lines aren’t shown here.
This diff is large: its 106 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 4 lines aren’t shown here.
This diff is large: its 129 lines aren’t shown here.
This diff is large: its 125 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 45 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 624 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 76 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 24 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 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 8 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 201 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 29 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 25 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 24 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 30 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 15 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 112 lines aren’t shown here.
This diff is large: its 7 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 34 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 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 19 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 27 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 117 lines aren’t shown here.
This diff is large: its 24 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 16 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 25 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 38 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 13 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 15 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 15 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 63 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 461 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 14 lines aren’t shown here.
This diff is large: its 248 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 552 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 108 lines aren’t shown here.
This diff is large: its 432 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 11 lines aren’t shown here.
This diff is large: its 236 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 146 lines aren’t shown here.
This diff is large: its 156 lines aren’t shown here.
This diff is large: its 48 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 34 lines aren’t shown here.
This diff is large: its 145 lines aren’t shown here.
This diff is large: its 16 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 176 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 22 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 184 lines aren’t shown here.
This diff is large: its 226 lines aren’t shown here.
This diff is large: its 143 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 80 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 27 lines aren’t shown here.
This diff is large: its 165 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 9 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 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 244 lines aren’t shown here.
This diff is large: its 314 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 40 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 8 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 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 79 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 1606 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 703 lines aren’t shown here.
This diff is large: its 1372 lines aren’t shown here.
This diff is large: its 11 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 100 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 128 lines aren’t shown here.
This diff is large: its 187 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 103 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 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 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 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 19 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 404 lines aren’t shown here.
This diff is large: its 158 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 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 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 24 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 41 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 201 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 151 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 1462 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 118 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 141 lines aren’t shown here.
This diff is large: its 537 lines aren’t shown here.
This diff is large: its 348 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 543 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 169 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 91 lines aren’t shown here.
This diff is large: its 394 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 125 lines aren’t shown here.
This diff is large: its 280 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 129 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 544 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 116 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 1171 lines aren’t shown here.
This diff is large: its 467 lines aren’t shown here.
This diff is large: its 130 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 129 lines aren’t shown here.
This diff is large: its 132 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 84 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 159 lines aren’t shown here.
This diff is large: its 97 lines aren’t shown here.
This diff is large: its 2459 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 1110 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 118 lines aren’t shown here.
This diff is large: its 97 lines aren’t shown here.
This diff is large: its 107 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 97 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 27 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 9 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 102 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 366 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.
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 172 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 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 28 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 55 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 162 lines aren’t shown here.
This diff is large: its 1851 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 8 lines aren’t shown here.
This diff is large: its 647 lines aren’t shown here.
This diff is large: its 300 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 273 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 163 lines aren’t shown here.
This diff is large: its 187 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 11 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 305 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 84 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 245 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 57 lines aren’t shown here.
This diff is large: its 147 lines aren’t shown here.
This diff is large: its 134 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 66 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 10 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 44 lines aren’t shown here.
This diff is large: its 177 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 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 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 18 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 25 lines aren’t shown here.
This diff is large: its 18 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 22 lines aren’t shown here.
This diff is large: its 14 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 8 lines aren’t shown here.
This diff is large: its 154 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 9 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 432 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 104 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 49 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 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 20 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 21 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 22 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 14 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 803 lines aren’t shown here.
This diff is large: its 495 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 93 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 8 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 732 lines aren’t shown here.
This diff is large: its 197 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 240 lines aren’t shown here.
This diff is large: its 172 lines aren’t shown here.
This diff is large: its 52 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 25 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 269 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 10 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 23 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 74 lines aren’t shown here.
This diff is large: its 160 lines aren’t shown here.
This diff is large: its 98 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 104 lines aren’t shown here.
This diff is large: its 141 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 460 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 279 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 10 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 8 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 8 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 18 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 18 lines aren’t shown here.
This diff is large: its 414 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 44 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 45 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 467 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 102 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 109 lines aren’t shown here.
This diff is large: its 179 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 330 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 34 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 32 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 304 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 452 lines aren’t shown here.
This diff is large: its 1035 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 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 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 20 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 44 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 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 47 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 211 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 152 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 17 lines aren’t shown here.
This diff is large: its 19 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 135 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 84 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 11 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 20 lines aren’t shown here.
This diff is large: its 1341 lines aren’t shown here.
This diff is large: its 914 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 15 lines aren’t shown here.
This diff is large: its 322 lines aren’t shown here.
This diff is large: its 97 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 93 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 90 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 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 108 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 8 lines aren’t shown here.
This diff is large: its 138 lines aren’t shown here.
This diff is large: its 36 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 23 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 641 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 138 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 40 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 1693 lines aren’t shown here.
This diff is large: its 168 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 350 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 15 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 409 lines aren’t shown here.
This diff is large: its 387 lines aren’t shown here.
This diff is large: its 116 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 227 lines aren’t shown here.
This diff is large: its 388 lines aren’t shown here.
This diff is large: its 243 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 178 lines aren’t shown here.
This diff is large: its 361 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 272 lines aren’t shown here.
This diff is large: its 175 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 692 lines aren’t shown here.
This diff is large: its 115 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 111 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 313 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 114 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 392 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 150 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 31 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 8 lines aren’t shown here.
This diff is large: its 171 lines aren’t shown here.
This diff is large: its 137 lines aren’t shown here.
This diff is large: its 159 lines aren’t shown here.
This diff is large: its 135 lines aren’t shown here.
This diff is large: its 571 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 396 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 743 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 68 lines aren’t shown here.
This diff is large: its 111 lines aren’t shown here.
This diff is large: its 311 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 201 lines aren’t shown here.
This diff is large: its 97 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 81 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 250 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 234 lines aren’t shown here.
This diff is large: its 410 lines aren’t shown here.
This diff is large: its 68 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 29 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 27 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 58 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 569 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 116 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 104 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 152 lines aren’t shown here.
This diff is large: its 172 lines aren’t shown here.
This diff is large: its 106 lines aren’t shown here.
This diff is large: its 1148 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 112 lines aren’t shown here.
This diff is large: its 7 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 11 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 9 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 27 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 164 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 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 15 lines aren’t shown here.
This diff is large: its 184 lines aren’t shown here.
This diff is large: its 222 lines aren’t shown here.
This diff is large: its 312 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 385 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 18 lines aren’t shown here.
This diff is large: its 142 lines aren’t shown here.
This diff is large: its 287 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 12 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 19 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 1378 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 1284 lines aren’t shown here.
This diff is large: its 115 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 11 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 358 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 11 lines aren’t shown here.
This diff is large: its 12 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 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 257 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 17 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 13 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 109 lines aren’t shown here.
This diff is large: its 27 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 21 lines aren’t shown here.
This diff is large: its 66 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 109 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 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 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 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 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 14 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 195 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 288 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 517 lines aren’t shown here.
This diff is large: its 65 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 23 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 305 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 20 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 23 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 14 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 75 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 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 264 lines aren’t shown here.
This diff is large: its 39 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 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 44 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 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 9 lines aren’t shown here.
This diff is large: its 11 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 19 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 71 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 24 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 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 8 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 170 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 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 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 1258 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 49 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 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 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 43 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 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 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 36 lines aren’t shown here.
This diff is large: its 10 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 8 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 175 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 18 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 37 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 16 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 8 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 22 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 22 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 38 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 37 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 46 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 42 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 24 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 12 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 9 lines aren’t shown here.
This diff is large: its 27 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 49 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 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 55 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 37 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 62 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 82 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 13 lines aren’t shown here.
This diff is large: its 192 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 28 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 229 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 516 lines aren’t shown here.
This diff is large: its 261 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 984 lines aren’t shown here.
This diff is large: its 153 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 191 lines aren’t shown here.
This diff is large: its 9 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 8 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 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 8 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 99 lines aren’t shown here.
This diff is large: its 58 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 29 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 108 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 101 lines aren’t shown here.
This diff is large: its 116 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 160 lines aren’t shown here.
This diff is large: its 205 lines aren’t shown here.
This diff is large: its 94 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 15 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 23 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 275 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 8 lines aren’t shown here.
This diff is large: its 14 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 147 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 391 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 245 lines aren’t shown here.
This diff is large: its 450 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 150 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 1514 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 39 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 28 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 2047 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 412 lines aren’t shown here.
This diff is large: its 21 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 33 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 1125 lines aren’t shown here.
This diff is large: its 2790 lines aren’t shown here.
This diff is large: its 2638 lines aren’t shown here.
This diff is large: its 1922 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 166 lines aren’t shown here.
This diff is large: its 36 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 266 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 605 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 20 lines aren’t shown here.
This diff is large: its 1295 lines aren’t shown here.
This diff is large: its 21 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 38 lines aren’t shown here.
This diff is large: its 163 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 40 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 28 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 121 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 230 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 1587 lines aren’t shown here.
This diff is large: its 173 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 290 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 2 lines aren’t shown here.
This diff is large: its 1055 lines aren’t shown here.
This diff is large: its 49 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 57 lines aren’t shown here.
This diff is large: its 169 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 9 lines aren’t shown here.
This diff is large: its 294 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 366 lines aren’t shown here.
This diff is large: its 20 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 9 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 20 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 21 lines aren’t shown here.
This diff is large: its 19 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 9 lines aren’t shown here.
This diff is large: its 211 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 43 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 37 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 22 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 29 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 17 lines aren’t shown here.
This diff is large: its 55 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 21 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 181 lines aren’t shown here.
This diff is large: its 352 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 237 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 139 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 24 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 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 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 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 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 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 26 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 928 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 12 lines aren’t shown here.
This diff is large: its 419 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 182 lines aren’t shown here.
This diff is large: its 112 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 101 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 36 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 8 lines aren’t shown here.
This diff is large: its 153 lines aren’t shown here.
This diff is large: its 95 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 14 lines aren’t shown here.
This diff is large: its 14 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 187 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 18 lines aren’t shown here.
This diff is large: its 18 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 159 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 126 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 830 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 180 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 8 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 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 78 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 39 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 87 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 53 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 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 50 lines aren’t shown here.
This diff is large: its 3 lines aren’t shown here.
This diff is large: its 208 lines aren’t shown here.
This diff is large: its 1979 lines aren’t shown here.
This diff is large: its 377 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 144 lines aren’t shown here.
This diff is large: its 8 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 82 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 21 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 9 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 42 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 14 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 12 lines aren’t shown here.
This diff is large: its 47 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 16 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 99 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 49 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 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 8 lines aren’t shown here.
This diff is large: its 36 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 8 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 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 18 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 12 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 21 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 17 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 10 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 10 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 32 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 34 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 5 lines aren’t shown here.
This diff is large: its 207 lines aren’t shown here.
This diff is large: its 274 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 12 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 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 larger than a page shows: the files after these aren’t listed. Clone the repository to see all of it.