diff options
118 files changed, 770 insertions, 577 deletions
@@ -518,7 +518,7 @@ N: Zach Brown | |||
518 | E: zab@zabbo.net | 518 | E: zab@zabbo.net |
519 | D: maestro pci sound | 519 | D: maestro pci sound |
520 | 520 | ||
521 | M: David Brownell | 521 | N: David Brownell |
522 | D: Kernel engineer, mentor, and friend. Maintained USB EHCI and | 522 | D: Kernel engineer, mentor, and friend. Maintained USB EHCI and |
523 | D: gadget layers, SPI subsystem, GPIO subsystem, and more than a few | 523 | D: gadget layers, SPI subsystem, GPIO subsystem, and more than a few |
524 | D: device drivers. His encouragement also helped many engineers get | 524 | D: device drivers. His encouragement also helped many engineers get |
diff --git a/Documentation/hwmon/f71882fg b/Documentation/hwmon/f71882fg index 84d2623810f3..de91c0db5846 100644 --- a/Documentation/hwmon/f71882fg +++ b/Documentation/hwmon/f71882fg | |||
@@ -22,6 +22,10 @@ Supported chips: | |||
22 | Prefix: 'f71869' | 22 | Prefix: 'f71869' |
23 | Addresses scanned: none, address read from Super I/O config space | 23 | Addresses scanned: none, address read from Super I/O config space |
24 | Datasheet: Available from the Fintek website | 24 | Datasheet: Available from the Fintek website |
25 | * Fintek F71869A | ||
26 | Prefix: 'f71869a' | ||
27 | Addresses scanned: none, address read from Super I/O config space | ||
28 | Datasheet: Not public | ||
25 | * Fintek F71882FG and F71883FG | 29 | * Fintek F71882FG and F71883FG |
26 | Prefix: 'f71882fg' | 30 | Prefix: 'f71882fg' |
27 | Addresses scanned: none, address read from Super I/O config space | 31 | Addresses scanned: none, address read from Super I/O config space |
diff --git a/Documentation/hwmon/k10temp b/Documentation/hwmon/k10temp index 0393c89277c0..a10f73624ad3 100644 --- a/Documentation/hwmon/k10temp +++ b/Documentation/hwmon/k10temp | |||
@@ -9,8 +9,8 @@ Supported chips: | |||
9 | Socket S1G3: Athlon II, Sempron, Turion II | 9 | Socket S1G3: Athlon II, Sempron, Turion II |
10 | * AMD Family 11h processors: | 10 | * AMD Family 11h processors: |
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" | 12 | * AMD Family 12h processors: "Llano" (E2/A4/A6/A8-Series) |
13 | * AMD Family 14h processors: "Brazos" (C/E/G-Series) | 13 | * AMD Family 14h processors: "Brazos" (C/E/G/Z-Series) |
14 | * AMD Family 15h processors: "Bulldozer" | 14 | * AMD Family 15h processors: "Bulldozer" |
15 | 15 | ||
16 | Prefix: 'k10temp' | 16 | Prefix: 'k10temp' |
@@ -20,12 +20,16 @@ Supported chips: | |||
20 | http://support.amd.com/us/Processor_TechDocs/31116.pdf | 20 | http://support.amd.com/us/Processor_TechDocs/31116.pdf |
21 | BIOS and Kernel Developer's Guide (BKDG) for AMD Family 11h Processors: | 21 | BIOS and Kernel Developer's Guide (BKDG) for AMD Family 11h Processors: |
22 | http://support.amd.com/us/Processor_TechDocs/41256.pdf | 22 | http://support.amd.com/us/Processor_TechDocs/41256.pdf |
23 | BIOS and Kernel Developer's Guide (BKDG) for AMD Family 12h Processors: | ||
24 | http://support.amd.com/us/Processor_TechDocs/41131.pdf | ||
23 | BIOS and Kernel Developer's Guide (BKDG) for AMD Family 14h Models 00h-0Fh Processors: | 25 | BIOS and Kernel Developer's Guide (BKDG) for AMD Family 14h Models 00h-0Fh Processors: |
24 | http://support.amd.com/us/Processor_TechDocs/43170.pdf | 26 | http://support.amd.com/us/Processor_TechDocs/43170.pdf |
25 | Revision Guide for AMD Family 10h Processors: | 27 | Revision Guide for AMD Family 10h Processors: |
26 | http://support.amd.com/us/Processor_TechDocs/41322.pdf | 28 | http://support.amd.com/us/Processor_TechDocs/41322.pdf |
27 | Revision Guide for AMD Family 11h Processors: | 29 | Revision Guide for AMD Family 11h Processors: |
28 | http://support.amd.com/us/Processor_TechDocs/41788.pdf | 30 | http://support.amd.com/us/Processor_TechDocs/41788.pdf |
31 | Revision Guide for AMD Family 12h Processors: | ||
32 | http://support.amd.com/us/Processor_TechDocs/44739.pdf | ||
29 | Revision Guide for AMD Family 14h Models 00h-0Fh Processors: | 33 | Revision Guide for AMD Family 14h Models 00h-0Fh Processors: |
30 | http://support.amd.com/us/Processor_TechDocs/47534.pdf | 34 | http://support.amd.com/us/Processor_TechDocs/47534.pdf |
31 | AMD Family 11h Processor Power and Thermal Data Sheet for Notebooks: | 35 | AMD Family 11h Processor Power and Thermal Data Sheet for Notebooks: |
diff --git a/Documentation/power/runtime_pm.txt b/Documentation/power/runtime_pm.txt index 22accb3eb40e..b24875b1ced5 100644 --- a/Documentation/power/runtime_pm.txt +++ b/Documentation/power/runtime_pm.txt | |||
@@ -501,13 +501,29 @@ helper functions described in Section 4. In that case, pm_runtime_resume() | |||
501 | should be used. Of course, for this purpose the device's run-time PM has to be | 501 | should be used. Of course, for this purpose the device's run-time PM has to be |
502 | enabled earlier by calling pm_runtime_enable(). | 502 | enabled earlier by calling pm_runtime_enable(). |
503 | 503 | ||
504 | If the device bus type's or driver's ->probe() or ->remove() callback runs | 504 | If the device bus type's or driver's ->probe() callback runs |
505 | pm_runtime_suspend() or pm_runtime_idle() or their asynchronous counterparts, | 505 | pm_runtime_suspend() or pm_runtime_idle() or their asynchronous counterparts, |
506 | they will fail returning -EAGAIN, because the device's usage counter is | 506 | they will fail returning -EAGAIN, because the device's usage counter is |
507 | incremented by the core before executing ->probe() and ->remove(). Still, it | 507 | incremented by the driver core before executing ->probe(). Still, it may be |
508 | may be desirable to suspend the device as soon as ->probe() or ->remove() has | 508 | desirable to suspend the device as soon as ->probe() has finished, so the driver |
509 | finished, so the PM core uses pm_runtime_idle_sync() to invoke the | 509 | core uses pm_runtime_put_sync() to invoke the subsystem-level idle callback for |
510 | subsystem-level idle callback for the device at that time. | 510 | the device at that time. |
511 | |||
512 | Moreover, the driver core prevents runtime PM callbacks from racing with the bus | ||
513 | notifier callback in __device_release_driver(), which is necessary, because the | ||
514 | notifier is used by some subsystems to carry out operations affecting the | ||
515 | runtime PM functionality. It does so by calling pm_runtime_get_sync() before | ||
516 | driver_sysfs_remove() and the BUS_NOTIFY_UNBIND_DRIVER notifications. This | ||
517 | resumes the device if it's in the suspended state and prevents it from | ||
518 | being suspended again while those routines are being executed. | ||
519 | |||
520 | To allow bus types and drivers to put devices into the suspended state by | ||
521 | calling pm_runtime_suspend() from their ->remove() routines, the driver core | ||
522 | executes pm_runtime_put_sync() after running the BUS_NOTIFY_UNBIND_DRIVER | ||
523 | notifications in __device_release_driver(). This requires bus types and | ||
524 | drivers to make their ->remove() callbacks avoid races with runtime PM directly, | ||
525 | but also it allows of more flexibility in the handling of devices during the | ||
526 | removal of their drivers. | ||
511 | 527 | ||
512 | The user space can effectively disallow the driver of the device to power manage | 528 | The user space can effectively disallow the driver of the device to power manage |
513 | it at run time by changing the value of its /sys/devices/.../power/control | 529 | it at run time by changing the value of its /sys/devices/.../power/control |
diff --git a/MAINTAINERS b/MAINTAINERS index d2dcef7cd9b2..ae563fad2271 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -1345,16 +1345,18 @@ F: drivers/auxdisplay/ | |||
1345 | F: include/linux/cfag12864b.h | 1345 | F: include/linux/cfag12864b.h |
1346 | 1346 | ||
1347 | AVR32 ARCHITECTURE | 1347 | AVR32 ARCHITECTURE |
1348 | M: Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com> | 1348 | M: Haavard Skinnemoen <hskinnemoen@gmail.com> |
1349 | M: Hans-Christian Egtvedt <egtvedt@samfundet.no> | ||
1349 | W: http://www.atmel.com/products/AVR32/ | 1350 | W: http://www.atmel.com/products/AVR32/ |
1350 | W: http://avr32linux.org/ | 1351 | W: http://avr32linux.org/ |
1351 | W: http://avrfreaks.net/ | 1352 | W: http://avrfreaks.net/ |
1352 | S: Supported | 1353 | S: Maintained |
1353 | F: arch/avr32/ | 1354 | F: arch/avr32/ |
1354 | 1355 | ||
1355 | AVR32/AT32AP MACHINE SUPPORT | 1356 | AVR32/AT32AP MACHINE SUPPORT |
1356 | M: Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com> | 1357 | M: Haavard Skinnemoen <hskinnemoen@gmail.com> |
1357 | S: Supported | 1358 | M: Hans-Christian Egtvedt <egtvedt@samfundet.no> |
1359 | S: Maintained | ||
1358 | F: arch/avr32/mach-at32ap/ | 1360 | F: arch/avr32/mach-at32ap/ |
1359 | 1361 | ||
1360 | AX.25 NETWORK LAYER | 1362 | AX.25 NETWORK LAYER |
@@ -1390,7 +1392,6 @@ F: include/linux/backlight.h | |||
1390 | BATMAN ADVANCED | 1392 | BATMAN ADVANCED |
1391 | M: Marek Lindner <lindner_marek@yahoo.de> | 1393 | M: Marek Lindner <lindner_marek@yahoo.de> |
1392 | M: Simon Wunderlich <siwu@hrz.tu-chemnitz.de> | 1394 | M: Simon Wunderlich <siwu@hrz.tu-chemnitz.de> |
1393 | M: Sven Eckelmann <sven@narfation.org> | ||
1394 | L: b.a.t.m.a.n@lists.open-mesh.org | 1395 | L: b.a.t.m.a.n@lists.open-mesh.org |
1395 | W: http://www.open-mesh.org/ | 1396 | W: http://www.open-mesh.org/ |
1396 | S: Maintained | 1397 | S: Maintained |
@@ -1423,7 +1424,6 @@ S: Supported | |||
1423 | F: arch/blackfin/ | 1424 | F: arch/blackfin/ |
1424 | 1425 | ||
1425 | BLACKFIN EMAC DRIVER | 1426 | BLACKFIN EMAC DRIVER |
1426 | M: Michael Hennerich <michael.hennerich@analog.com> | ||
1427 | L: uclinux-dist-devel@blackfin.uclinux.org | 1427 | L: uclinux-dist-devel@blackfin.uclinux.org |
1428 | W: http://blackfin.uclinux.org | 1428 | W: http://blackfin.uclinux.org |
1429 | S: Supported | 1429 | S: Supported |
@@ -1639,7 +1639,7 @@ CAN NETWORK LAYER | |||
1639 | M: Oliver Hartkopp <socketcan@hartkopp.net> | 1639 | M: Oliver Hartkopp <socketcan@hartkopp.net> |
1640 | M: Oliver Hartkopp <oliver.hartkopp@volkswagen.de> | 1640 | M: Oliver Hartkopp <oliver.hartkopp@volkswagen.de> |
1641 | M: Urs Thuermann <urs.thuermann@volkswagen.de> | 1641 | M: Urs Thuermann <urs.thuermann@volkswagen.de> |
1642 | L: socketcan-core@lists.berlios.de | 1642 | L: socketcan-core@lists.berlios.de (subscribers-only) |
1643 | L: netdev@vger.kernel.org | 1643 | L: netdev@vger.kernel.org |
1644 | W: http://developer.berlios.de/projects/socketcan/ | 1644 | W: http://developer.berlios.de/projects/socketcan/ |
1645 | S: Maintained | 1645 | S: Maintained |
@@ -1651,7 +1651,7 @@ F: include/linux/can/raw.h | |||
1651 | 1651 | ||
1652 | CAN NETWORK DRIVERS | 1652 | CAN NETWORK DRIVERS |
1653 | M: Wolfgang Grandegger <wg@grandegger.com> | 1653 | M: Wolfgang Grandegger <wg@grandegger.com> |
1654 | L: socketcan-core@lists.berlios.de | 1654 | L: socketcan-core@lists.berlios.de (subscribers-only) |
1655 | L: netdev@vger.kernel.org | 1655 | L: netdev@vger.kernel.org |
1656 | W: http://developer.berlios.de/projects/socketcan/ | 1656 | W: http://developer.berlios.de/projects/socketcan/ |
1657 | S: Maintained | 1657 | S: Maintained |
@@ -5181,6 +5181,7 @@ S: Supported | |||
5181 | F: drivers/net/qlcnic/ | 5181 | F: drivers/net/qlcnic/ |
5182 | 5182 | ||
5183 | QLOGIC QLGE 10Gb ETHERNET DRIVER | 5183 | QLOGIC QLGE 10Gb ETHERNET DRIVER |
5184 | M: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com> | ||
5184 | M: Ron Mercer <ron.mercer@qlogic.com> | 5185 | M: Ron Mercer <ron.mercer@qlogic.com> |
5185 | M: linux-driver@qlogic.com | 5186 | M: linux-driver@qlogic.com |
5186 | L: netdev@vger.kernel.org | 5187 | L: netdev@vger.kernel.org |
@@ -1,6 +1,6 @@ | |||
1 | Linux kernel release 2.6.xx <http://kernel.org/> | 1 | Linux kernel release 3.x <http://kernel.org/> |
2 | 2 | ||
3 | These are the release notes for Linux version 2.6. Read them carefully, | 3 | These are the release notes for Linux version 3. Read them carefully, |
4 | as they tell you what this is all about, explain how to install the | 4 | as they tell you what this is all about, explain how to install the |
5 | kernel, and what to do if something goes wrong. | 5 | kernel, and what to do if something goes wrong. |
6 | 6 | ||
@@ -62,10 +62,10 @@ INSTALLING the kernel source: | |||
62 | directory where you have permissions (eg. your home directory) and | 62 | directory where you have permissions (eg. your home directory) and |
63 | unpack it: | 63 | unpack it: |
64 | 64 | ||
65 | gzip -cd linux-2.6.XX.tar.gz | tar xvf - | 65 | gzip -cd linux-3.X.tar.gz | tar xvf - |
66 | 66 | ||
67 | or | 67 | or |
68 | bzip2 -dc linux-2.6.XX.tar.bz2 | tar xvf - | 68 | bzip2 -dc linux-3.X.tar.bz2 | tar xvf - |
69 | 69 | ||
70 | 70 | ||
71 | Replace "XX" with the version number of the latest kernel. | 71 | Replace "XX" with the version number of the latest kernel. |
@@ -75,15 +75,15 @@ INSTALLING the kernel source: | |||
75 | files. They should match the library, and not get messed up by | 75 | files. They should match the library, and not get messed up by |
76 | whatever the kernel-du-jour happens to be. | 76 | whatever the kernel-du-jour happens to be. |
77 | 77 | ||
78 | - You can also upgrade between 2.6.xx releases by patching. Patches are | 78 | - You can also upgrade between 3.x releases by patching. Patches are |
79 | distributed in the traditional gzip and the newer bzip2 format. To | 79 | distributed in the traditional gzip and the newer bzip2 format. To |
80 | install by patching, get all the newer patch files, enter the | 80 | install by patching, get all the newer patch files, enter the |
81 | top level directory of the kernel source (linux-2.6.xx) and execute: | 81 | top level directory of the kernel source (linux-3.x) and execute: |
82 | 82 | ||
83 | gzip -cd ../patch-2.6.xx.gz | patch -p1 | 83 | gzip -cd ../patch-3.x.gz | patch -p1 |
84 | 84 | ||
85 | or | 85 | or |
86 | bzip2 -dc ../patch-2.6.xx.bz2 | patch -p1 | 86 | bzip2 -dc ../patch-3.x.bz2 | patch -p1 |
87 | 87 | ||
88 | (repeat xx for all versions bigger than the version of your current | 88 | (repeat xx for all versions bigger than the version of your current |
89 | source tree, _in_order_) and you should be ok. You may want to remove | 89 | source tree, _in_order_) and you should be ok. You may want to remove |
@@ -91,9 +91,9 @@ INSTALLING the kernel source: | |||
91 | failed patches (xxx# or xxx.rej). If there are, either you or me has | 91 | failed patches (xxx# or xxx.rej). If there are, either you or me has |
92 | made a mistake. | 92 | made a mistake. |
93 | 93 | ||
94 | Unlike patches for the 2.6.x kernels, patches for the 2.6.x.y kernels | 94 | Unlike patches for the 3.x kernels, patches for the 3.x.y kernels |
95 | (also known as the -stable kernels) are not incremental but instead apply | 95 | (also known as the -stable kernels) are not incremental but instead apply |
96 | directly to the base 2.6.x kernel. Please read | 96 | directly to the base 3.x kernel. Please read |
97 | Documentation/applying-patches.txt for more information. | 97 | Documentation/applying-patches.txt for more information. |
98 | 98 | ||
99 | Alternatively, the script patch-kernel can be used to automate this | 99 | Alternatively, the script patch-kernel can be used to automate this |
@@ -107,14 +107,14 @@ INSTALLING the kernel source: | |||
107 | an alternative directory can be specified as the second argument. | 107 | an alternative directory can be specified as the second argument. |
108 | 108 | ||
109 | - If you are upgrading between releases using the stable series patches | 109 | - If you are upgrading between releases using the stable series patches |
110 | (for example, patch-2.6.xx.y), note that these "dot-releases" are | 110 | (for example, patch-3.x.y), note that these "dot-releases" are |
111 | not incremental and must be applied to the 2.6.xx base tree. For | 111 | not incremental and must be applied to the 3.x base tree. For |
112 | example, if your base kernel is 2.6.12 and you want to apply the | 112 | example, if your base kernel is 3.0 and you want to apply the |
113 | 2.6.12.3 patch, you do not and indeed must not first apply the | 113 | 3.0.3 patch, you do not and indeed must not first apply the |
114 | 2.6.12.1 and 2.6.12.2 patches. Similarly, if you are running kernel | 114 | 3.0.1 and 3.0.2 patches. Similarly, if you are running kernel |
115 | version 2.6.12.2 and want to jump to 2.6.12.3, you must first | 115 | version 3.0.2 and want to jump to 3.0.3, you must first |
116 | reverse the 2.6.12.2 patch (that is, patch -R) _before_ applying | 116 | reverse the 3.0.2 patch (that is, patch -R) _before_ applying |
117 | the 2.6.12.3 patch. | 117 | the 3.0.3 patch. |
118 | You can read more on this in Documentation/applying-patches.txt | 118 | You can read more on this in Documentation/applying-patches.txt |
119 | 119 | ||
120 | - Make sure you have no stale .o files and dependencies lying around: | 120 | - Make sure you have no stale .o files and dependencies lying around: |
@@ -126,7 +126,7 @@ INSTALLING the kernel source: | |||
126 | 126 | ||
127 | SOFTWARE REQUIREMENTS | 127 | SOFTWARE REQUIREMENTS |
128 | 128 | ||
129 | Compiling and running the 2.6.xx kernels requires up-to-date | 129 | Compiling and running the 3.x kernels requires up-to-date |
130 | versions of various software packages. Consult | 130 | versions of various software packages. Consult |
131 | Documentation/Changes for the minimum version numbers required | 131 | Documentation/Changes for the minimum version numbers required |
132 | and how to get updates for these packages. Beware that using | 132 | and how to get updates for these packages. Beware that using |
@@ -142,11 +142,11 @@ BUILD directory for the kernel: | |||
142 | Using the option "make O=output/dir" allow you to specify an alternate | 142 | Using the option "make O=output/dir" allow you to specify an alternate |
143 | place for the output files (including .config). | 143 | place for the output files (including .config). |
144 | Example: | 144 | Example: |
145 | kernel source code: /usr/src/linux-2.6.N | 145 | kernel source code: /usr/src/linux-3.N |
146 | build directory: /home/name/build/kernel | 146 | build directory: /home/name/build/kernel |
147 | 147 | ||
148 | To configure and build the kernel use: | 148 | To configure and build the kernel use: |
149 | cd /usr/src/linux-2.6.N | 149 | cd /usr/src/linux-3.N |
150 | make O=/home/name/build/kernel menuconfig | 150 | make O=/home/name/build/kernel menuconfig |
151 | make O=/home/name/build/kernel | 151 | make O=/home/name/build/kernel |
152 | sudo make O=/home/name/build/kernel modules_install install | 152 | sudo make O=/home/name/build/kernel modules_install install |
diff --git a/arch/arm/mach-at91/at91cap9.c b/arch/arm/mach-at91/at91cap9.c index 17fae4a42ab5..f1013d08bb57 100644 --- a/arch/arm/mach-at91/at91cap9.c +++ b/arch/arm/mach-at91/at91cap9.c | |||
@@ -223,15 +223,15 @@ static struct clk *periph_clocks[] __initdata = { | |||
223 | }; | 223 | }; |
224 | 224 | ||
225 | static struct clk_lookup periph_clocks_lookups[] = { | 225 | static struct clk_lookup periph_clocks_lookups[] = { |
226 | CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc.0", &utmi_clk), | 226 | CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc", &utmi_clk), |
227 | CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc.0", &udphs_clk), | 227 | CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc", &udphs_clk), |
228 | CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.0", &mmc0_clk), | 228 | CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.0", &mmc0_clk), |
229 | CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.1", &mmc1_clk), | 229 | CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.1", &mmc1_clk), |
230 | CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk), | 230 | CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk), |
231 | CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk), | 231 | CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk), |
232 | CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb_clk), | 232 | CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb_clk), |
233 | CLKDEV_CON_DEV_ID("ssc", "ssc.0", &ssc0_clk), | 233 | CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk), |
234 | CLKDEV_CON_DEV_ID("ssc", "ssc.1", &ssc1_clk), | 234 | CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk), |
235 | }; | 235 | }; |
236 | 236 | ||
237 | static struct clk_lookup usart_clocks_lookups[] = { | 237 | static struct clk_lookup usart_clocks_lookups[] = { |
diff --git a/arch/arm/mach-at91/at91cap9_devices.c b/arch/arm/mach-at91/at91cap9_devices.c index cd850ed6f335..dba0d8d8a4bd 100644 --- a/arch/arm/mach-at91/at91cap9_devices.c +++ b/arch/arm/mach-at91/at91cap9_devices.c | |||
@@ -1220,7 +1220,7 @@ void __init at91_set_serial_console(unsigned portnr) | |||
1220 | { | 1220 | { |
1221 | if (portnr < ATMEL_MAX_UART) { | 1221 | if (portnr < ATMEL_MAX_UART) { |
1222 | atmel_default_console_device = at91_uarts[portnr]; | 1222 | atmel_default_console_device = at91_uarts[portnr]; |
1223 | at91cap9_set_console_clock(portnr); | 1223 | at91cap9_set_console_clock(at91_uarts[portnr]->id); |
1224 | } | 1224 | } |
1225 | } | 1225 | } |
1226 | 1226 | ||
diff --git a/arch/arm/mach-at91/at91rm9200.c b/arch/arm/mach-at91/at91rm9200.c index b228ce9e21a1..83a1a3fee554 100644 --- a/arch/arm/mach-at91/at91rm9200.c +++ b/arch/arm/mach-at91/at91rm9200.c | |||
@@ -199,9 +199,9 @@ static struct clk_lookup periph_clocks_lookups[] = { | |||
199 | CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.1", &tc3_clk), | 199 | CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.1", &tc3_clk), |
200 | CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.1", &tc4_clk), | 200 | CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.1", &tc4_clk), |
201 | CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.1", &tc5_clk), | 201 | CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.1", &tc5_clk), |
202 | CLKDEV_CON_DEV_ID("ssc", "ssc.0", &ssc0_clk), | 202 | CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk), |
203 | CLKDEV_CON_DEV_ID("ssc", "ssc.1", &ssc1_clk), | 203 | CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk), |
204 | CLKDEV_CON_DEV_ID("ssc", "ssc.2", &ssc2_clk), | 204 | CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk), |
205 | }; | 205 | }; |
206 | 206 | ||
207 | static struct clk_lookup usart_clocks_lookups[] = { | 207 | static struct clk_lookup usart_clocks_lookups[] = { |
diff --git a/arch/arm/mach-at91/at91rm9200_devices.c b/arch/arm/mach-at91/at91rm9200_devices.c index a0ba475be04c..7227755ffec6 100644 --- a/arch/arm/mach-at91/at91rm9200_devices.c +++ b/arch/arm/mach-at91/at91rm9200_devices.c | |||
@@ -1135,7 +1135,7 @@ void __init at91_set_serial_console(unsigned portnr) | |||
1135 | { | 1135 | { |
1136 | if (portnr < ATMEL_MAX_UART) { | 1136 | if (portnr < ATMEL_MAX_UART) { |
1137 | atmel_default_console_device = at91_uarts[portnr]; | 1137 | atmel_default_console_device = at91_uarts[portnr]; |
1138 | at91rm9200_set_console_clock(portnr); | 1138 | at91rm9200_set_console_clock(at91_uarts[portnr]->id); |
1139 | } | 1139 | } |
1140 | } | 1140 | } |
1141 | 1141 | ||
diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c index 1fdeb9058a76..39f81f47b4ba 100644 --- a/arch/arm/mach-at91/at91sam9260_devices.c +++ b/arch/arm/mach-at91/at91sam9260_devices.c | |||
@@ -1173,7 +1173,7 @@ void __init at91_set_serial_console(unsigned portnr) | |||
1173 | { | 1173 | { |
1174 | if (portnr < ATMEL_MAX_UART) { | 1174 | if (portnr < ATMEL_MAX_UART) { |
1175 | atmel_default_console_device = at91_uarts[portnr]; | 1175 | atmel_default_console_device = at91_uarts[portnr]; |
1176 | at91sam9260_set_console_clock(portnr); | 1176 | at91sam9260_set_console_clock(at91_uarts[portnr]->id); |
1177 | } | 1177 | } |
1178 | } | 1178 | } |
1179 | 1179 | ||
diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c index 3eb4538fceeb..5004bf0a05f2 100644 --- a/arch/arm/mach-at91/at91sam9261_devices.c +++ b/arch/arm/mach-at91/at91sam9261_devices.c | |||
@@ -1013,7 +1013,7 @@ void __init at91_set_serial_console(unsigned portnr) | |||
1013 | { | 1013 | { |
1014 | if (portnr < ATMEL_MAX_UART) { | 1014 | if (portnr < ATMEL_MAX_UART) { |
1015 | atmel_default_console_device = at91_uarts[portnr]; | 1015 | atmel_default_console_device = at91_uarts[portnr]; |
1016 | at91sam9261_set_console_clock(portnr); | 1016 | at91sam9261_set_console_clock(at91_uarts[portnr]->id); |
1017 | } | 1017 | } |
1018 | } | 1018 | } |
1019 | 1019 | ||
diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c index ffe081b77ed0..a050f41fc860 100644 --- a/arch/arm/mach-at91/at91sam9263_devices.c +++ b/arch/arm/mach-at91/at91sam9263_devices.c | |||
@@ -1395,7 +1395,7 @@ void __init at91_set_serial_console(unsigned portnr) | |||
1395 | { | 1395 | { |
1396 | if (portnr < ATMEL_MAX_UART) { | 1396 | if (portnr < ATMEL_MAX_UART) { |
1397 | atmel_default_console_device = at91_uarts[portnr]; | 1397 | atmel_default_console_device = at91_uarts[portnr]; |
1398 | at91sam9263_set_console_clock(portnr); | 1398 | at91sam9263_set_console_clock(at91_uarts[portnr]->id); |
1399 | } | 1399 | } |
1400 | } | 1400 | } |
1401 | 1401 | ||
diff --git a/arch/arm/mach-at91/at91sam9g45.c b/arch/arm/mach-at91/at91sam9g45.c index 2bb6ff9af1c7..11e214121b23 100644 --- a/arch/arm/mach-at91/at91sam9g45.c +++ b/arch/arm/mach-at91/at91sam9g45.c | |||
@@ -217,11 +217,11 @@ static struct clk *periph_clocks[] __initdata = { | |||
217 | static struct clk_lookup periph_clocks_lookups[] = { | 217 | static struct clk_lookup periph_clocks_lookups[] = { |
218 | /* One additional fake clock for ohci */ | 218 | /* One additional fake clock for ohci */ |
219 | CLKDEV_CON_ID("ohci_clk", &uhphs_clk), | 219 | CLKDEV_CON_ID("ohci_clk", &uhphs_clk), |
220 | CLKDEV_CON_DEV_ID("ehci_clk", "atmel-ehci.0", &uhphs_clk), | 220 | CLKDEV_CON_DEV_ID("ehci_clk", "atmel-ehci", &uhphs_clk), |
221 | CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc.0", &utmi_clk), | 221 | CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc", &utmi_clk), |
222 | CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc.0", &udphs_clk), | 222 | CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc", &udphs_clk), |
223 | CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.0", &mmc0_clk), | 223 | CLKDEV_CON_DEV_ID("mci_clk", "atmel_mci.0", &mmc0_clk), |
224 | CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.1", &mmc1_clk), | 224 | CLKDEV_CON_DEV_ID("mci_clk", "atmel_mci.1", &mmc1_clk), |
225 | CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk), | 225 | CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk), |
226 | CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk), | 226 | CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk), |
227 | CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb0_clk), | 227 | CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb0_clk), |
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c index 05674865bc21..600bffb01edb 100644 --- a/arch/arm/mach-at91/at91sam9g45_devices.c +++ b/arch/arm/mach-at91/at91sam9g45_devices.c | |||
@@ -1550,7 +1550,7 @@ void __init at91_set_serial_console(unsigned portnr) | |||
1550 | { | 1550 | { |
1551 | if (portnr < ATMEL_MAX_UART) { | 1551 | if (portnr < ATMEL_MAX_UART) { |
1552 | atmel_default_console_device = at91_uarts[portnr]; | 1552 | atmel_default_console_device = at91_uarts[portnr]; |
1553 | at91sam9g45_set_console_clock(portnr); | 1553 | at91sam9g45_set_console_clock(at91_uarts[portnr]->id); |
1554 | } | 1554 | } |
1555 | } | 1555 | } |
1556 | 1556 | ||
diff --git a/arch/arm/mach-at91/at91sam9rl.c b/arch/arm/mach-at91/at91sam9rl.c index 1a40f16b66c8..29dff18ed130 100644 --- a/arch/arm/mach-at91/at91sam9rl.c +++ b/arch/arm/mach-at91/at91sam9rl.c | |||
@@ -191,8 +191,8 @@ static struct clk *periph_clocks[] __initdata = { | |||
191 | }; | 191 | }; |
192 | 192 | ||
193 | static struct clk_lookup periph_clocks_lookups[] = { | 193 | static struct clk_lookup periph_clocks_lookups[] = { |
194 | CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc.0", &utmi_clk), | 194 | CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc", &utmi_clk), |
195 | CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc.0", &udphs_clk), | 195 | CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc", &udphs_clk), |
196 | CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tc0_clk), | 196 | CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tc0_clk), |
197 | CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.0", &tc1_clk), | 197 | CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.0", &tc1_clk), |
198 | CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.0", &tc2_clk), | 198 | CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.0", &tc2_clk), |
diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c index c296045f2b6a..aacb19dc9225 100644 --- a/arch/arm/mach-at91/at91sam9rl_devices.c +++ b/arch/arm/mach-at91/at91sam9rl_devices.c | |||
@@ -1168,7 +1168,7 @@ void __init at91_set_serial_console(unsigned portnr) | |||
1168 | { | 1168 | { |
1169 | if (portnr < ATMEL_MAX_UART) { | 1169 | if (portnr < ATMEL_MAX_UART) { |
1170 | atmel_default_console_device = at91_uarts[portnr]; | 1170 | atmel_default_console_device = at91_uarts[portnr]; |
1171 | at91sam9rl_set_console_clock(portnr); | 1171 | at91sam9rl_set_console_clock(at91_uarts[portnr]->id); |
1172 | } | 1172 | } |
1173 | } | 1173 | } |
1174 | 1174 | ||
diff --git a/arch/arm/mach-at91/board-cap9adk.c b/arch/arm/mach-at91/board-cap9adk.c index 1904fdf87613..cdb65d483250 100644 --- a/arch/arm/mach-at91/board-cap9adk.c +++ b/arch/arm/mach-at91/board-cap9adk.c | |||
@@ -215,7 +215,7 @@ static void __init cap9adk_add_device_nand(void) | |||
215 | csa = at91_sys_read(AT91_MATRIX_EBICSA); | 215 | csa = at91_sys_read(AT91_MATRIX_EBICSA); |
216 | at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_VDDIOMSEL_3_3V); | 216 | at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_VDDIOMSEL_3_3V); |
217 | 217 | ||
218 | cap9adk_nand_data.bus_width_16 = !board_have_nand_8bit(); | 218 | cap9adk_nand_data.bus_width_16 = board_have_nand_16bit(); |
219 | /* setup bus-width (8 or 16) */ | 219 | /* setup bus-width (8 or 16) */ |
220 | if (cap9adk_nand_data.bus_width_16) | 220 | if (cap9adk_nand_data.bus_width_16) |
221 | cap9adk_nand_smc_config.mode |= AT91_SMC_DBW_16; | 221 | cap9adk_nand_smc_config.mode |= AT91_SMC_DBW_16; |
diff --git a/arch/arm/mach-at91/board-sam9260ek.c b/arch/arm/mach-at91/board-sam9260ek.c index d600dc123227..5c240743c5b7 100644 --- a/arch/arm/mach-at91/board-sam9260ek.c +++ b/arch/arm/mach-at91/board-sam9260ek.c | |||
@@ -214,7 +214,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = { | |||
214 | 214 | ||
215 | static void __init ek_add_device_nand(void) | 215 | static void __init ek_add_device_nand(void) |
216 | { | 216 | { |
217 | ek_nand_data.bus_width_16 = !board_have_nand_8bit(); | 217 | ek_nand_data.bus_width_16 = board_have_nand_16bit(); |
218 | /* setup bus-width (8 or 16) */ | 218 | /* setup bus-width (8 or 16) */ |
219 | if (ek_nand_data.bus_width_16) | 219 | if (ek_nand_data.bus_width_16) |
220 | ek_nand_smc_config.mode |= AT91_SMC_DBW_16; | 220 | ek_nand_smc_config.mode |= AT91_SMC_DBW_16; |
diff --git a/arch/arm/mach-at91/board-sam9261ek.c b/arch/arm/mach-at91/board-sam9261ek.c index f897f84d43dc..b60c22b6e241 100644 --- a/arch/arm/mach-at91/board-sam9261ek.c +++ b/arch/arm/mach-at91/board-sam9261ek.c | |||
@@ -220,7 +220,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = { | |||
220 | 220 | ||
221 | static void __init ek_add_device_nand(void) | 221 | static void __init ek_add_device_nand(void) |
222 | { | 222 | { |
223 | ek_nand_data.bus_width_16 = !board_have_nand_8bit(); | 223 | ek_nand_data.bus_width_16 = board_have_nand_16bit(); |
224 | /* setup bus-width (8 or 16) */ | 224 | /* setup bus-width (8 or 16) */ |
225 | if (ek_nand_data.bus_width_16) | 225 | if (ek_nand_data.bus_width_16) |
226 | ek_nand_smc_config.mode |= AT91_SMC_DBW_16; | 226 | ek_nand_smc_config.mode |= AT91_SMC_DBW_16; |
diff --git a/arch/arm/mach-at91/board-sam9263ek.c b/arch/arm/mach-at91/board-sam9263ek.c index 605b26f40a4c..9bbdc92ea194 100644 --- a/arch/arm/mach-at91/board-sam9263ek.c +++ b/arch/arm/mach-at91/board-sam9263ek.c | |||
@@ -221,7 +221,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = { | |||
221 | 221 | ||
222 | static void __init ek_add_device_nand(void) | 222 | static void __init ek_add_device_nand(void) |
223 | { | 223 | { |
224 | ek_nand_data.bus_width_16 = !board_have_nand_8bit(); | 224 | ek_nand_data.bus_width_16 = board_have_nand_16bit(); |
225 | /* setup bus-width (8 or 16) */ | 225 | /* setup bus-width (8 or 16) */ |
226 | if (ek_nand_data.bus_width_16) | 226 | if (ek_nand_data.bus_width_16) |
227 | ek_nand_smc_config.mode |= AT91_SMC_DBW_16; | 227 | ek_nand_smc_config.mode |= AT91_SMC_DBW_16; |
diff --git a/arch/arm/mach-at91/board-sam9g20ek.c b/arch/arm/mach-at91/board-sam9g20ek.c index 7624cf0d006b..1325a50101a8 100644 --- a/arch/arm/mach-at91/board-sam9g20ek.c +++ b/arch/arm/mach-at91/board-sam9g20ek.c | |||
@@ -198,7 +198,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = { | |||
198 | 198 | ||
199 | static void __init ek_add_device_nand(void) | 199 | static void __init ek_add_device_nand(void) |
200 | { | 200 | { |
201 | ek_nand_data.bus_width_16 = !board_have_nand_8bit(); | 201 | ek_nand_data.bus_width_16 = board_have_nand_16bit(); |
202 | /* setup bus-width (8 or 16) */ | 202 | /* setup bus-width (8 or 16) */ |
203 | if (ek_nand_data.bus_width_16) | 203 | if (ek_nand_data.bus_width_16) |
204 | ek_nand_smc_config.mode |= AT91_SMC_DBW_16; | 204 | ek_nand_smc_config.mode |= AT91_SMC_DBW_16; |
diff --git a/arch/arm/mach-at91/board-sam9m10g45ek.c b/arch/arm/mach-at91/board-sam9m10g45ek.c index 063c95d0e8f0..33eaa135f248 100644 --- a/arch/arm/mach-at91/board-sam9m10g45ek.c +++ b/arch/arm/mach-at91/board-sam9m10g45ek.c | |||
@@ -178,7 +178,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = { | |||
178 | 178 | ||
179 | static void __init ek_add_device_nand(void) | 179 | static void __init ek_add_device_nand(void) |
180 | { | 180 | { |
181 | ek_nand_data.bus_width_16 = !board_have_nand_8bit(); | 181 | ek_nand_data.bus_width_16 = board_have_nand_16bit(); |
182 | /* setup bus-width (8 or 16) */ | 182 | /* setup bus-width (8 or 16) */ |
183 | if (ek_nand_data.bus_width_16) | 183 | if (ek_nand_data.bus_width_16) |
184 | ek_nand_smc_config.mode |= AT91_SMC_DBW_16; | 184 | ek_nand_smc_config.mode |= AT91_SMC_DBW_16; |
diff --git a/arch/arm/mach-at91/include/mach/system_rev.h b/arch/arm/mach-at91/include/mach/system_rev.h index b855ee75f72c..8f4866045b41 100644 --- a/arch/arm/mach-at91/include/mach/system_rev.h +++ b/arch/arm/mach-at91/include/mach/system_rev.h | |||
@@ -13,13 +13,13 @@ | |||
13 | * the 16-31 bit are reserved for at91 generic information | 13 | * the 16-31 bit are reserved for at91 generic information |
14 | * | 14 | * |
15 | * bit 31: | 15 | * bit 31: |
16 | * 0 => nand 16 bit | 16 | * 0 => nand 8 bit |
17 | * 1 => nand 8 bit | 17 | * 1 => nand 16 bit |
18 | */ | 18 | */ |
19 | #define BOARD_HAVE_NAND_8BIT (1 << 31) | 19 | #define BOARD_HAVE_NAND_16BIT (1 << 31) |
20 | static int inline board_have_nand_8bit(void) | 20 | static inline int board_have_nand_16bit(void) |
21 | { | 21 | { |
22 | return system_rev & BOARD_HAVE_NAND_8BIT; | 22 | return system_rev & BOARD_HAVE_NAND_16BIT; |
23 | } | 23 | } |
24 | 24 | ||
25 | #endif /* __ARCH_SYSTEM_REV_H__ */ | 25 | #endif /* __ARCH_SYSTEM_REV_H__ */ |
diff --git a/arch/arm/mach-shmobile/board-ag5evm.c b/arch/arm/mach-shmobile/board-ag5evm.c index 1e2aba23e0d6..ce5c2513c6ce 100644 --- a/arch/arm/mach-shmobile/board-ag5evm.c +++ b/arch/arm/mach-shmobile/board-ag5evm.c | |||
@@ -381,7 +381,7 @@ void ag5evm_sdhi1_set_pwr(struct platform_device *pdev, int state) | |||
381 | gpio_set_value(GPIO_PORT114, state); | 381 | gpio_set_value(GPIO_PORT114, state); |
382 | } | 382 | } |
383 | 383 | ||
384 | static struct sh_mobile_sdhi_info sh_sdhi1_platdata = { | 384 | static struct sh_mobile_sdhi_info sh_sdhi1_info = { |
385 | .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE, | 385 | .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE, |
386 | .tmio_caps = MMC_CAP_NONREMOVABLE | MMC_CAP_SDIO_IRQ, | 386 | .tmio_caps = MMC_CAP_NONREMOVABLE | MMC_CAP_SDIO_IRQ, |
387 | .tmio_ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, | 387 | .tmio_ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, |
@@ -413,7 +413,7 @@ static struct platform_device sdhi1_device = { | |||
413 | .name = "sh_mobile_sdhi", | 413 | .name = "sh_mobile_sdhi", |
414 | .id = 1, | 414 | .id = 1, |
415 | .dev = { | 415 | .dev = { |
416 | .platform_data = &sh_sdhi1_platdata, | 416 | .platform_data = &sh_sdhi1_info, |
417 | }, | 417 | }, |
418 | .num_resources = ARRAY_SIZE(sdhi1_resources), | 418 | .num_resources = ARRAY_SIZE(sdhi1_resources), |
419 | .resource = sdhi1_resources, | 419 | .resource = sdhi1_resources, |
diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c index f6b687f61c28..803bc6edfca4 100644 --- a/arch/arm/mach-shmobile/board-ap4evb.c +++ b/arch/arm/mach-shmobile/board-ap4evb.c | |||
@@ -913,7 +913,7 @@ static struct i2c_board_info imx074_info = { | |||
913 | I2C_BOARD_INFO("imx074", 0x1a), | 913 | I2C_BOARD_INFO("imx074", 0x1a), |
914 | }; | 914 | }; |
915 | 915 | ||
916 | struct soc_camera_link imx074_link = { | 916 | static struct soc_camera_link imx074_link = { |
917 | .bus_id = 0, | 917 | .bus_id = 0, |
918 | .board_info = &imx074_info, | 918 | .board_info = &imx074_info, |
919 | .i2c_adapter_id = 0, | 919 | .i2c_adapter_id = 0, |
diff --git a/arch/arm/mach-shmobile/board-mackerel.c b/arch/arm/mach-shmobile/board-mackerel.c index 7e1d37584321..3802f2afabef 100644 --- a/arch/arm/mach-shmobile/board-mackerel.c +++ b/arch/arm/mach-shmobile/board-mackerel.c | |||
@@ -1287,9 +1287,9 @@ static struct platform_device *mackerel_devices[] __initdata = { | |||
1287 | &nor_flash_device, | 1287 | &nor_flash_device, |
1288 | &smc911x_device, | 1288 | &smc911x_device, |
1289 | &lcdc_device, | 1289 | &lcdc_device, |
1290 | &usbhs0_device, | ||
1291 | &usb1_host_device, | 1290 | &usb1_host_device, |
1292 | &usbhs1_device, | 1291 | &usbhs1_device, |
1292 | &usbhs0_device, | ||
1293 | &leds_device, | 1293 | &leds_device, |
1294 | &fsi_device, | 1294 | &fsi_device, |
1295 | &fsi_ak4643_device, | 1295 | &fsi_ak4643_device, |
diff --git a/arch/powerpc/boot/dts/p1022ds.dts b/arch/powerpc/boot/dts/p1022ds.dts index 4f685a779f4c..98d9426d4b85 100644 --- a/arch/powerpc/boot/dts/p1022ds.dts +++ b/arch/powerpc/boot/dts/p1022ds.dts | |||
@@ -209,8 +209,10 @@ | |||
209 | wm8776:codec@1a { | 209 | wm8776:codec@1a { |
210 | compatible = "wlf,wm8776"; | 210 | compatible = "wlf,wm8776"; |
211 | reg = <0x1a>; | 211 | reg = <0x1a>; |
212 | /* MCLK source is a stand-alone oscillator */ | 212 | /* |
213 | clock-frequency = <12288000>; | 213 | * clock-frequency will be set by U-Boot if |
214 | * the clock is enabled. | ||
215 | */ | ||
214 | }; | 216 | }; |
215 | }; | 217 | }; |
216 | 218 | ||
@@ -280,7 +282,8 @@ | |||
280 | codec-handle = <&wm8776>; | 282 | codec-handle = <&wm8776>; |
281 | fsl,playback-dma = <&dma00>; | 283 | fsl,playback-dma = <&dma00>; |
282 | fsl,capture-dma = <&dma01>; | 284 | fsl,capture-dma = <&dma01>; |
283 | fsl,fifo-depth = <16>; | 285 | fsl,fifo-depth = <15>; |
286 | fsl,ssi-asynchronous; | ||
284 | }; | 287 | }; |
285 | 288 | ||
286 | dma@c300 { | 289 | dma@c300 { |
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig index c9f212b5f3de..80bc5de7ee1d 100644 --- a/arch/powerpc/configs/pseries_defconfig +++ b/arch/powerpc/configs/pseries_defconfig | |||
@@ -148,7 +148,6 @@ CONFIG_SCSI_SAS_ATTRS=m | |||
148 | CONFIG_SCSI_CXGB3_ISCSI=m | 148 | CONFIG_SCSI_CXGB3_ISCSI=m |
149 | CONFIG_SCSI_CXGB4_ISCSI=m | 149 | CONFIG_SCSI_CXGB4_ISCSI=m |
150 | CONFIG_SCSI_BNX2_ISCSI=m | 150 | CONFIG_SCSI_BNX2_ISCSI=m |
151 | CONFIG_SCSI_BNX2_ISCSI=m | ||
152 | CONFIG_BE2ISCSI=m | 151 | CONFIG_BE2ISCSI=m |
153 | CONFIG_SCSI_IBMVSCSI=y | 152 | CONFIG_SCSI_IBMVSCSI=y |
154 | CONFIG_SCSI_IBMVFC=m | 153 | CONFIG_SCSI_IBMVFC=m |
diff --git a/arch/powerpc/kernel/rtas-rtc.c b/arch/powerpc/kernel/rtas-rtc.c index 77578c093dda..c57c19358a26 100644 --- a/arch/powerpc/kernel/rtas-rtc.c +++ b/arch/powerpc/kernel/rtas-rtc.c | |||
@@ -4,6 +4,7 @@ | |||
4 | #include <linux/init.h> | 4 | #include <linux/init.h> |
5 | #include <linux/rtc.h> | 5 | #include <linux/rtc.h> |
6 | #include <linux/delay.h> | 6 | #include <linux/delay.h> |
7 | #include <linux/ratelimit.h> | ||
7 | #include <asm/prom.h> | 8 | #include <asm/prom.h> |
8 | #include <asm/rtas.h> | 9 | #include <asm/rtas.h> |
9 | #include <asm/time.h> | 10 | #include <asm/time.h> |
@@ -29,9 +30,10 @@ unsigned long __init rtas_get_boot_time(void) | |||
29 | } | 30 | } |
30 | } while (wait_time && (get_tb() < max_wait_tb)); | 31 | } while (wait_time && (get_tb() < max_wait_tb)); |
31 | 32 | ||
32 | if (error != 0 && printk_ratelimit()) { | 33 | if (error != 0) { |
33 | printk(KERN_WARNING "error: reading the clock failed (%d)\n", | 34 | printk_ratelimited(KERN_WARNING |
34 | error); | 35 | "error: reading the clock failed (%d)\n", |
36 | error); | ||
35 | return 0; | 37 | return 0; |
36 | } | 38 | } |
37 | 39 | ||
@@ -55,19 +57,21 @@ void rtas_get_rtc_time(struct rtc_time *rtc_tm) | |||
55 | 57 | ||
56 | wait_time = rtas_busy_delay_time(error); | 58 | wait_time = rtas_busy_delay_time(error); |
57 | if (wait_time) { | 59 | if (wait_time) { |
58 | if (in_interrupt() && printk_ratelimit()) { | 60 | if (in_interrupt()) { |
59 | memset(rtc_tm, 0, sizeof(struct rtc_time)); | 61 | memset(rtc_tm, 0, sizeof(struct rtc_time)); |
60 | printk(KERN_WARNING "error: reading clock" | 62 | printk_ratelimited(KERN_WARNING |
61 | " would delay interrupt\n"); | 63 | "error: reading clock " |
64 | "would delay interrupt\n"); | ||
62 | return; /* delay not allowed */ | 65 | return; /* delay not allowed */ |
63 | } | 66 | } |
64 | msleep(wait_time); | 67 | msleep(wait_time); |
65 | } | 68 | } |
66 | } while (wait_time && (get_tb() < max_wait_tb)); | 69 | } while (wait_time && (get_tb() < max_wait_tb)); |
67 | 70 | ||
68 | if (error != 0 && printk_ratelimit()) { | 71 | if (error != 0) { |
69 | printk(KERN_WARNING "error: reading the clock failed (%d)\n", | 72 | printk_ratelimited(KERN_WARNING |
70 | error); | 73 | "error: reading the clock failed (%d)\n", |
74 | error); | ||
71 | return; | 75 | return; |
72 | } | 76 | } |
73 | 77 | ||
@@ -99,9 +103,10 @@ int rtas_set_rtc_time(struct rtc_time *tm) | |||
99 | } | 103 | } |
100 | } while (wait_time && (get_tb() < max_wait_tb)); | 104 | } while (wait_time && (get_tb() < max_wait_tb)); |
101 | 105 | ||
102 | if (error != 0 && printk_ratelimit()) | 106 | if (error != 0) |
103 | printk(KERN_WARNING "error: setting the clock failed (%d)\n", | 107 | printk_ratelimited(KERN_WARNING |
104 | error); | 108 | "error: setting the clock failed (%d)\n", |
109 | error); | ||
105 | 110 | ||
106 | return 0; | 111 | return 0; |
107 | } | 112 | } |
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c index b96a3a010c26..78b76dc54dfb 100644 --- a/arch/powerpc/kernel/signal_32.c +++ b/arch/powerpc/kernel/signal_32.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <linux/errno.h> | 25 | #include <linux/errno.h> |
26 | #include <linux/elf.h> | 26 | #include <linux/elf.h> |
27 | #include <linux/ptrace.h> | 27 | #include <linux/ptrace.h> |
28 | #include <linux/ratelimit.h> | ||
28 | #ifdef CONFIG_PPC64 | 29 | #ifdef CONFIG_PPC64 |
29 | #include <linux/syscalls.h> | 30 | #include <linux/syscalls.h> |
30 | #include <linux/compat.h> | 31 | #include <linux/compat.h> |
@@ -892,11 +893,12 @@ badframe: | |||
892 | printk("badframe in handle_rt_signal, regs=%p frame=%p newsp=%lx\n", | 893 | printk("badframe in handle_rt_signal, regs=%p frame=%p newsp=%lx\n", |
893 | regs, frame, newsp); | 894 | regs, frame, newsp); |
894 | #endif | 895 | #endif |
895 | if (show_unhandled_signals && printk_ratelimit()) | 896 | if (show_unhandled_signals) |
896 | printk(KERN_INFO "%s[%d]: bad frame in handle_rt_signal32: " | 897 | printk_ratelimited(KERN_INFO |
897 | "%p nip %08lx lr %08lx\n", | 898 | "%s[%d]: bad frame in handle_rt_signal32: " |
898 | current->comm, current->pid, | 899 | "%p nip %08lx lr %08lx\n", |
899 | addr, regs->nip, regs->link); | 900 | current->comm, current->pid, |
901 | addr, regs->nip, regs->link); | ||
900 | 902 | ||
901 | force_sigsegv(sig, current); | 903 | force_sigsegv(sig, current); |
902 | return 0; | 904 | return 0; |
@@ -1058,11 +1060,12 @@ long sys_rt_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8, | |||
1058 | return 0; | 1060 | return 0; |
1059 | 1061 | ||
1060 | bad: | 1062 | bad: |
1061 | if (show_unhandled_signals && printk_ratelimit()) | 1063 | if (show_unhandled_signals) |
1062 | printk(KERN_INFO "%s[%d]: bad frame in sys_rt_sigreturn: " | 1064 | printk_ratelimited(KERN_INFO |
1063 | "%p nip %08lx lr %08lx\n", | 1065 | "%s[%d]: bad frame in sys_rt_sigreturn: " |
1064 | current->comm, current->pid, | 1066 | "%p nip %08lx lr %08lx\n", |
1065 | rt_sf, regs->nip, regs->link); | 1067 | current->comm, current->pid, |
1068 | rt_sf, regs->nip, regs->link); | ||
1066 | 1069 | ||
1067 | force_sig(SIGSEGV, current); | 1070 | force_sig(SIGSEGV, current); |
1068 | return 0; | 1071 | return 0; |
@@ -1149,12 +1152,12 @@ int sys_debug_setcontext(struct ucontext __user *ctx, | |||
1149 | * We kill the task with a SIGSEGV in this situation. | 1152 | * We kill the task with a SIGSEGV in this situation. |
1150 | */ | 1153 | */ |
1151 | if (do_setcontext(ctx, regs, 1)) { | 1154 | if (do_setcontext(ctx, regs, 1)) { |
1152 | if (show_unhandled_signals && printk_ratelimit()) | 1155 | if (show_unhandled_signals) |
1153 | printk(KERN_INFO "%s[%d]: bad frame in " | 1156 | printk_ratelimited(KERN_INFO "%s[%d]: bad frame in " |
1154 | "sys_debug_setcontext: %p nip %08lx " | 1157 | "sys_debug_setcontext: %p nip %08lx " |
1155 | "lr %08lx\n", | 1158 | "lr %08lx\n", |
1156 | current->comm, current->pid, | 1159 | current->comm, current->pid, |
1157 | ctx, regs->nip, regs->link); | 1160 | ctx, regs->nip, regs->link); |
1158 | 1161 | ||
1159 | force_sig(SIGSEGV, current); | 1162 | force_sig(SIGSEGV, current); |
1160 | goto out; | 1163 | goto out; |
@@ -1236,11 +1239,12 @@ badframe: | |||
1236 | printk("badframe in handle_signal, regs=%p frame=%p newsp=%lx\n", | 1239 | printk("badframe in handle_signal, regs=%p frame=%p newsp=%lx\n", |
1237 | regs, frame, newsp); | 1240 | regs, frame, newsp); |
1238 | #endif | 1241 | #endif |
1239 | if (show_unhandled_signals && printk_ratelimit()) | 1242 | if (show_unhandled_signals) |
1240 | printk(KERN_INFO "%s[%d]: bad frame in handle_signal32: " | 1243 | printk_ratelimited(KERN_INFO |
1241 | "%p nip %08lx lr %08lx\n", | 1244 | "%s[%d]: bad frame in handle_signal32: " |
1242 | current->comm, current->pid, | 1245 | "%p nip %08lx lr %08lx\n", |
1243 | frame, regs->nip, regs->link); | 1246 | current->comm, current->pid, |
1247 | frame, regs->nip, regs->link); | ||
1244 | 1248 | ||
1245 | force_sigsegv(sig, current); | 1249 | force_sigsegv(sig, current); |
1246 | return 0; | 1250 | return 0; |
@@ -1288,11 +1292,12 @@ long sys_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8, | |||
1288 | return 0; | 1292 | return 0; |
1289 | 1293 | ||
1290 | badframe: | 1294 | badframe: |
1291 | if (show_unhandled_signals && printk_ratelimit()) | 1295 | if (show_unhandled_signals) |
1292 | printk(KERN_INFO "%s[%d]: bad frame in sys_sigreturn: " | 1296 | printk_ratelimited(KERN_INFO |
1293 | "%p nip %08lx lr %08lx\n", | 1297 | "%s[%d]: bad frame in sys_sigreturn: " |
1294 | current->comm, current->pid, | 1298 | "%p nip %08lx lr %08lx\n", |
1295 | addr, regs->nip, regs->link); | 1299 | current->comm, current->pid, |
1300 | addr, regs->nip, regs->link); | ||
1296 | 1301 | ||
1297 | force_sig(SIGSEGV, current); | 1302 | force_sig(SIGSEGV, current); |
1298 | return 0; | 1303 | return 0; |
diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c index da989fff19cc..e91c736cc842 100644 --- a/arch/powerpc/kernel/signal_64.c +++ b/arch/powerpc/kernel/signal_64.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/elf.h> | 24 | #include <linux/elf.h> |
25 | #include <linux/ptrace.h> | 25 | #include <linux/ptrace.h> |
26 | #include <linux/module.h> | 26 | #include <linux/module.h> |
27 | #include <linux/ratelimit.h> | ||
27 | 28 | ||
28 | #include <asm/sigcontext.h> | 29 | #include <asm/sigcontext.h> |
29 | #include <asm/ucontext.h> | 30 | #include <asm/ucontext.h> |
@@ -380,10 +381,10 @@ badframe: | |||
380 | printk("badframe in sys_rt_sigreturn, regs=%p uc=%p &uc->uc_mcontext=%p\n", | 381 | printk("badframe in sys_rt_sigreturn, regs=%p uc=%p &uc->uc_mcontext=%p\n", |
381 | regs, uc, &uc->uc_mcontext); | 382 | regs, uc, &uc->uc_mcontext); |
382 | #endif | 383 | #endif |
383 | if (show_unhandled_signals && printk_ratelimit()) | 384 | if (show_unhandled_signals) |
384 | printk(regs->msr & MSR_64BIT ? fmt64 : fmt32, | 385 | printk_ratelimited(regs->msr & MSR_64BIT ? fmt64 : fmt32, |
385 | current->comm, current->pid, "rt_sigreturn", | 386 | current->comm, current->pid, "rt_sigreturn", |
386 | (long)uc, regs->nip, regs->link); | 387 | (long)uc, regs->nip, regs->link); |
387 | 388 | ||
388 | force_sig(SIGSEGV, current); | 389 | force_sig(SIGSEGV, current); |
389 | return 0; | 390 | return 0; |
@@ -468,10 +469,10 @@ badframe: | |||
468 | printk("badframe in setup_rt_frame, regs=%p frame=%p newsp=%lx\n", | 469 | printk("badframe in setup_rt_frame, regs=%p frame=%p newsp=%lx\n", |
469 | regs, frame, newsp); | 470 | regs, frame, newsp); |
470 | #endif | 471 | #endif |
471 | if (show_unhandled_signals && printk_ratelimit()) | 472 | if (show_unhandled_signals) |
472 | printk(regs->msr & MSR_64BIT ? fmt64 : fmt32, | 473 | printk_ratelimited(regs->msr & MSR_64BIT ? fmt64 : fmt32, |
473 | current->comm, current->pid, "setup_rt_frame", | 474 | current->comm, current->pid, "setup_rt_frame", |
474 | (long)frame, regs->nip, regs->link); | 475 | (long)frame, regs->nip, regs->link); |
475 | 476 | ||
476 | force_sigsegv(signr, current); | 477 | force_sigsegv(signr, current); |
477 | return 0; | 478 | return 0; |
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 0ff4ab98d50c..1a0141426cda 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
@@ -34,6 +34,7 @@ | |||
34 | #include <linux/bug.h> | 34 | #include <linux/bug.h> |
35 | #include <linux/kdebug.h> | 35 | #include <linux/kdebug.h> |
36 | #include <linux/debugfs.h> | 36 | #include <linux/debugfs.h> |
37 | #include <linux/ratelimit.h> | ||
37 | 38 | ||
38 | #include <asm/emulated_ops.h> | 39 | #include <asm/emulated_ops.h> |
39 | #include <asm/pgtable.h> | 40 | #include <asm/pgtable.h> |
@@ -197,12 +198,11 @@ void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr) | |||
197 | if (die("Exception in kernel mode", regs, signr)) | 198 | if (die("Exception in kernel mode", regs, signr)) |
198 | return; | 199 | return; |
199 | } else if (show_unhandled_signals && | 200 | } else if (show_unhandled_signals && |
200 | unhandled_signal(current, signr) && | 201 | unhandled_signal(current, signr)) { |
201 | printk_ratelimit()) { | 202 | printk_ratelimited(regs->msr & MSR_64BIT ? fmt64 : fmt32, |
202 | printk(regs->msr & MSR_64BIT ? fmt64 : fmt32, | 203 | current->comm, current->pid, signr, |
203 | current->comm, current->pid, signr, | 204 | addr, regs->nip, regs->link, code); |
204 | addr, regs->nip, regs->link, code); | 205 | } |
205 | } | ||
206 | 206 | ||
207 | memset(&info, 0, sizeof(info)); | 207 | memset(&info, 0, sizeof(info)); |
208 | info.si_signo = signr; | 208 | info.si_signo = signr; |
@@ -425,7 +425,7 @@ int machine_check_e500mc(struct pt_regs *regs) | |||
425 | unsigned long reason = mcsr; | 425 | unsigned long reason = mcsr; |
426 | int recoverable = 1; | 426 | int recoverable = 1; |
427 | 427 | ||
428 | if (reason & MCSR_BUS_RBERR) { | 428 | if (reason & MCSR_LD) { |
429 | recoverable = fsl_rio_mcheck_exception(regs); | 429 | recoverable = fsl_rio_mcheck_exception(regs); |
430 | if (recoverable == 1) | 430 | if (recoverable == 1) |
431 | goto silent_out; | 431 | goto silent_out; |
@@ -1342,9 +1342,8 @@ void altivec_assist_exception(struct pt_regs *regs) | |||
1342 | } else { | 1342 | } else { |
1343 | /* didn't recognize the instruction */ | 1343 | /* didn't recognize the instruction */ |
1344 | /* XXX quick hack for now: set the non-Java bit in the VSCR */ | 1344 | /* XXX quick hack for now: set the non-Java bit in the VSCR */ |
1345 | if (printk_ratelimit()) | 1345 | printk_ratelimited(KERN_ERR "Unrecognized altivec instruction " |
1346 | printk(KERN_ERR "Unrecognized altivec instruction " | 1346 | "in %s at %lx\n", current->comm, regs->nip); |
1347 | "in %s at %lx\n", current->comm, regs->nip); | ||
1348 | current->thread.vscr.u[3] |= 0x10000; | 1347 | current->thread.vscr.u[3] |= 0x10000; |
1349 | } | 1348 | } |
1350 | } | 1349 | } |
@@ -1548,9 +1547,8 @@ u32 ppc_warn_emulated; | |||
1548 | 1547 | ||
1549 | void ppc_warn_emulated_print(const char *type) | 1548 | void ppc_warn_emulated_print(const char *type) |
1550 | { | 1549 | { |
1551 | if (printk_ratelimit()) | 1550 | pr_warn_ratelimited("%s used emulated %s instruction\n", current->comm, |
1552 | pr_warning("%s used emulated %s instruction\n", current->comm, | 1551 | type); |
1553 | type); | ||
1554 | } | 1552 | } |
1555 | 1553 | ||
1556 | static int __init ppc_warn_emulated_init(void) | 1554 | static int __init ppc_warn_emulated_init(void) |
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c index 54f4fb994e99..ad35f66c69e8 100644 --- a/arch/powerpc/mm/fault.c +++ b/arch/powerpc/mm/fault.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/kdebug.h> | 31 | #include <linux/kdebug.h> |
32 | #include <linux/perf_event.h> | 32 | #include <linux/perf_event.h> |
33 | #include <linux/magic.h> | 33 | #include <linux/magic.h> |
34 | #include <linux/ratelimit.h> | ||
34 | 35 | ||
35 | #include <asm/firmware.h> | 36 | #include <asm/firmware.h> |
36 | #include <asm/page.h> | 37 | #include <asm/page.h> |
@@ -346,11 +347,10 @@ bad_area_nosemaphore: | |||
346 | return 0; | 347 | return 0; |
347 | } | 348 | } |
348 | 349 | ||
349 | if (is_exec && (error_code & DSISR_PROTFAULT) | 350 | if (is_exec && (error_code & DSISR_PROTFAULT)) |
350 | && printk_ratelimit()) | 351 | printk_ratelimited(KERN_CRIT "kernel tried to execute NX-protected" |
351 | printk(KERN_CRIT "kernel tried to execute NX-protected" | 352 | " page (%lx) - exploit attempt? (uid: %d)\n", |
352 | " page (%lx) - exploit attempt? (uid: %d)\n", | 353 | address, current_uid()); |
353 | address, current_uid()); | ||
354 | 354 | ||
355 | return SIGSEGV; | 355 | return SIGSEGV; |
356 | 356 | ||
diff --git a/arch/powerpc/sysdev/fsl_rio.c b/arch/powerpc/sysdev/fsl_rio.c index 5b206a2fe17c..b3fd081d56f5 100644 --- a/arch/powerpc/sysdev/fsl_rio.c +++ b/arch/powerpc/sysdev/fsl_rio.c | |||
@@ -283,23 +283,24 @@ static void __iomem *rio_regs_win; | |||
283 | #ifdef CONFIG_E500 | 283 | #ifdef CONFIG_E500 |
284 | int fsl_rio_mcheck_exception(struct pt_regs *regs) | 284 | int fsl_rio_mcheck_exception(struct pt_regs *regs) |
285 | { | 285 | { |
286 | const struct exception_table_entry *entry = NULL; | 286 | const struct exception_table_entry *entry; |
287 | unsigned long reason = mfspr(SPRN_MCSR); | 287 | unsigned long reason; |
288 | 288 | ||
289 | if (reason & MCSR_BUS_RBERR) { | 289 | if (!rio_regs_win) |
290 | reason = in_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR)); | 290 | return 0; |
291 | if (reason & (RIO_LTLEDCSR_IER | RIO_LTLEDCSR_PRT)) { | 291 | |
292 | /* Check if we are prepared to handle this fault */ | 292 | reason = in_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR)); |
293 | entry = search_exception_tables(regs->nip); | 293 | if (reason & (RIO_LTLEDCSR_IER | RIO_LTLEDCSR_PRT)) { |
294 | if (entry) { | 294 | /* Check if we are prepared to handle this fault */ |
295 | pr_debug("RIO: %s - MC Exception handled\n", | 295 | entry = search_exception_tables(regs->nip); |
296 | __func__); | 296 | if (entry) { |
297 | out_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR), | 297 | pr_debug("RIO: %s - MC Exception handled\n", |
298 | 0); | 298 | __func__); |
299 | regs->msr |= MSR_RI; | 299 | out_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR), |
300 | regs->nip = entry->fixup; | 300 | 0); |
301 | return 1; | 301 | regs->msr |= MSR_RI; |
302 | } | 302 | regs->nip = entry->fixup; |
303 | return 1; | ||
303 | } | 304 | } |
304 | } | 305 | } |
305 | 306 | ||
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index 3a8de5bb628a..58d7a534f877 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/pci.h> | 29 | #include <linux/pci.h> |
30 | #include <linux/slab.h> | 30 | #include <linux/slab.h> |
31 | #include <linux/syscore_ops.h> | 31 | #include <linux/syscore_ops.h> |
32 | #include <linux/ratelimit.h> | ||
32 | 33 | ||
33 | #include <asm/ptrace.h> | 34 | #include <asm/ptrace.h> |
34 | #include <asm/signal.h> | 35 | #include <asm/signal.h> |
@@ -1648,9 +1649,8 @@ static unsigned int _mpic_get_one_irq(struct mpic *mpic, int reg) | |||
1648 | return NO_IRQ; | 1649 | return NO_IRQ; |
1649 | } | 1650 | } |
1650 | if (unlikely(mpic->protected && test_bit(src, mpic->protected))) { | 1651 | if (unlikely(mpic->protected && test_bit(src, mpic->protected))) { |
1651 | if (printk_ratelimit()) | 1652 | printk_ratelimited(KERN_WARNING "%s: Got protected source %d !\n", |
1652 | printk(KERN_WARNING "%s: Got protected source %d !\n", | 1653 | mpic->name, (int)src); |
1653 | mpic->name, (int)src); | ||
1654 | mpic_eoi(mpic); | 1654 | mpic_eoi(mpic); |
1655 | return NO_IRQ; | 1655 | return NO_IRQ; |
1656 | } | 1656 | } |
@@ -1688,9 +1688,8 @@ unsigned int mpic_get_coreint_irq(void) | |||
1688 | return NO_IRQ; | 1688 | return NO_IRQ; |
1689 | } | 1689 | } |
1690 | if (unlikely(mpic->protected && test_bit(src, mpic->protected))) { | 1690 | if (unlikely(mpic->protected && test_bit(src, mpic->protected))) { |
1691 | if (printk_ratelimit()) | 1691 | printk_ratelimited(KERN_WARNING "%s: Got protected source %d !\n", |
1692 | printk(KERN_WARNING "%s: Got protected source %d !\n", | 1692 | mpic->name, (int)src); |
1693 | mpic->name, (int)src); | ||
1694 | return NO_IRQ; | 1693 | return NO_IRQ; |
1695 | } | 1694 | } |
1696 | 1695 | ||
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index f03338c2f088..bbdeb48bbf8e 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig | |||
@@ -348,6 +348,7 @@ config CPU_SUBTYPE_SH7720 | |||
348 | select SYS_SUPPORTS_CMT | 348 | select SYS_SUPPORTS_CMT |
349 | select ARCH_WANT_OPTIONAL_GPIOLIB | 349 | select ARCH_WANT_OPTIONAL_GPIOLIB |
350 | select USB_ARCH_HAS_OHCI | 350 | select USB_ARCH_HAS_OHCI |
351 | select USB_OHCI_SH if USB_OHCI_HCD | ||
351 | help | 352 | help |
352 | Select SH7720 if you have a SH3-DSP SH7720 CPU. | 353 | Select SH7720 if you have a SH3-DSP SH7720 CPU. |
353 | 354 | ||
@@ -357,6 +358,7 @@ config CPU_SUBTYPE_SH7721 | |||
357 | select CPU_HAS_DSP | 358 | select CPU_HAS_DSP |
358 | select SYS_SUPPORTS_CMT | 359 | select SYS_SUPPORTS_CMT |
359 | select USB_ARCH_HAS_OHCI | 360 | select USB_ARCH_HAS_OHCI |
361 | select USB_OHCI_SH if USB_OHCI_HCD | ||
360 | help | 362 | help |
361 | Select SH7721 if you have a SH3-DSP SH7721 CPU. | 363 | Select SH7721 if you have a SH3-DSP SH7721 CPU. |
362 | 364 | ||
@@ -440,6 +442,7 @@ config CPU_SUBTYPE_SH7763 | |||
440 | bool "Support SH7763 processor" | 442 | bool "Support SH7763 processor" |
441 | select CPU_SH4A | 443 | select CPU_SH4A |
442 | select USB_ARCH_HAS_OHCI | 444 | select USB_ARCH_HAS_OHCI |
445 | select USB_OHCI_SH if USB_OHCI_HCD | ||
443 | help | 446 | help |
444 | Select SH7763 if you have a SH4A SH7763(R5S77631) CPU. | 447 | Select SH7763 if you have a SH4A SH7763(R5S77631) CPU. |
445 | 448 | ||
@@ -467,7 +470,9 @@ config CPU_SUBTYPE_SH7786 | |||
467 | select GENERIC_CLOCKEVENTS_BROADCAST if SMP | 470 | select GENERIC_CLOCKEVENTS_BROADCAST if SMP |
468 | select ARCH_WANT_OPTIONAL_GPIOLIB | 471 | select ARCH_WANT_OPTIONAL_GPIOLIB |
469 | select USB_ARCH_HAS_OHCI | 472 | select USB_ARCH_HAS_OHCI |
473 | select USB_OHCI_SH if USB_OHCI_HCD | ||
470 | select USB_ARCH_HAS_EHCI | 474 | select USB_ARCH_HAS_EHCI |
475 | select USB_EHCI_SH if USB_EHCI_HCD | ||
471 | 476 | ||
472 | config CPU_SUBTYPE_SHX3 | 477 | config CPU_SUBTYPE_SHX3 |
473 | bool "Support SH-X3 processor" | 478 | bool "Support SH-X3 processor" |
diff --git a/arch/sh/configs/sh7757lcr_defconfig b/arch/sh/configs/sh7757lcr_defconfig index 33ddb130a7c8..cfde98ddb29d 100644 --- a/arch/sh/configs/sh7757lcr_defconfig +++ b/arch/sh/configs/sh7757lcr_defconfig | |||
@@ -9,7 +9,6 @@ CONFIG_TASK_XACCT=y | |||
9 | CONFIG_TASK_IO_ACCOUNTING=y | 9 | CONFIG_TASK_IO_ACCOUNTING=y |
10 | CONFIG_LOG_BUF_SHIFT=14 | 10 | CONFIG_LOG_BUF_SHIFT=14 |
11 | CONFIG_BLK_DEV_INITRD=y | 11 | CONFIG_BLK_DEV_INITRD=y |
12 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
13 | # CONFIG_SYSCTL_SYSCALL is not set | 12 | # CONFIG_SYSCTL_SYSCALL is not set |
14 | CONFIG_KALLSYMS_ALL=y | 13 | CONFIG_KALLSYMS_ALL=y |
15 | CONFIG_SLAB=y | 14 | CONFIG_SLAB=y |
@@ -39,8 +38,6 @@ CONFIG_IPV6=y | |||
39 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 38 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
40 | # CONFIG_FW_LOADER is not set | 39 | # CONFIG_FW_LOADER is not set |
41 | CONFIG_MTD=y | 40 | CONFIG_MTD=y |
42 | CONFIG_MTD_CONCAT=y | ||
43 | CONFIG_MTD_PARTITIONS=y | ||
44 | CONFIG_MTD_CHAR=y | 41 | CONFIG_MTD_CHAR=y |
45 | CONFIG_MTD_BLOCK=y | 42 | CONFIG_MTD_BLOCK=y |
46 | CONFIG_MTD_M25P80=y | 43 | CONFIG_MTD_M25P80=y |
@@ -56,18 +53,19 @@ CONFIG_SH_ETH=y | |||
56 | # CONFIG_KEYBOARD_ATKBD is not set | 53 | # CONFIG_KEYBOARD_ATKBD is not set |
57 | # CONFIG_MOUSE_PS2 is not set | 54 | # CONFIG_MOUSE_PS2 is not set |
58 | # CONFIG_SERIO is not set | 55 | # CONFIG_SERIO is not set |
56 | # CONFIG_LEGACY_PTYS is not set | ||
59 | CONFIG_SERIAL_SH_SCI=y | 57 | CONFIG_SERIAL_SH_SCI=y |
60 | CONFIG_SERIAL_SH_SCI_NR_UARTS=3 | 58 | CONFIG_SERIAL_SH_SCI_NR_UARTS=3 |
61 | CONFIG_SERIAL_SH_SCI_CONSOLE=y | 59 | CONFIG_SERIAL_SH_SCI_CONSOLE=y |
62 | # CONFIG_LEGACY_PTYS is not set | ||
63 | # CONFIG_HW_RANDOM is not set | 60 | # CONFIG_HW_RANDOM is not set |
64 | CONFIG_SPI=y | 61 | CONFIG_SPI=y |
65 | CONFIG_SPI_SH=y | 62 | CONFIG_SPI_SH=y |
66 | # CONFIG_HWMON is not set | 63 | # CONFIG_HWMON is not set |
67 | CONFIG_MFD_SH_MOBILE_SDHI=y | ||
68 | CONFIG_USB=y | 64 | CONFIG_USB=y |
69 | CONFIG_USB_EHCI_HCD=y | 65 | CONFIG_USB_EHCI_HCD=y |
66 | CONFIG_USB_EHCI_SH=y | ||
70 | CONFIG_USB_OHCI_HCD=y | 67 | CONFIG_USB_OHCI_HCD=y |
68 | CONFIG_USB_OHCI_SH=y | ||
71 | CONFIG_USB_STORAGE=y | 69 | CONFIG_USB_STORAGE=y |
72 | CONFIG_MMC=y | 70 | CONFIG_MMC=y |
73 | CONFIG_MMC_SDHI=y | 71 | CONFIG_MMC_SDHI=y |
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7757.c b/arch/sh/kernel/cpu/sh4a/setup-sh7757.c index 423dabf542d3..e915deafac89 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7757.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7757.c | |||
@@ -183,7 +183,7 @@ static const struct sh_dmae_slave_config sh7757_dmae1_slaves[] = { | |||
183 | { | 183 | { |
184 | .slave_id = SHDMA_SLAVE_SCIF2_RX, | 184 | .slave_id = SHDMA_SLAVE_SCIF2_RX, |
185 | .addr = 0x1f4b0014, | 185 | .addr = 0x1f4b0014, |
186 | .chcr = SM_INC | 0x800 | 0x40000000 | | 186 | .chcr = DM_INC | 0x800 | 0x40000000 | |
187 | TS_INDEX2VAL(XMIT_SZ_8BIT), | 187 | TS_INDEX2VAL(XMIT_SZ_8BIT), |
188 | .mid_rid = 0x22, | 188 | .mid_rid = 0x22, |
189 | }, | 189 | }, |
@@ -197,7 +197,7 @@ static const struct sh_dmae_slave_config sh7757_dmae1_slaves[] = { | |||
197 | { | 197 | { |
198 | .slave_id = SHDMA_SLAVE_SCIF3_RX, | 198 | .slave_id = SHDMA_SLAVE_SCIF3_RX, |
199 | .addr = 0x1f4c0014, | 199 | .addr = 0x1f4c0014, |
200 | .chcr = SM_INC | 0x800 | 0x40000000 | | 200 | .chcr = DM_INC | 0x800 | 0x40000000 | |
201 | TS_INDEX2VAL(XMIT_SZ_8BIT), | 201 | TS_INDEX2VAL(XMIT_SZ_8BIT), |
202 | .mid_rid = 0x2a, | 202 | .mid_rid = 0x2a, |
203 | }, | 203 | }, |
@@ -211,7 +211,7 @@ static const struct sh_dmae_slave_config sh7757_dmae1_slaves[] = { | |||
211 | { | 211 | { |
212 | .slave_id = SHDMA_SLAVE_SCIF4_RX, | 212 | .slave_id = SHDMA_SLAVE_SCIF4_RX, |
213 | .addr = 0x1f4d0014, | 213 | .addr = 0x1f4d0014, |
214 | .chcr = SM_INC | 0x800 | 0x40000000 | | 214 | .chcr = DM_INC | 0x800 | 0x40000000 | |
215 | TS_INDEX2VAL(XMIT_SZ_8BIT), | 215 | TS_INDEX2VAL(XMIT_SZ_8BIT), |
216 | .mid_rid = 0x42, | 216 | .mid_rid = 0x42, |
217 | }, | 217 | }, |
@@ -228,7 +228,7 @@ static const struct sh_dmae_slave_config sh7757_dmae2_slaves[] = { | |||
228 | { | 228 | { |
229 | .slave_id = SHDMA_SLAVE_RIIC0_RX, | 229 | .slave_id = SHDMA_SLAVE_RIIC0_RX, |
230 | .addr = 0x1e500013, | 230 | .addr = 0x1e500013, |
231 | .chcr = SM_INC | 0x800 | 0x40000000 | | 231 | .chcr = DM_INC | 0x800 | 0x40000000 | |
232 | TS_INDEX2VAL(XMIT_SZ_8BIT), | 232 | TS_INDEX2VAL(XMIT_SZ_8BIT), |
233 | .mid_rid = 0x22, | 233 | .mid_rid = 0x22, |
234 | }, | 234 | }, |
@@ -242,7 +242,7 @@ static const struct sh_dmae_slave_config sh7757_dmae2_slaves[] = { | |||
242 | { | 242 | { |
243 | .slave_id = SHDMA_SLAVE_RIIC1_RX, | 243 | .slave_id = SHDMA_SLAVE_RIIC1_RX, |
244 | .addr = 0x1e510013, | 244 | .addr = 0x1e510013, |
245 | .chcr = SM_INC | 0x800 | 0x40000000 | | 245 | .chcr = DM_INC | 0x800 | 0x40000000 | |
246 | TS_INDEX2VAL(XMIT_SZ_8BIT), | 246 | TS_INDEX2VAL(XMIT_SZ_8BIT), |
247 | .mid_rid = 0x2a, | 247 | .mid_rid = 0x2a, |
248 | }, | 248 | }, |
@@ -256,7 +256,7 @@ static const struct sh_dmae_slave_config sh7757_dmae2_slaves[] = { | |||
256 | { | 256 | { |
257 | .slave_id = SHDMA_SLAVE_RIIC2_RX, | 257 | .slave_id = SHDMA_SLAVE_RIIC2_RX, |
258 | .addr = 0x1e520013, | 258 | .addr = 0x1e520013, |
259 | .chcr = SM_INC | 0x800 | 0x40000000 | | 259 | .chcr = DM_INC | 0x800 | 0x40000000 | |
260 | TS_INDEX2VAL(XMIT_SZ_8BIT), | 260 | TS_INDEX2VAL(XMIT_SZ_8BIT), |
261 | .mid_rid = 0xa2, | 261 | .mid_rid = 0xa2, |
262 | }, | 262 | }, |
@@ -265,12 +265,12 @@ static const struct sh_dmae_slave_config sh7757_dmae2_slaves[] = { | |||
265 | .addr = 0x1e530012, | 265 | .addr = 0x1e530012, |
266 | .chcr = SM_INC | 0x800 | 0x40000000 | | 266 | .chcr = SM_INC | 0x800 | 0x40000000 | |
267 | TS_INDEX2VAL(XMIT_SZ_8BIT), | 267 | TS_INDEX2VAL(XMIT_SZ_8BIT), |
268 | .mid_rid = 0xab, | 268 | .mid_rid = 0xa9, |
269 | }, | 269 | }, |
270 | { | 270 | { |
271 | .slave_id = SHDMA_SLAVE_RIIC3_RX, | 271 | .slave_id = SHDMA_SLAVE_RIIC3_RX, |
272 | .addr = 0x1e530013, | 272 | .addr = 0x1e530013, |
273 | .chcr = SM_INC | 0x800 | 0x40000000 | | 273 | .chcr = DM_INC | 0x800 | 0x40000000 | |
274 | TS_INDEX2VAL(XMIT_SZ_8BIT), | 274 | TS_INDEX2VAL(XMIT_SZ_8BIT), |
275 | .mid_rid = 0xaf, | 275 | .mid_rid = 0xaf, |
276 | }, | 276 | }, |
@@ -279,14 +279,14 @@ static const struct sh_dmae_slave_config sh7757_dmae2_slaves[] = { | |||
279 | .addr = 0x1e540012, | 279 | .addr = 0x1e540012, |
280 | .chcr = SM_INC | 0x800 | 0x40000000 | | 280 | .chcr = SM_INC | 0x800 | 0x40000000 | |
281 | TS_INDEX2VAL(XMIT_SZ_8BIT), | 281 | TS_INDEX2VAL(XMIT_SZ_8BIT), |
282 | .mid_rid = 0xc1, | 282 | .mid_rid = 0xc5, |
283 | }, | 283 | }, |
284 | { | 284 | { |
285 | .slave_id = SHDMA_SLAVE_RIIC4_RX, | 285 | .slave_id = SHDMA_SLAVE_RIIC4_RX, |
286 | .addr = 0x1e540013, | 286 | .addr = 0x1e540013, |
287 | .chcr = SM_INC | 0x800 | 0x40000000 | | 287 | .chcr = DM_INC | 0x800 | 0x40000000 | |
288 | TS_INDEX2VAL(XMIT_SZ_8BIT), | 288 | TS_INDEX2VAL(XMIT_SZ_8BIT), |
289 | .mid_rid = 0xc2, | 289 | .mid_rid = 0xc6, |
290 | }, | 290 | }, |
291 | }; | 291 | }; |
292 | 292 | ||
@@ -301,7 +301,7 @@ static const struct sh_dmae_slave_config sh7757_dmae3_slaves[] = { | |||
301 | { | 301 | { |
302 | .slave_id = SHDMA_SLAVE_RIIC5_RX, | 302 | .slave_id = SHDMA_SLAVE_RIIC5_RX, |
303 | .addr = 0x1e550013, | 303 | .addr = 0x1e550013, |
304 | .chcr = SM_INC | 0x800 | 0x40000000 | | 304 | .chcr = DM_INC | 0x800 | 0x40000000 | |
305 | TS_INDEX2VAL(XMIT_SZ_8BIT), | 305 | TS_INDEX2VAL(XMIT_SZ_8BIT), |
306 | .mid_rid = 0x22, | 306 | .mid_rid = 0x22, |
307 | }, | 307 | }, |
@@ -315,7 +315,7 @@ static const struct sh_dmae_slave_config sh7757_dmae3_slaves[] = { | |||
315 | { | 315 | { |
316 | .slave_id = SHDMA_SLAVE_RIIC6_RX, | 316 | .slave_id = SHDMA_SLAVE_RIIC6_RX, |
317 | .addr = 0x1e560013, | 317 | .addr = 0x1e560013, |
318 | .chcr = SM_INC | 0x800 | 0x40000000 | | 318 | .chcr = DM_INC | 0x800 | 0x40000000 | |
319 | TS_INDEX2VAL(XMIT_SZ_8BIT), | 319 | TS_INDEX2VAL(XMIT_SZ_8BIT), |
320 | .mid_rid = 0x2a, | 320 | .mid_rid = 0x2a, |
321 | }, | 321 | }, |
@@ -329,7 +329,7 @@ static const struct sh_dmae_slave_config sh7757_dmae3_slaves[] = { | |||
329 | { | 329 | { |
330 | .slave_id = SHDMA_SLAVE_RIIC7_RX, | 330 | .slave_id = SHDMA_SLAVE_RIIC7_RX, |
331 | .addr = 0x1e570013, | 331 | .addr = 0x1e570013, |
332 | .chcr = SM_INC | 0x800 | 0x40000000 | | 332 | .chcr = DM_INC | 0x800 | 0x40000000 | |
333 | TS_INDEX2VAL(XMIT_SZ_8BIT), | 333 | TS_INDEX2VAL(XMIT_SZ_8BIT), |
334 | .mid_rid = 0x42, | 334 | .mid_rid = 0x42, |
335 | }, | 335 | }, |
@@ -343,7 +343,7 @@ static const struct sh_dmae_slave_config sh7757_dmae3_slaves[] = { | |||
343 | { | 343 | { |
344 | .slave_id = SHDMA_SLAVE_RIIC8_RX, | 344 | .slave_id = SHDMA_SLAVE_RIIC8_RX, |
345 | .addr = 0x1e580013, | 345 | .addr = 0x1e580013, |
346 | .chcr = SM_INC | 0x800 | 0x40000000 | | 346 | .chcr = DM_INC | 0x800 | 0x40000000 | |
347 | TS_INDEX2VAL(XMIT_SZ_8BIT), | 347 | TS_INDEX2VAL(XMIT_SZ_8BIT), |
348 | .mid_rid = 0x46, | 348 | .mid_rid = 0x46, |
349 | }, | 349 | }, |
@@ -357,7 +357,7 @@ static const struct sh_dmae_slave_config sh7757_dmae3_slaves[] = { | |||
357 | { | 357 | { |
358 | .slave_id = SHDMA_SLAVE_RIIC9_RX, | 358 | .slave_id = SHDMA_SLAVE_RIIC9_RX, |
359 | .addr = 0x1e590013, | 359 | .addr = 0x1e590013, |
360 | .chcr = SM_INC | 0x800 | 0x40000000 | | 360 | .chcr = DM_INC | 0x800 | 0x40000000 | |
361 | TS_INDEX2VAL(XMIT_SZ_8BIT), | 361 | TS_INDEX2VAL(XMIT_SZ_8BIT), |
362 | .mid_rid = 0x52, | 362 | .mid_rid = 0x52, |
363 | }, | 363 | }, |
@@ -659,6 +659,54 @@ static struct platform_device spi0_device = { | |||
659 | .resource = spi0_resources, | 659 | .resource = spi0_resources, |
660 | }; | 660 | }; |
661 | 661 | ||
662 | static struct resource usb_ehci_resources[] = { | ||
663 | [0] = { | ||
664 | .start = 0xfe4f1000, | ||
665 | .end = 0xfe4f10ff, | ||
666 | .flags = IORESOURCE_MEM, | ||
667 | }, | ||
668 | [1] = { | ||
669 | .start = 57, | ||
670 | .end = 57, | ||
671 | .flags = IORESOURCE_IRQ, | ||
672 | }, | ||
673 | }; | ||
674 | |||
675 | static struct platform_device usb_ehci_device = { | ||
676 | .name = "sh_ehci", | ||
677 | .id = -1, | ||
678 | .dev = { | ||
679 | .dma_mask = &usb_ehci_device.dev.coherent_dma_mask, | ||
680 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
681 | }, | ||
682 | .num_resources = ARRAY_SIZE(usb_ehci_resources), | ||
683 | .resource = usb_ehci_resources, | ||
684 | }; | ||
685 | |||
686 | static struct resource usb_ohci_resources[] = { | ||
687 | [0] = { | ||
688 | .start = 0xfe4f1800, | ||
689 | .end = 0xfe4f18ff, | ||
690 | .flags = IORESOURCE_MEM, | ||
691 | }, | ||
692 | [1] = { | ||
693 | .start = 57, | ||
694 | .end = 57, | ||
695 | .flags = IORESOURCE_IRQ, | ||
696 | }, | ||
697 | }; | ||
698 | |||
699 | static struct platform_device usb_ohci_device = { | ||
700 | .name = "sh_ohci", | ||
701 | .id = -1, | ||
702 | .dev = { | ||
703 | .dma_mask = &usb_ohci_device.dev.coherent_dma_mask, | ||
704 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
705 | }, | ||
706 | .num_resources = ARRAY_SIZE(usb_ohci_resources), | ||
707 | .resource = usb_ohci_resources, | ||
708 | }; | ||
709 | |||
662 | static struct platform_device *sh7757_devices[] __initdata = { | 710 | static struct platform_device *sh7757_devices[] __initdata = { |
663 | &scif2_device, | 711 | &scif2_device, |
664 | &scif3_device, | 712 | &scif3_device, |
@@ -670,6 +718,8 @@ static struct platform_device *sh7757_devices[] __initdata = { | |||
670 | &dma2_device, | 718 | &dma2_device, |
671 | &dma3_device, | 719 | &dma3_device, |
672 | &spi0_device, | 720 | &spi0_device, |
721 | &usb_ehci_device, | ||
722 | &usb_ohci_device, | ||
673 | }; | 723 | }; |
674 | 724 | ||
675 | static int __init sh7757_devices_setup(void) | 725 | static int __init sh7757_devices_setup(void) |
@@ -1039,13 +1089,13 @@ static DECLARE_INTC_DESC(intc_desc, "sh7757", vectors, groups, | |||
1039 | 1089 | ||
1040 | /* Support for external interrupt pins in IRQ mode */ | 1090 | /* Support for external interrupt pins in IRQ mode */ |
1041 | static struct intc_vect vectors_irq0123[] __initdata = { | 1091 | static struct intc_vect vectors_irq0123[] __initdata = { |
1042 | INTC_VECT(IRQ0, 0x240), INTC_VECT(IRQ1, 0x280), | 1092 | INTC_VECT(IRQ0, 0x200), INTC_VECT(IRQ1, 0x240), |
1043 | INTC_VECT(IRQ2, 0x2c0), INTC_VECT(IRQ3, 0x300), | 1093 | INTC_VECT(IRQ2, 0x280), INTC_VECT(IRQ3, 0x2c0), |
1044 | }; | 1094 | }; |
1045 | 1095 | ||
1046 | static struct intc_vect vectors_irq4567[] __initdata = { | 1096 | static struct intc_vect vectors_irq4567[] __initdata = { |
1047 | INTC_VECT(IRQ4, 0x340), INTC_VECT(IRQ5, 0x380), | 1097 | INTC_VECT(IRQ4, 0x300), INTC_VECT(IRQ5, 0x340), |
1048 | INTC_VECT(IRQ6, 0x3c0), INTC_VECT(IRQ7, 0x200), | 1098 | INTC_VECT(IRQ6, 0x380), INTC_VECT(IRQ7, 0x3c0), |
1049 | }; | 1099 | }; |
1050 | 1100 | ||
1051 | static struct intc_sense_reg sense_registers[] __initdata = { | 1101 | static struct intc_sense_reg sense_registers[] __initdata = { |
@@ -1079,14 +1129,14 @@ static struct intc_vect vectors_irl0123[] __initdata = { | |||
1079 | }; | 1129 | }; |
1080 | 1130 | ||
1081 | static struct intc_vect vectors_irl4567[] __initdata = { | 1131 | static struct intc_vect vectors_irl4567[] __initdata = { |
1082 | INTC_VECT(IRL4_LLLL, 0xb00), INTC_VECT(IRL4_LLLH, 0xb20), | 1132 | INTC_VECT(IRL4_LLLL, 0x200), INTC_VECT(IRL4_LLLH, 0x220), |
1083 | INTC_VECT(IRL4_LLHL, 0xb40), INTC_VECT(IRL4_LLHH, 0xb60), | 1133 | INTC_VECT(IRL4_LLHL, 0x240), INTC_VECT(IRL4_LLHH, 0x260), |
1084 | INTC_VECT(IRL4_LHLL, 0xb80), INTC_VECT(IRL4_LHLH, 0xba0), | 1134 | INTC_VECT(IRL4_LHLL, 0x280), INTC_VECT(IRL4_LHLH, 0x2a0), |
1085 | INTC_VECT(IRL4_LHHL, 0xbc0), INTC_VECT(IRL4_LHHH, 0xbe0), | 1135 | INTC_VECT(IRL4_LHHL, 0x2c0), INTC_VECT(IRL4_LHHH, 0x2e0), |
1086 | INTC_VECT(IRL4_HLLL, 0xc00), INTC_VECT(IRL4_HLLH, 0xc20), | 1136 | INTC_VECT(IRL4_HLLL, 0x300), INTC_VECT(IRL4_HLLH, 0x320), |
1087 | INTC_VECT(IRL4_HLHL, 0xc40), INTC_VECT(IRL4_HLHH, 0xc60), | 1137 | INTC_VECT(IRL4_HLHL, 0x340), INTC_VECT(IRL4_HLHH, 0x360), |
1088 | INTC_VECT(IRL4_HHLL, 0xc80), INTC_VECT(IRL4_HHLH, 0xca0), | 1138 | INTC_VECT(IRL4_HHLL, 0x380), INTC_VECT(IRL4_HHLH, 0x3a0), |
1089 | INTC_VECT(IRL4_HHHL, 0xcc0), | 1139 | INTC_VECT(IRL4_HHHL, 0x3c0), |
1090 | }; | 1140 | }; |
1091 | 1141 | ||
1092 | static DECLARE_INTC_DESC(intc_desc_irl0123, "sh7757-irl0123", vectors_irl0123, | 1142 | static DECLARE_INTC_DESC(intc_desc_irl0123, "sh7757-irl0123", vectors_irl0123, |
diff --git a/arch/sh/kernel/irq.c b/arch/sh/kernel/irq.c index 91971103b62b..a3ee91971129 100644 --- a/arch/sh/kernel/irq.c +++ b/arch/sh/kernel/irq.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/seq_file.h> | 13 | #include <linux/seq_file.h> |
14 | #include <linux/ftrace.h> | 14 | #include <linux/ftrace.h> |
15 | #include <linux/delay.h> | 15 | #include <linux/delay.h> |
16 | #include <linux/ratelimit.h> | ||
16 | #include <asm/processor.h> | 17 | #include <asm/processor.h> |
17 | #include <asm/machvec.h> | 18 | #include <asm/machvec.h> |
18 | #include <asm/uaccess.h> | 19 | #include <asm/uaccess.h> |
@@ -268,9 +269,8 @@ void migrate_irqs(void) | |||
268 | unsigned int newcpu = cpumask_any_and(data->affinity, | 269 | unsigned int newcpu = cpumask_any_and(data->affinity, |
269 | cpu_online_mask); | 270 | cpu_online_mask); |
270 | if (newcpu >= nr_cpu_ids) { | 271 | if (newcpu >= nr_cpu_ids) { |
271 | if (printk_ratelimit()) | 272 | pr_info_ratelimited("IRQ%u no longer affine to CPU%u\n", |
272 | printk(KERN_INFO "IRQ%u no longer affine to CPU%u\n", | 273 | irq, cpu); |
273 | irq, cpu); | ||
274 | 274 | ||
275 | cpumask_setall(data->affinity); | 275 | cpumask_setall(data->affinity); |
276 | newcpu = cpumask_any_and(data->affinity, | 276 | newcpu = cpumask_any_and(data->affinity, |
diff --git a/arch/sh/mm/alignment.c b/arch/sh/mm/alignment.c index b2595b8548ee..620fa7ff9eec 100644 --- a/arch/sh/mm/alignment.c +++ b/arch/sh/mm/alignment.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/seq_file.h> | 13 | #include <linux/seq_file.h> |
14 | #include <linux/proc_fs.h> | 14 | #include <linux/proc_fs.h> |
15 | #include <linux/uaccess.h> | 15 | #include <linux/uaccess.h> |
16 | #include <linux/ratelimit.h> | ||
16 | #include <asm/alignment.h> | 17 | #include <asm/alignment.h> |
17 | #include <asm/processor.h> | 18 | #include <asm/processor.h> |
18 | 19 | ||
@@ -95,13 +96,13 @@ int set_unalign_ctl(struct task_struct *tsk, unsigned int val) | |||
95 | void unaligned_fixups_notify(struct task_struct *tsk, insn_size_t insn, | 96 | void unaligned_fixups_notify(struct task_struct *tsk, insn_size_t insn, |
96 | struct pt_regs *regs) | 97 | struct pt_regs *regs) |
97 | { | 98 | { |
98 | if (user_mode(regs) && (se_usermode & UM_WARN) && printk_ratelimit()) | 99 | if (user_mode(regs) && (se_usermode & UM_WARN)) |
99 | pr_notice("Fixing up unaligned userspace access " | 100 | pr_notice_ratelimited("Fixing up unaligned userspace access " |
100 | "in \"%s\" pid=%d pc=0x%p ins=0x%04hx\n", | 101 | "in \"%s\" pid=%d pc=0x%p ins=0x%04hx\n", |
101 | tsk->comm, task_pid_nr(tsk), | 102 | tsk->comm, task_pid_nr(tsk), |
102 | (void *)instruction_pointer(regs), insn); | 103 | (void *)instruction_pointer(regs), insn); |
103 | else if (se_kernmode_warn && printk_ratelimit()) | 104 | else if (se_kernmode_warn) |
104 | pr_notice("Fixing up unaligned kernel access " | 105 | pr_notice_ratelimited("Fixing up unaligned kernel access " |
105 | "in \"%s\" pid=%d pc=0x%p ins=0x%04hx\n", | 106 | "in \"%s\" pid=%d pc=0x%p ins=0x%04hx\n", |
106 | tsk->comm, task_pid_nr(tsk), | 107 | tsk->comm, task_pid_nr(tsk), |
107 | (void *)instruction_pointer(regs), insn); | 108 | (void *)instruction_pointer(regs), insn); |
diff --git a/arch/x86/include/asm/apb_timer.h b/arch/x86/include/asm/apb_timer.h index 2fefa501d3ba..af60d8a2e288 100644 --- a/arch/x86/include/asm/apb_timer.h +++ b/arch/x86/include/asm/apb_timer.h | |||
@@ -62,7 +62,7 @@ extern int sfi_mtimer_num; | |||
62 | #else /* CONFIG_APB_TIMER */ | 62 | #else /* CONFIG_APB_TIMER */ |
63 | 63 | ||
64 | static inline unsigned long apbt_quick_calibrate(void) {return 0; } | 64 | static inline unsigned long apbt_quick_calibrate(void) {return 0; } |
65 | static inline void apbt_time_init(void) {return 0; } | 65 | static inline void apbt_time_init(void) { } |
66 | 66 | ||
67 | #endif | 67 | #endif |
68 | #endif /* ASM_X86_APBT_H */ | 68 | #endif /* ASM_X86_APBT_H */ |
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c index 6df88c7885c0..adc98675cda0 100644 --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c | |||
@@ -3372,7 +3372,7 @@ x86_decode_insn(struct x86_emulate_ctxt *ctxt, void *insn, int insn_len) | |||
3372 | int def_op_bytes, def_ad_bytes, goffset, simd_prefix; | 3372 | int def_op_bytes, def_ad_bytes, goffset, simd_prefix; |
3373 | bool op_prefix = false; | 3373 | bool op_prefix = false; |
3374 | struct opcode opcode; | 3374 | struct opcode opcode; |
3375 | struct operand memop = { .type = OP_NONE }; | 3375 | struct operand memop = { .type = OP_NONE }, *memopp = NULL; |
3376 | 3376 | ||
3377 | c->eip = ctxt->eip; | 3377 | c->eip = ctxt->eip; |
3378 | c->fetch.start = c->eip; | 3378 | c->fetch.start = c->eip; |
@@ -3547,9 +3547,6 @@ done_prefixes: | |||
3547 | if (memop.type == OP_MEM && c->ad_bytes != 8) | 3547 | if (memop.type == OP_MEM && c->ad_bytes != 8) |
3548 | memop.addr.mem.ea = (u32)memop.addr.mem.ea; | 3548 | memop.addr.mem.ea = (u32)memop.addr.mem.ea; |
3549 | 3549 | ||
3550 | if (memop.type == OP_MEM && c->rip_relative) | ||
3551 | memop.addr.mem.ea += c->eip; | ||
3552 | |||
3553 | /* | 3550 | /* |
3554 | * Decode and fetch the source operand: register, memory | 3551 | * Decode and fetch the source operand: register, memory |
3555 | * or immediate. | 3552 | * or immediate. |
@@ -3571,6 +3568,7 @@ done_prefixes: | |||
3571 | c->op_bytes; | 3568 | c->op_bytes; |
3572 | srcmem_common: | 3569 | srcmem_common: |
3573 | c->src = memop; | 3570 | c->src = memop; |
3571 | memopp = &c->src; | ||
3574 | break; | 3572 | break; |
3575 | case SrcImmU16: | 3573 | case SrcImmU16: |
3576 | rc = decode_imm(ctxt, &c->src, 2, false); | 3574 | rc = decode_imm(ctxt, &c->src, 2, false); |
@@ -3667,6 +3665,7 @@ done_prefixes: | |||
3667 | case DstMem: | 3665 | case DstMem: |
3668 | case DstMem64: | 3666 | case DstMem64: |
3669 | c->dst = memop; | 3667 | c->dst = memop; |
3668 | memopp = &c->dst; | ||
3670 | if ((c->d & DstMask) == DstMem64) | 3669 | if ((c->d & DstMask) == DstMem64) |
3671 | c->dst.bytes = 8; | 3670 | c->dst.bytes = 8; |
3672 | else | 3671 | else |
@@ -3700,10 +3699,13 @@ done_prefixes: | |||
3700 | /* Special instructions do their own operand decoding. */ | 3699 | /* Special instructions do their own operand decoding. */ |
3701 | default: | 3700 | default: |
3702 | c->dst.type = OP_NONE; /* Disable writeback. */ | 3701 | c->dst.type = OP_NONE; /* Disable writeback. */ |
3703 | return 0; | 3702 | break; |
3704 | } | 3703 | } |
3705 | 3704 | ||
3706 | done: | 3705 | done: |
3706 | if (memopp && memopp->type == OP_MEM && c->rip_relative) | ||
3707 | memopp->addr.mem.ea += c->eip; | ||
3708 | |||
3707 | return (rc == X86EMUL_UNHANDLEABLE) ? EMULATION_FAILED : EMULATION_OK; | 3709 | return (rc == X86EMUL_UNHANDLEABLE) ? EMULATION_FAILED : EMULATION_OK; |
3708 | } | 3710 | } |
3709 | 3711 | ||
diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c index 8214724ce54d..fe008309ffec 100644 --- a/arch/x86/pci/xen.c +++ b/arch/x86/pci/xen.c | |||
@@ -333,6 +333,7 @@ static int xen_register_pirq(u32 gsi, int triggering) | |||
333 | struct physdev_map_pirq map_irq; | 333 | struct physdev_map_pirq map_irq; |
334 | int shareable = 0; | 334 | int shareable = 0; |
335 | char *name; | 335 | char *name; |
336 | bool gsi_override = false; | ||
336 | 337 | ||
337 | if (!xen_pv_domain()) | 338 | if (!xen_pv_domain()) |
338 | return -1; | 339 | return -1; |
@@ -349,11 +350,32 @@ static int xen_register_pirq(u32 gsi, int triggering) | |||
349 | if (pirq < 0) | 350 | if (pirq < 0) |
350 | goto out; | 351 | goto out; |
351 | 352 | ||
352 | irq = xen_bind_pirq_gsi_to_irq(gsi, pirq, shareable, name); | 353 | /* Before we bind the GSI to a Linux IRQ, check whether |
354 | * we need to override it with bus_irq (IRQ) value. Usually for | ||
355 | * IRQs below IRQ_LEGACY_IRQ this holds IRQ == GSI, as so: | ||
356 | * ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 low level) | ||
357 | * but there are oddballs where the IRQ != GSI: | ||
358 | * ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 20 low level) | ||
359 | * which ends up being: gsi_to_irq[9] == 20 | ||
360 | * (which is what acpi_gsi_to_irq ends up calling when starting the | ||
361 | * the ACPI interpreter and keels over since IRQ 9 has not been | ||
362 | * setup as we had setup IRQ 20 for it). | ||
363 | */ | ||
364 | if (gsi == acpi_sci_override_gsi) { | ||
365 | /* Check whether the GSI != IRQ */ | ||
366 | acpi_gsi_to_irq(gsi, &irq); | ||
367 | if (irq != gsi) | ||
368 | /* Bugger, we MUST have that IRQ. */ | ||
369 | gsi_override = true; | ||
370 | } | ||
371 | if (gsi_override) | ||
372 | irq = xen_bind_pirq_gsi_to_irq(irq, pirq, shareable, name); | ||
373 | else | ||
374 | irq = xen_bind_pirq_gsi_to_irq(gsi, pirq, shareable, name); | ||
353 | if (irq < 0) | 375 | if (irq < 0) |
354 | goto out; | 376 | goto out; |
355 | 377 | ||
356 | printk(KERN_DEBUG "xen: --> pirq=%d -> irq=%d\n", pirq, irq); | 378 | printk(KERN_DEBUG "xen: --> pirq=%d -> irq=%d (gsi=%d)\n", pirq, irq, gsi); |
357 | 379 | ||
358 | map_irq.domid = DOMID_SELF; | 380 | map_irq.domid = DOMID_SELF; |
359 | map_irq.type = MAP_PIRQ_TYPE_GSI; | 381 | map_irq.type = MAP_PIRQ_TYPE_GSI; |
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c index 673e968df3cf..0ccccb67a993 100644 --- a/arch/x86/xen/mmu.c +++ b/arch/x86/xen/mmu.c | |||
@@ -1232,7 +1232,11 @@ static void xen_flush_tlb_others(const struct cpumask *cpus, | |||
1232 | { | 1232 | { |
1233 | struct { | 1233 | struct { |
1234 | struct mmuext_op op; | 1234 | struct mmuext_op op; |
1235 | #ifdef CONFIG_SMP | ||
1235 | DECLARE_BITMAP(mask, num_processors); | 1236 | DECLARE_BITMAP(mask, num_processors); |
1237 | #else | ||
1238 | DECLARE_BITMAP(mask, NR_CPUS); | ||
1239 | #endif | ||
1236 | } *args; | 1240 | } *args; |
1237 | struct multicall_space mcs; | 1241 | struct multicall_space mcs; |
1238 | 1242 | ||
diff --git a/crypto/deflate.c b/crypto/deflate.c index b5ccae29be74..b0165ecad0c5 100644 --- a/crypto/deflate.c +++ b/crypto/deflate.c | |||
@@ -32,7 +32,6 @@ | |||
32 | #include <linux/interrupt.h> | 32 | #include <linux/interrupt.h> |
33 | #include <linux/mm.h> | 33 | #include <linux/mm.h> |
34 | #include <linux/net.h> | 34 | #include <linux/net.h> |
35 | #include <linux/slab.h> | ||
36 | 35 | ||
37 | #define DEFLATE_DEF_LEVEL Z_DEFAULT_COMPRESSION | 36 | #define DEFLATE_DEF_LEVEL Z_DEFAULT_COMPRESSION |
38 | #define DEFLATE_DEF_WINBITS 11 | 37 | #define DEFLATE_DEF_WINBITS 11 |
@@ -73,7 +72,7 @@ static int deflate_decomp_init(struct deflate_ctx *ctx) | |||
73 | int ret = 0; | 72 | int ret = 0; |
74 | struct z_stream_s *stream = &ctx->decomp_stream; | 73 | struct z_stream_s *stream = &ctx->decomp_stream; |
75 | 74 | ||
76 | stream->workspace = kzalloc(zlib_inflate_workspacesize(), GFP_KERNEL); | 75 | stream->workspace = vzalloc(zlib_inflate_workspacesize()); |
77 | if (!stream->workspace) { | 76 | if (!stream->workspace) { |
78 | ret = -ENOMEM; | 77 | ret = -ENOMEM; |
79 | goto out; | 78 | goto out; |
@@ -86,7 +85,7 @@ static int deflate_decomp_init(struct deflate_ctx *ctx) | |||
86 | out: | 85 | out: |
87 | return ret; | 86 | return ret; |
88 | out_free: | 87 | out_free: |
89 | kfree(stream->workspace); | 88 | vfree(stream->workspace); |
90 | goto out; | 89 | goto out; |
91 | } | 90 | } |
92 | 91 | ||
@@ -99,7 +98,7 @@ static void deflate_comp_exit(struct deflate_ctx *ctx) | |||
99 | static void deflate_decomp_exit(struct deflate_ctx *ctx) | 98 | static void deflate_decomp_exit(struct deflate_ctx *ctx) |
100 | { | 99 | { |
101 | zlib_inflateEnd(&ctx->decomp_stream); | 100 | zlib_inflateEnd(&ctx->decomp_stream); |
102 | kfree(ctx->decomp_stream.workspace); | 101 | vfree(ctx->decomp_stream.workspace); |
103 | } | 102 | } |
104 | 103 | ||
105 | static int deflate_init(struct crypto_tfm *tfm) | 104 | static int deflate_init(struct crypto_tfm *tfm) |
diff --git a/crypto/zlib.c b/crypto/zlib.c index d11d761a5e41..06b62e5cdcc7 100644 --- a/crypto/zlib.c +++ b/crypto/zlib.c | |||
@@ -29,7 +29,6 @@ | |||
29 | #include <linux/interrupt.h> | 29 | #include <linux/interrupt.h> |
30 | #include <linux/mm.h> | 30 | #include <linux/mm.h> |
31 | #include <linux/net.h> | 31 | #include <linux/net.h> |
32 | #include <linux/slab.h> | ||
33 | 32 | ||
34 | #include <crypto/internal/compress.h> | 33 | #include <crypto/internal/compress.h> |
35 | 34 | ||
@@ -60,7 +59,7 @@ static void zlib_decomp_exit(struct zlib_ctx *ctx) | |||
60 | 59 | ||
61 | if (stream->workspace) { | 60 | if (stream->workspace) { |
62 | zlib_inflateEnd(stream); | 61 | zlib_inflateEnd(stream); |
63 | kfree(stream->workspace); | 62 | vfree(stream->workspace); |
64 | stream->workspace = NULL; | 63 | stream->workspace = NULL; |
65 | } | 64 | } |
66 | } | 65 | } |
@@ -228,13 +227,13 @@ static int zlib_decompress_setup(struct crypto_pcomp *tfm, void *params, | |||
228 | ? nla_get_u32(tb[ZLIB_DECOMP_WINDOWBITS]) | 227 | ? nla_get_u32(tb[ZLIB_DECOMP_WINDOWBITS]) |
229 | : DEF_WBITS; | 228 | : DEF_WBITS; |
230 | 229 | ||
231 | stream->workspace = kzalloc(zlib_inflate_workspacesize(), GFP_KERNEL); | 230 | stream->workspace = vzalloc(zlib_inflate_workspacesize()); |
232 | if (!stream->workspace) | 231 | if (!stream->workspace) |
233 | return -ENOMEM; | 232 | return -ENOMEM; |
234 | 233 | ||
235 | ret = zlib_inflateInit2(stream, ctx->decomp_windowBits); | 234 | ret = zlib_inflateInit2(stream, ctx->decomp_windowBits); |
236 | if (ret != Z_OK) { | 235 | if (ret != Z_OK) { |
237 | kfree(stream->workspace); | 236 | vfree(stream->workspace); |
238 | stream->workspace = NULL; | 237 | stream->workspace = NULL; |
239 | return -EINVAL; | 238 | return -EINVAL; |
240 | } | 239 | } |
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index d38c40fe4ddb..41223c7f0206 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c | |||
@@ -452,7 +452,7 @@ void ahci_save_initial_config(struct device *dev, | |||
452 | } | 452 | } |
453 | 453 | ||
454 | if (mask_port_map) { | 454 | if (mask_port_map) { |
455 | dev_printk(KERN_ERR, dev, "masking port_map 0x%x -> 0x%x\n", | 455 | dev_printk(KERN_WARNING, dev, "masking port_map 0x%x -> 0x%x\n", |
456 | port_map, | 456 | port_map, |
457 | port_map & mask_port_map); | 457 | port_map & mask_port_map); |
458 | port_map &= mask_port_map; | 458 | port_map &= mask_port_map; |
diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c index d0e65d6ddc77..676d957c22b0 100644 --- a/drivers/crypto/caam/caamalg.c +++ b/drivers/crypto/caam/caamalg.c | |||
@@ -238,9 +238,9 @@ static int build_sh_desc_ipsec(struct caam_ctx *ctx) | |||
238 | 238 | ||
239 | /* build shared descriptor for this session */ | 239 | /* build shared descriptor for this session */ |
240 | sh_desc = kmalloc(CAAM_CMD_SZ * DESC_AEAD_SHARED_TEXT_LEN + | 240 | sh_desc = kmalloc(CAAM_CMD_SZ * DESC_AEAD_SHARED_TEXT_LEN + |
241 | keys_fit_inline ? | 241 | (keys_fit_inline ? |
242 | ctx->split_key_pad_len + ctx->enckeylen : | 242 | ctx->split_key_pad_len + ctx->enckeylen : |
243 | CAAM_PTR_SZ * 2, GFP_DMA | GFP_KERNEL); | 243 | CAAM_PTR_SZ * 2), GFP_DMA | GFP_KERNEL); |
244 | if (!sh_desc) { | 244 | if (!sh_desc) { |
245 | dev_err(jrdev, "could not allocate shared descriptor\n"); | 245 | dev_err(jrdev, "could not allocate shared descriptor\n"); |
246 | return -ENOMEM; | 246 | return -ENOMEM; |
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 4d46441cbe2d..0a893f7400fa 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c | |||
@@ -1207,13 +1207,17 @@ static int i915_context_status(struct seq_file *m, void *unused) | |||
1207 | if (ret) | 1207 | if (ret) |
1208 | return ret; | 1208 | return ret; |
1209 | 1209 | ||
1210 | seq_printf(m, "power context "); | 1210 | if (dev_priv->pwrctx) { |
1211 | describe_obj(m, dev_priv->pwrctx); | 1211 | seq_printf(m, "power context "); |
1212 | seq_printf(m, "\n"); | 1212 | describe_obj(m, dev_priv->pwrctx); |
1213 | seq_printf(m, "\n"); | ||
1214 | } | ||
1213 | 1215 | ||
1214 | seq_printf(m, "render context "); | 1216 | if (dev_priv->renderctx) { |
1215 | describe_obj(m, dev_priv->renderctx); | 1217 | seq_printf(m, "render context "); |
1216 | seq_printf(m, "\n"); | 1218 | describe_obj(m, dev_priv->renderctx); |
1219 | seq_printf(m, "\n"); | ||
1220 | } | ||
1217 | 1221 | ||
1218 | mutex_unlock(&dev->mode_config.mutex); | 1222 | mutex_unlock(&dev->mode_config.mutex); |
1219 | 1223 | ||
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index 2b79588541e7..e1787022d6c8 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c | |||
@@ -1266,30 +1266,6 @@ static int i915_load_modeset_init(struct drm_device *dev) | |||
1266 | 1266 | ||
1267 | intel_modeset_gem_init(dev); | 1267 | intel_modeset_gem_init(dev); |
1268 | 1268 | ||
1269 | if (IS_IVYBRIDGE(dev)) { | ||
1270 | /* Share pre & uninstall handlers with ILK/SNB */ | ||
1271 | dev->driver->irq_handler = ivybridge_irq_handler; | ||
1272 | dev->driver->irq_preinstall = ironlake_irq_preinstall; | ||
1273 | dev->driver->irq_postinstall = ivybridge_irq_postinstall; | ||
1274 | dev->driver->irq_uninstall = ironlake_irq_uninstall; | ||
1275 | dev->driver->enable_vblank = ivybridge_enable_vblank; | ||
1276 | dev->driver->disable_vblank = ivybridge_disable_vblank; | ||
1277 | } else if (HAS_PCH_SPLIT(dev)) { | ||
1278 | dev->driver->irq_handler = ironlake_irq_handler; | ||
1279 | dev->driver->irq_preinstall = ironlake_irq_preinstall; | ||
1280 | dev->driver->irq_postinstall = ironlake_irq_postinstall; | ||
1281 | dev->driver->irq_uninstall = ironlake_irq_uninstall; | ||
1282 | dev->driver->enable_vblank = ironlake_enable_vblank; | ||
1283 | dev->driver->disable_vblank = ironlake_disable_vblank; | ||
1284 | } else { | ||
1285 | dev->driver->irq_preinstall = i915_driver_irq_preinstall; | ||
1286 | dev->driver->irq_postinstall = i915_driver_irq_postinstall; | ||
1287 | dev->driver->irq_uninstall = i915_driver_irq_uninstall; | ||
1288 | dev->driver->irq_handler = i915_driver_irq_handler; | ||
1289 | dev->driver->enable_vblank = i915_enable_vblank; | ||
1290 | dev->driver->disable_vblank = i915_disable_vblank; | ||
1291 | } | ||
1292 | |||
1293 | ret = drm_irq_install(dev); | 1269 | ret = drm_irq_install(dev); |
1294 | if (ret) | 1270 | if (ret) |
1295 | goto cleanup_gem; | 1271 | goto cleanup_gem; |
@@ -2017,12 +1993,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags) | |||
2017 | /* enable GEM by default */ | 1993 | /* enable GEM by default */ |
2018 | dev_priv->has_gem = 1; | 1994 | dev_priv->has_gem = 1; |
2019 | 1995 | ||
2020 | dev->driver->get_vblank_counter = i915_get_vblank_counter; | 1996 | intel_irq_init(dev); |
2021 | dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */ | ||
2022 | if (IS_G4X(dev) || IS_GEN5(dev) || IS_GEN6(dev) || IS_IVYBRIDGE(dev)) { | ||
2023 | dev->max_vblank_count = 0xffffffff; /* full 32 bit counter */ | ||
2024 | dev->driver->get_vblank_counter = gm45_get_vblank_counter; | ||
2025 | } | ||
2026 | 1997 | ||
2027 | /* Try to make sure MCHBAR is enabled before poking at it */ | 1998 | /* Try to make sure MCHBAR is enabled before poking at it */ |
2028 | intel_setup_mchbar(dev); | 1999 | intel_setup_mchbar(dev); |
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 609358faaa90..013d304455b9 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c | |||
@@ -765,14 +765,6 @@ static struct drm_driver driver = { | |||
765 | .resume = i915_resume, | 765 | .resume = i915_resume, |
766 | 766 | ||
767 | .device_is_agp = i915_driver_device_is_agp, | 767 | .device_is_agp = i915_driver_device_is_agp, |
768 | .enable_vblank = i915_enable_vblank, | ||
769 | .disable_vblank = i915_disable_vblank, | ||
770 | .get_vblank_timestamp = i915_get_vblank_timestamp, | ||
771 | .get_scanout_position = i915_get_crtc_scanoutpos, | ||
772 | .irq_preinstall = i915_driver_irq_preinstall, | ||
773 | .irq_postinstall = i915_driver_irq_postinstall, | ||
774 | .irq_uninstall = i915_driver_irq_uninstall, | ||
775 | .irq_handler = i915_driver_irq_handler, | ||
776 | .reclaim_buffers = drm_core_reclaim_buffers, | 768 | .reclaim_buffers = drm_core_reclaim_buffers, |
777 | .master_create = i915_master_create, | 769 | .master_create = i915_master_create, |
778 | .master_destroy = i915_master_destroy, | 770 | .master_destroy = i915_master_destroy, |
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index eddabf68e97a..f245c588ae95 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
@@ -997,8 +997,6 @@ extern unsigned int i915_enable_fbc; | |||
997 | 997 | ||
998 | extern int i915_suspend(struct drm_device *dev, pm_message_t state); | 998 | extern int i915_suspend(struct drm_device *dev, pm_message_t state); |
999 | extern int i915_resume(struct drm_device *dev); | 999 | extern int i915_resume(struct drm_device *dev); |
1000 | extern void i915_save_display(struct drm_device *dev); | ||
1001 | extern void i915_restore_display(struct drm_device *dev); | ||
1002 | extern int i915_master_create(struct drm_device *dev, struct drm_master *master); | 1000 | extern int i915_master_create(struct drm_device *dev, struct drm_master *master); |
1003 | extern void i915_master_destroy(struct drm_device *dev, struct drm_master *master); | 1001 | extern void i915_master_destroy(struct drm_device *dev, struct drm_master *master); |
1004 | 1002 | ||
@@ -1033,33 +1031,12 @@ extern int i915_irq_emit(struct drm_device *dev, void *data, | |||
1033 | extern int i915_irq_wait(struct drm_device *dev, void *data, | 1031 | extern int i915_irq_wait(struct drm_device *dev, void *data, |
1034 | struct drm_file *file_priv); | 1032 | struct drm_file *file_priv); |
1035 | 1033 | ||
1036 | extern irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS); | 1034 | extern void intel_irq_init(struct drm_device *dev); |
1037 | extern void i915_driver_irq_preinstall(struct drm_device * dev); | ||
1038 | extern int i915_driver_irq_postinstall(struct drm_device *dev); | ||
1039 | extern void i915_driver_irq_uninstall(struct drm_device * dev); | ||
1040 | |||
1041 | extern irqreturn_t ironlake_irq_handler(DRM_IRQ_ARGS); | ||
1042 | extern void ironlake_irq_preinstall(struct drm_device *dev); | ||
1043 | extern int ironlake_irq_postinstall(struct drm_device *dev); | ||
1044 | extern void ironlake_irq_uninstall(struct drm_device *dev); | ||
1045 | |||
1046 | extern irqreturn_t ivybridge_irq_handler(DRM_IRQ_ARGS); | ||
1047 | extern void ivybridge_irq_preinstall(struct drm_device *dev); | ||
1048 | extern int ivybridge_irq_postinstall(struct drm_device *dev); | ||
1049 | extern void ivybridge_irq_uninstall(struct drm_device *dev); | ||
1050 | 1035 | ||
1051 | extern int i915_vblank_pipe_set(struct drm_device *dev, void *data, | 1036 | extern int i915_vblank_pipe_set(struct drm_device *dev, void *data, |
1052 | struct drm_file *file_priv); | 1037 | struct drm_file *file_priv); |
1053 | extern int i915_vblank_pipe_get(struct drm_device *dev, void *data, | 1038 | extern int i915_vblank_pipe_get(struct drm_device *dev, void *data, |
1054 | struct drm_file *file_priv); | 1039 | struct drm_file *file_priv); |
1055 | extern int i915_enable_vblank(struct drm_device *dev, int crtc); | ||
1056 | extern void i915_disable_vblank(struct drm_device *dev, int crtc); | ||
1057 | extern int ironlake_enable_vblank(struct drm_device *dev, int crtc); | ||
1058 | extern void ironlake_disable_vblank(struct drm_device *dev, int crtc); | ||
1059 | extern int ivybridge_enable_vblank(struct drm_device *dev, int crtc); | ||
1060 | extern void ivybridge_disable_vblank(struct drm_device *dev, int crtc); | ||
1061 | extern u32 i915_get_vblank_counter(struct drm_device *dev, int crtc); | ||
1062 | extern u32 gm45_get_vblank_counter(struct drm_device *dev, int crtc); | ||
1063 | extern int i915_vblank_swap(struct drm_device *dev, void *data, | 1040 | extern int i915_vblank_swap(struct drm_device *dev, void *data, |
1064 | struct drm_file *file_priv); | 1041 | struct drm_file *file_priv); |
1065 | 1042 | ||
@@ -1070,13 +1047,6 @@ void | |||
1070 | i915_disable_pipestat(drm_i915_private_t *dev_priv, int pipe, u32 mask); | 1047 | i915_disable_pipestat(drm_i915_private_t *dev_priv, int pipe, u32 mask); |
1071 | 1048 | ||
1072 | void intel_enable_asle (struct drm_device *dev); | 1049 | void intel_enable_asle (struct drm_device *dev); |
1073 | int i915_get_vblank_timestamp(struct drm_device *dev, int crtc, | ||
1074 | int *max_error, | ||
1075 | struct timeval *vblank_time, | ||
1076 | unsigned flags); | ||
1077 | |||
1078 | int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe, | ||
1079 | int *vpos, int *hpos); | ||
1080 | 1050 | ||
1081 | #ifdef CONFIG_DEBUG_FS | 1051 | #ifdef CONFIG_DEBUG_FS |
1082 | extern void i915_destroy_error_state(struct drm_device *dev); | 1052 | extern void i915_destroy_error_state(struct drm_device *dev); |
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index ae2b49969b99..3b03f85ea627 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
@@ -152,7 +152,7 @@ i915_pipe_enabled(struct drm_device *dev, int pipe) | |||
152 | /* Called from drm generic code, passed a 'crtc', which | 152 | /* Called from drm generic code, passed a 'crtc', which |
153 | * we use as a pipe index | 153 | * we use as a pipe index |
154 | */ | 154 | */ |
155 | u32 i915_get_vblank_counter(struct drm_device *dev, int pipe) | 155 | static u32 i915_get_vblank_counter(struct drm_device *dev, int pipe) |
156 | { | 156 | { |
157 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 157 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
158 | unsigned long high_frame; | 158 | unsigned long high_frame; |
@@ -184,7 +184,7 @@ u32 i915_get_vblank_counter(struct drm_device *dev, int pipe) | |||
184 | return (high1 << 8) | low; | 184 | return (high1 << 8) | low; |
185 | } | 185 | } |
186 | 186 | ||
187 | u32 gm45_get_vblank_counter(struct drm_device *dev, int pipe) | 187 | static u32 gm45_get_vblank_counter(struct drm_device *dev, int pipe) |
188 | { | 188 | { |
189 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 189 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
190 | int reg = PIPE_FRMCOUNT_GM45(pipe); | 190 | int reg = PIPE_FRMCOUNT_GM45(pipe); |
@@ -198,7 +198,7 @@ u32 gm45_get_vblank_counter(struct drm_device *dev, int pipe) | |||
198 | return I915_READ(reg); | 198 | return I915_READ(reg); |
199 | } | 199 | } |
200 | 200 | ||
201 | int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe, | 201 | static int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe, |
202 | int *vpos, int *hpos) | 202 | int *vpos, int *hpos) |
203 | { | 203 | { |
204 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 204 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
@@ -264,7 +264,7 @@ int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe, | |||
264 | return ret; | 264 | return ret; |
265 | } | 265 | } |
266 | 266 | ||
267 | int i915_get_vblank_timestamp(struct drm_device *dev, int pipe, | 267 | static int i915_get_vblank_timestamp(struct drm_device *dev, int pipe, |
268 | int *max_error, | 268 | int *max_error, |
269 | struct timeval *vblank_time, | 269 | struct timeval *vblank_time, |
270 | unsigned flags) | 270 | unsigned flags) |
@@ -462,7 +462,7 @@ static void pch_irq_handler(struct drm_device *dev) | |||
462 | DRM_DEBUG_DRIVER("PCH transcoder A underrun interrupt\n"); | 462 | DRM_DEBUG_DRIVER("PCH transcoder A underrun interrupt\n"); |
463 | } | 463 | } |
464 | 464 | ||
465 | irqreturn_t ivybridge_irq_handler(DRM_IRQ_ARGS) | 465 | static irqreturn_t ivybridge_irq_handler(DRM_IRQ_ARGS) |
466 | { | 466 | { |
467 | struct drm_device *dev = (struct drm_device *) arg; | 467 | struct drm_device *dev = (struct drm_device *) arg; |
468 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 468 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
@@ -550,7 +550,7 @@ done: | |||
550 | return ret; | 550 | return ret; |
551 | } | 551 | } |
552 | 552 | ||
553 | irqreturn_t ironlake_irq_handler(DRM_IRQ_ARGS) | 553 | static irqreturn_t ironlake_irq_handler(DRM_IRQ_ARGS) |
554 | { | 554 | { |
555 | struct drm_device *dev = (struct drm_device *) arg; | 555 | struct drm_device *dev = (struct drm_device *) arg; |
556 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 556 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
@@ -1209,7 +1209,7 @@ static void i915_pageflip_stall_check(struct drm_device *dev, int pipe) | |||
1209 | } | 1209 | } |
1210 | } | 1210 | } |
1211 | 1211 | ||
1212 | irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS) | 1212 | static irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS) |
1213 | { | 1213 | { |
1214 | struct drm_device *dev = (struct drm_device *) arg; | 1214 | struct drm_device *dev = (struct drm_device *) arg; |
1215 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 1215 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
@@ -1454,7 +1454,7 @@ int i915_irq_wait(struct drm_device *dev, void *data, | |||
1454 | /* Called from drm generic code, passed 'crtc' which | 1454 | /* Called from drm generic code, passed 'crtc' which |
1455 | * we use as a pipe index | 1455 | * we use as a pipe index |
1456 | */ | 1456 | */ |
1457 | int i915_enable_vblank(struct drm_device *dev, int pipe) | 1457 | static int i915_enable_vblank(struct drm_device *dev, int pipe) |
1458 | { | 1458 | { |
1459 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 1459 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
1460 | unsigned long irqflags; | 1460 | unsigned long irqflags; |
@@ -1478,7 +1478,7 @@ int i915_enable_vblank(struct drm_device *dev, int pipe) | |||
1478 | return 0; | 1478 | return 0; |
1479 | } | 1479 | } |
1480 | 1480 | ||
1481 | int ironlake_enable_vblank(struct drm_device *dev, int pipe) | 1481 | static int ironlake_enable_vblank(struct drm_device *dev, int pipe) |
1482 | { | 1482 | { |
1483 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 1483 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
1484 | unsigned long irqflags; | 1484 | unsigned long irqflags; |
@@ -1494,7 +1494,7 @@ int ironlake_enable_vblank(struct drm_device *dev, int pipe) | |||
1494 | return 0; | 1494 | return 0; |
1495 | } | 1495 | } |
1496 | 1496 | ||
1497 | int ivybridge_enable_vblank(struct drm_device *dev, int pipe) | 1497 | static int ivybridge_enable_vblank(struct drm_device *dev, int pipe) |
1498 | { | 1498 | { |
1499 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 1499 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
1500 | unsigned long irqflags; | 1500 | unsigned long irqflags; |
@@ -1513,7 +1513,7 @@ int ivybridge_enable_vblank(struct drm_device *dev, int pipe) | |||
1513 | /* Called from drm generic code, passed 'crtc' which | 1513 | /* Called from drm generic code, passed 'crtc' which |
1514 | * we use as a pipe index | 1514 | * we use as a pipe index |
1515 | */ | 1515 | */ |
1516 | void i915_disable_vblank(struct drm_device *dev, int pipe) | 1516 | static void i915_disable_vblank(struct drm_device *dev, int pipe) |
1517 | { | 1517 | { |
1518 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 1518 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
1519 | unsigned long irqflags; | 1519 | unsigned long irqflags; |
@@ -1529,7 +1529,7 @@ void i915_disable_vblank(struct drm_device *dev, int pipe) | |||
1529 | spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags); | 1529 | spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags); |
1530 | } | 1530 | } |
1531 | 1531 | ||
1532 | void ironlake_disable_vblank(struct drm_device *dev, int pipe) | 1532 | static void ironlake_disable_vblank(struct drm_device *dev, int pipe) |
1533 | { | 1533 | { |
1534 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 1534 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
1535 | unsigned long irqflags; | 1535 | unsigned long irqflags; |
@@ -1540,7 +1540,7 @@ void ironlake_disable_vblank(struct drm_device *dev, int pipe) | |||
1540 | spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags); | 1540 | spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags); |
1541 | } | 1541 | } |
1542 | 1542 | ||
1543 | void ivybridge_disable_vblank(struct drm_device *dev, int pipe) | 1543 | static void ivybridge_disable_vblank(struct drm_device *dev, int pipe) |
1544 | { | 1544 | { |
1545 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 1545 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
1546 | unsigned long irqflags; | 1546 | unsigned long irqflags; |
@@ -1728,7 +1728,7 @@ repeat: | |||
1728 | 1728 | ||
1729 | /* drm_dma.h hooks | 1729 | /* drm_dma.h hooks |
1730 | */ | 1730 | */ |
1731 | void ironlake_irq_preinstall(struct drm_device *dev) | 1731 | static void ironlake_irq_preinstall(struct drm_device *dev) |
1732 | { | 1732 | { |
1733 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 1733 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
1734 | 1734 | ||
@@ -1740,7 +1740,7 @@ void ironlake_irq_preinstall(struct drm_device *dev) | |||
1740 | INIT_WORK(&dev_priv->rps_work, gen6_pm_rps_work); | 1740 | INIT_WORK(&dev_priv->rps_work, gen6_pm_rps_work); |
1741 | 1741 | ||
1742 | I915_WRITE(HWSTAM, 0xeffe); | 1742 | I915_WRITE(HWSTAM, 0xeffe); |
1743 | if (IS_GEN6(dev)) { | 1743 | if (IS_GEN6(dev) || IS_GEN7(dev)) { |
1744 | /* Workaround stalls observed on Sandy Bridge GPUs by | 1744 | /* Workaround stalls observed on Sandy Bridge GPUs by |
1745 | * making the blitter command streamer generate a | 1745 | * making the blitter command streamer generate a |
1746 | * write to the Hardware Status Page for | 1746 | * write to the Hardware Status Page for |
@@ -1769,7 +1769,7 @@ void ironlake_irq_preinstall(struct drm_device *dev) | |||
1769 | POSTING_READ(SDEIER); | 1769 | POSTING_READ(SDEIER); |
1770 | } | 1770 | } |
1771 | 1771 | ||
1772 | int ironlake_irq_postinstall(struct drm_device *dev) | 1772 | static int ironlake_irq_postinstall(struct drm_device *dev) |
1773 | { | 1773 | { |
1774 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 1774 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
1775 | /* enable kind of interrupts always enabled */ | 1775 | /* enable kind of interrupts always enabled */ |
@@ -1841,7 +1841,7 @@ int ironlake_irq_postinstall(struct drm_device *dev) | |||
1841 | return 0; | 1841 | return 0; |
1842 | } | 1842 | } |
1843 | 1843 | ||
1844 | int ivybridge_irq_postinstall(struct drm_device *dev) | 1844 | static int ivybridge_irq_postinstall(struct drm_device *dev) |
1845 | { | 1845 | { |
1846 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 1846 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
1847 | /* enable kind of interrupts always enabled */ | 1847 | /* enable kind of interrupts always enabled */ |
@@ -1891,7 +1891,7 @@ int ivybridge_irq_postinstall(struct drm_device *dev) | |||
1891 | return 0; | 1891 | return 0; |
1892 | } | 1892 | } |
1893 | 1893 | ||
1894 | void i915_driver_irq_preinstall(struct drm_device * dev) | 1894 | static void i915_driver_irq_preinstall(struct drm_device * dev) |
1895 | { | 1895 | { |
1896 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 1896 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
1897 | int pipe; | 1897 | int pipe; |
@@ -1918,7 +1918,7 @@ void i915_driver_irq_preinstall(struct drm_device * dev) | |||
1918 | * Must be called after intel_modeset_init or hotplug interrupts won't be | 1918 | * Must be called after intel_modeset_init or hotplug interrupts won't be |
1919 | * enabled correctly. | 1919 | * enabled correctly. |
1920 | */ | 1920 | */ |
1921 | int i915_driver_irq_postinstall(struct drm_device *dev) | 1921 | static int i915_driver_irq_postinstall(struct drm_device *dev) |
1922 | { | 1922 | { |
1923 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 1923 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
1924 | u32 enable_mask = I915_INTERRUPT_ENABLE_FIX | I915_INTERRUPT_ENABLE_VAR; | 1924 | u32 enable_mask = I915_INTERRUPT_ENABLE_FIX | I915_INTERRUPT_ENABLE_VAR; |
@@ -1994,7 +1994,7 @@ int i915_driver_irq_postinstall(struct drm_device *dev) | |||
1994 | return 0; | 1994 | return 0; |
1995 | } | 1995 | } |
1996 | 1996 | ||
1997 | void ironlake_irq_uninstall(struct drm_device *dev) | 1997 | static void ironlake_irq_uninstall(struct drm_device *dev) |
1998 | { | 1998 | { |
1999 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 1999 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
2000 | 2000 | ||
@@ -2014,7 +2014,7 @@ void ironlake_irq_uninstall(struct drm_device *dev) | |||
2014 | I915_WRITE(GTIIR, I915_READ(GTIIR)); | 2014 | I915_WRITE(GTIIR, I915_READ(GTIIR)); |
2015 | } | 2015 | } |
2016 | 2016 | ||
2017 | void i915_driver_irq_uninstall(struct drm_device * dev) | 2017 | static void i915_driver_irq_uninstall(struct drm_device * dev) |
2018 | { | 2018 | { |
2019 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 2019 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
2020 | int pipe; | 2020 | int pipe; |
@@ -2040,3 +2040,41 @@ void i915_driver_irq_uninstall(struct drm_device * dev) | |||
2040 | I915_READ(PIPESTAT(pipe)) & 0x8000ffff); | 2040 | I915_READ(PIPESTAT(pipe)) & 0x8000ffff); |
2041 | I915_WRITE(IIR, I915_READ(IIR)); | 2041 | I915_WRITE(IIR, I915_READ(IIR)); |
2042 | } | 2042 | } |
2043 | |||
2044 | void intel_irq_init(struct drm_device *dev) | ||
2045 | { | ||
2046 | dev->driver->get_vblank_counter = i915_get_vblank_counter; | ||
2047 | dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */ | ||
2048 | if (IS_G4X(dev) || IS_GEN5(dev) || IS_GEN6(dev) || IS_IVYBRIDGE(dev)) { | ||
2049 | dev->max_vblank_count = 0xffffffff; /* full 32 bit counter */ | ||
2050 | dev->driver->get_vblank_counter = gm45_get_vblank_counter; | ||
2051 | } | ||
2052 | |||
2053 | |||
2054 | dev->driver->get_vblank_timestamp = i915_get_vblank_timestamp; | ||
2055 | dev->driver->get_scanout_position = i915_get_crtc_scanoutpos; | ||
2056 | |||
2057 | if (IS_IVYBRIDGE(dev)) { | ||
2058 | /* Share pre & uninstall handlers with ILK/SNB */ | ||
2059 | dev->driver->irq_handler = ivybridge_irq_handler; | ||
2060 | dev->driver->irq_preinstall = ironlake_irq_preinstall; | ||
2061 | dev->driver->irq_postinstall = ivybridge_irq_postinstall; | ||
2062 | dev->driver->irq_uninstall = ironlake_irq_uninstall; | ||
2063 | dev->driver->enable_vblank = ivybridge_enable_vblank; | ||
2064 | dev->driver->disable_vblank = ivybridge_disable_vblank; | ||
2065 | } else if (HAS_PCH_SPLIT(dev)) { | ||
2066 | dev->driver->irq_handler = ironlake_irq_handler; | ||
2067 | dev->driver->irq_preinstall = ironlake_irq_preinstall; | ||
2068 | dev->driver->irq_postinstall = ironlake_irq_postinstall; | ||
2069 | dev->driver->irq_uninstall = ironlake_irq_uninstall; | ||
2070 | dev->driver->enable_vblank = ironlake_enable_vblank; | ||
2071 | dev->driver->disable_vblank = ironlake_disable_vblank; | ||
2072 | } else { | ||
2073 | dev->driver->irq_preinstall = i915_driver_irq_preinstall; | ||
2074 | dev->driver->irq_postinstall = i915_driver_irq_postinstall; | ||
2075 | dev->driver->irq_uninstall = i915_driver_irq_uninstall; | ||
2076 | dev->driver->irq_handler = i915_driver_irq_handler; | ||
2077 | dev->driver->enable_vblank = i915_enable_vblank; | ||
2078 | dev->driver->disable_vblank = i915_disable_vblank; | ||
2079 | } | ||
2080 | } | ||
diff --git a/drivers/gpu/drm/i915/i915_suspend.c b/drivers/gpu/drm/i915/i915_suspend.c index e8152d23d5b6..5257cfc34c35 100644 --- a/drivers/gpu/drm/i915/i915_suspend.c +++ b/drivers/gpu/drm/i915/i915_suspend.c | |||
@@ -597,7 +597,7 @@ static void i915_restore_modeset_reg(struct drm_device *dev) | |||
597 | return; | 597 | return; |
598 | } | 598 | } |
599 | 599 | ||
600 | void i915_save_display(struct drm_device *dev) | 600 | static void i915_save_display(struct drm_device *dev) |
601 | { | 601 | { |
602 | struct drm_i915_private *dev_priv = dev->dev_private; | 602 | struct drm_i915_private *dev_priv = dev->dev_private; |
603 | 603 | ||
@@ -678,7 +678,6 @@ void i915_save_display(struct drm_device *dev) | |||
678 | } | 678 | } |
679 | 679 | ||
680 | /* VGA state */ | 680 | /* VGA state */ |
681 | mutex_lock(&dev->struct_mutex); | ||
682 | dev_priv->saveVGA0 = I915_READ(VGA0); | 681 | dev_priv->saveVGA0 = I915_READ(VGA0); |
683 | dev_priv->saveVGA1 = I915_READ(VGA1); | 682 | dev_priv->saveVGA1 = I915_READ(VGA1); |
684 | dev_priv->saveVGA_PD = I915_READ(VGA_PD); | 683 | dev_priv->saveVGA_PD = I915_READ(VGA_PD); |
@@ -688,10 +687,9 @@ void i915_save_display(struct drm_device *dev) | |||
688 | dev_priv->saveVGACNTRL = I915_READ(VGACNTRL); | 687 | dev_priv->saveVGACNTRL = I915_READ(VGACNTRL); |
689 | 688 | ||
690 | i915_save_vga(dev); | 689 | i915_save_vga(dev); |
691 | mutex_unlock(&dev->struct_mutex); | ||
692 | } | 690 | } |
693 | 691 | ||
694 | void i915_restore_display(struct drm_device *dev) | 692 | static void i915_restore_display(struct drm_device *dev) |
695 | { | 693 | { |
696 | struct drm_i915_private *dev_priv = dev->dev_private; | 694 | struct drm_i915_private *dev_priv = dev->dev_private; |
697 | 695 | ||
@@ -783,7 +781,6 @@ void i915_restore_display(struct drm_device *dev) | |||
783 | else | 781 | else |
784 | I915_WRITE(VGACNTRL, dev_priv->saveVGACNTRL); | 782 | I915_WRITE(VGACNTRL, dev_priv->saveVGACNTRL); |
785 | 783 | ||
786 | mutex_lock(&dev->struct_mutex); | ||
787 | I915_WRITE(VGA0, dev_priv->saveVGA0); | 784 | I915_WRITE(VGA0, dev_priv->saveVGA0); |
788 | I915_WRITE(VGA1, dev_priv->saveVGA1); | 785 | I915_WRITE(VGA1, dev_priv->saveVGA1); |
789 | I915_WRITE(VGA_PD, dev_priv->saveVGA_PD); | 786 | I915_WRITE(VGA_PD, dev_priv->saveVGA_PD); |
@@ -791,7 +788,6 @@ void i915_restore_display(struct drm_device *dev) | |||
791 | udelay(150); | 788 | udelay(150); |
792 | 789 | ||
793 | i915_restore_vga(dev); | 790 | i915_restore_vga(dev); |
794 | mutex_unlock(&dev->struct_mutex); | ||
795 | } | 791 | } |
796 | 792 | ||
797 | int i915_save_state(struct drm_device *dev) | 793 | int i915_save_state(struct drm_device *dev) |
@@ -801,6 +797,8 @@ int i915_save_state(struct drm_device *dev) | |||
801 | 797 | ||
802 | pci_read_config_byte(dev->pdev, LBB, &dev_priv->saveLBB); | 798 | pci_read_config_byte(dev->pdev, LBB, &dev_priv->saveLBB); |
803 | 799 | ||
800 | mutex_lock(&dev->struct_mutex); | ||
801 | |||
804 | /* Hardware status page */ | 802 | /* Hardware status page */ |
805 | dev_priv->saveHWS = I915_READ(HWS_PGA); | 803 | dev_priv->saveHWS = I915_READ(HWS_PGA); |
806 | 804 | ||
@@ -840,6 +838,8 @@ int i915_save_state(struct drm_device *dev) | |||
840 | for (i = 0; i < 3; i++) | 838 | for (i = 0; i < 3; i++) |
841 | dev_priv->saveSWF2[i] = I915_READ(SWF30 + (i << 2)); | 839 | dev_priv->saveSWF2[i] = I915_READ(SWF30 + (i << 2)); |
842 | 840 | ||
841 | mutex_unlock(&dev->struct_mutex); | ||
842 | |||
843 | return 0; | 843 | return 0; |
844 | } | 844 | } |
845 | 845 | ||
@@ -850,6 +850,8 @@ int i915_restore_state(struct drm_device *dev) | |||
850 | 850 | ||
851 | pci_write_config_byte(dev->pdev, LBB, dev_priv->saveLBB); | 851 | pci_write_config_byte(dev->pdev, LBB, dev_priv->saveLBB); |
852 | 852 | ||
853 | mutex_lock(&dev->struct_mutex); | ||
854 | |||
853 | /* Hardware status page */ | 855 | /* Hardware status page */ |
854 | I915_WRITE(HWS_PGA, dev_priv->saveHWS); | 856 | I915_WRITE(HWS_PGA, dev_priv->saveHWS); |
855 | 857 | ||
@@ -867,6 +869,7 @@ int i915_restore_state(struct drm_device *dev) | |||
867 | I915_WRITE(IER, dev_priv->saveIER); | 869 | I915_WRITE(IER, dev_priv->saveIER); |
868 | I915_WRITE(IMR, dev_priv->saveIMR); | 870 | I915_WRITE(IMR, dev_priv->saveIMR); |
869 | } | 871 | } |
872 | mutex_unlock(&dev->struct_mutex); | ||
870 | 873 | ||
871 | intel_init_clock_gating(dev); | 874 | intel_init_clock_gating(dev); |
872 | 875 | ||
@@ -878,6 +881,8 @@ int i915_restore_state(struct drm_device *dev) | |||
878 | if (IS_GEN6(dev)) | 881 | if (IS_GEN6(dev)) |
879 | gen6_enable_rps(dev_priv); | 882 | gen6_enable_rps(dev_priv); |
880 | 883 | ||
884 | mutex_lock(&dev->struct_mutex); | ||
885 | |||
881 | /* Cache mode state */ | 886 | /* Cache mode state */ |
882 | I915_WRITE (CACHE_MODE_0, dev_priv->saveCACHE_MODE_0 | 0xffff0000); | 887 | I915_WRITE (CACHE_MODE_0, dev_priv->saveCACHE_MODE_0 | 0xffff0000); |
883 | 888 | ||
@@ -891,6 +896,8 @@ int i915_restore_state(struct drm_device *dev) | |||
891 | for (i = 0; i < 3; i++) | 896 | for (i = 0; i < 3; i++) |
892 | I915_WRITE(SWF30 + (i << 2), dev_priv->saveSWF2[i]); | 897 | I915_WRITE(SWF30 + (i << 2), dev_priv->saveSWF2[i]); |
893 | 898 | ||
899 | mutex_unlock(&dev->struct_mutex); | ||
900 | |||
894 | intel_i2c_reset(dev); | 901 | intel_i2c_reset(dev); |
895 | 902 | ||
896 | return 0; | 903 | return 0; |
diff --git a/drivers/gpu/drm/i915/intel_overlay.c b/drivers/gpu/drm/i915/intel_overlay.c index 56a8e2aea19c..9e2959bc91cd 100644 --- a/drivers/gpu/drm/i915/intel_overlay.c +++ b/drivers/gpu/drm/i915/intel_overlay.c | |||
@@ -1409,6 +1409,11 @@ void intel_setup_overlay(struct drm_device *dev) | |||
1409 | overlay = kzalloc(sizeof(struct intel_overlay), GFP_KERNEL); | 1409 | overlay = kzalloc(sizeof(struct intel_overlay), GFP_KERNEL); |
1410 | if (!overlay) | 1410 | if (!overlay) |
1411 | return; | 1411 | return; |
1412 | |||
1413 | mutex_lock(&dev->struct_mutex); | ||
1414 | if (WARN_ON(dev_priv->overlay)) | ||
1415 | goto out_free; | ||
1416 | |||
1412 | overlay->dev = dev; | 1417 | overlay->dev = dev; |
1413 | 1418 | ||
1414 | reg_bo = i915_gem_alloc_object(dev, PAGE_SIZE); | 1419 | reg_bo = i915_gem_alloc_object(dev, PAGE_SIZE); |
@@ -1416,8 +1421,6 @@ void intel_setup_overlay(struct drm_device *dev) | |||
1416 | goto out_free; | 1421 | goto out_free; |
1417 | overlay->reg_bo = reg_bo; | 1422 | overlay->reg_bo = reg_bo; |
1418 | 1423 | ||
1419 | mutex_lock(&dev->struct_mutex); | ||
1420 | |||
1421 | if (OVERLAY_NEEDS_PHYSICAL(dev)) { | 1424 | if (OVERLAY_NEEDS_PHYSICAL(dev)) { |
1422 | ret = i915_gem_attach_phys_object(dev, reg_bo, | 1425 | ret = i915_gem_attach_phys_object(dev, reg_bo, |
1423 | I915_GEM_PHYS_OVERLAY_REGS, | 1426 | I915_GEM_PHYS_OVERLAY_REGS, |
@@ -1442,8 +1445,6 @@ void intel_setup_overlay(struct drm_device *dev) | |||
1442 | } | 1445 | } |
1443 | } | 1446 | } |
1444 | 1447 | ||
1445 | mutex_unlock(&dev->struct_mutex); | ||
1446 | |||
1447 | /* init all values */ | 1448 | /* init all values */ |
1448 | overlay->color_key = 0x0101fe; | 1449 | overlay->color_key = 0x0101fe; |
1449 | overlay->brightness = -19; | 1450 | overlay->brightness = -19; |
@@ -1452,7 +1453,7 @@ void intel_setup_overlay(struct drm_device *dev) | |||
1452 | 1453 | ||
1453 | regs = intel_overlay_map_regs(overlay); | 1454 | regs = intel_overlay_map_regs(overlay); |
1454 | if (!regs) | 1455 | if (!regs) |
1455 | goto out_free_bo; | 1456 | goto out_unpin_bo; |
1456 | 1457 | ||
1457 | memset(regs, 0, sizeof(struct overlay_registers)); | 1458 | memset(regs, 0, sizeof(struct overlay_registers)); |
1458 | update_polyphase_filter(regs); | 1459 | update_polyphase_filter(regs); |
@@ -1461,15 +1462,17 @@ void intel_setup_overlay(struct drm_device *dev) | |||
1461 | intel_overlay_unmap_regs(overlay, regs); | 1462 | intel_overlay_unmap_regs(overlay, regs); |
1462 | 1463 | ||
1463 | dev_priv->overlay = overlay; | 1464 | dev_priv->overlay = overlay; |
1465 | mutex_unlock(&dev->struct_mutex); | ||
1464 | DRM_INFO("initialized overlay support\n"); | 1466 | DRM_INFO("initialized overlay support\n"); |
1465 | return; | 1467 | return; |
1466 | 1468 | ||
1467 | out_unpin_bo: | 1469 | out_unpin_bo: |
1468 | i915_gem_object_unpin(reg_bo); | 1470 | if (!OVERLAY_NEEDS_PHYSICAL(dev)) |
1471 | i915_gem_object_unpin(reg_bo); | ||
1469 | out_free_bo: | 1472 | out_free_bo: |
1470 | drm_gem_object_unreference(®_bo->base); | 1473 | drm_gem_object_unreference(®_bo->base); |
1471 | mutex_unlock(&dev->struct_mutex); | ||
1472 | out_free: | 1474 | out_free: |
1475 | mutex_unlock(&dev->struct_mutex); | ||
1473 | kfree(overlay); | 1476 | kfree(overlay); |
1474 | return; | 1477 | return; |
1475 | } | 1478 | } |
diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c index 144f79a350ae..731acea865b5 100644 --- a/drivers/gpu/drm/nouveau/nouveau_state.c +++ b/drivers/gpu/drm/nouveau/nouveau_state.c | |||
@@ -371,7 +371,6 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) | |||
371 | engine->vram.flags_valid = nv50_vram_flags_valid; | 371 | engine->vram.flags_valid = nv50_vram_flags_valid; |
372 | break; | 372 | break; |
373 | case 0xC0: | 373 | case 0xC0: |
374 | case 0xD0: | ||
375 | engine->instmem.init = nvc0_instmem_init; | 374 | engine->instmem.init = nvc0_instmem_init; |
376 | engine->instmem.takedown = nvc0_instmem_takedown; | 375 | engine->instmem.takedown = nvc0_instmem_takedown; |
377 | engine->instmem.suspend = nvc0_instmem_suspend; | 376 | engine->instmem.suspend = nvc0_instmem_suspend; |
@@ -923,7 +922,6 @@ int nouveau_load(struct drm_device *dev, unsigned long flags) | |||
923 | dev_priv->card_type = NV_50; | 922 | dev_priv->card_type = NV_50; |
924 | break; | 923 | break; |
925 | case 0xc0: | 924 | case 0xc0: |
926 | case 0xd0: | ||
927 | dev_priv->card_type = NV_C0; | 925 | dev_priv->card_type = NV_C0; |
928 | break; | 926 | break; |
929 | default: | 927 | default: |
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c index 12d2fdc52414..e8a5ffb0124d 100644 --- a/drivers/gpu/drm/radeon/evergreen.c +++ b/drivers/gpu/drm/radeon/evergreen.c | |||
@@ -2248,7 +2248,10 @@ int evergreen_mc_init(struct radeon_device *rdev) | |||
2248 | 2248 | ||
2249 | /* Get VRAM informations */ | 2249 | /* Get VRAM informations */ |
2250 | rdev->mc.vram_is_ddr = true; | 2250 | rdev->mc.vram_is_ddr = true; |
2251 | tmp = RREG32(MC_ARB_RAMCFG); | 2251 | if (rdev->flags & RADEON_IS_IGP) |
2252 | tmp = RREG32(FUS_MC_ARB_RAMCFG); | ||
2253 | else | ||
2254 | tmp = RREG32(MC_ARB_RAMCFG); | ||
2252 | if (tmp & CHANSIZE_OVERRIDE) { | 2255 | if (tmp & CHANSIZE_OVERRIDE) { |
2253 | chansize = 16; | 2256 | chansize = 16; |
2254 | } else if (tmp & CHANSIZE_MASK) { | 2257 | } else if (tmp & CHANSIZE_MASK) { |
diff --git a/drivers/gpu/drm/radeon/nid.h b/drivers/gpu/drm/radeon/nid.h index 9736746da2d6..4672869cdb26 100644 --- a/drivers/gpu/drm/radeon/nid.h +++ b/drivers/gpu/drm/radeon/nid.h | |||
@@ -320,7 +320,7 @@ | |||
320 | #define CGTS_USER_TCC_DISABLE 0x914C | 320 | #define CGTS_USER_TCC_DISABLE 0x914C |
321 | #define TCC_DISABLE_MASK 0xFFFF0000 | 321 | #define TCC_DISABLE_MASK 0xFFFF0000 |
322 | #define TCC_DISABLE_SHIFT 16 | 322 | #define TCC_DISABLE_SHIFT 16 |
323 | #define CGTS_SM_CTRL_REG 0x915C | 323 | #define CGTS_SM_CTRL_REG 0x9150 |
324 | #define OVERRIDE (1 << 21) | 324 | #define OVERRIDE (1 << 21) |
325 | 325 | ||
326 | #define TA_CNTL_AUX 0x9508 | 326 | #define TA_CNTL_AUX 0x9508 |
diff --git a/drivers/gpu/drm/radeon/radeon_bios.c b/drivers/gpu/drm/radeon/radeon_bios.c index 1aba85cad1a8..3fc5fa1aefd0 100644 --- a/drivers/gpu/drm/radeon/radeon_bios.c +++ b/drivers/gpu/drm/radeon/radeon_bios.c | |||
@@ -104,7 +104,7 @@ static bool radeon_read_bios(struct radeon_device *rdev) | |||
104 | static bool radeon_atrm_get_bios(struct radeon_device *rdev) | 104 | static bool radeon_atrm_get_bios(struct radeon_device *rdev) |
105 | { | 105 | { |
106 | int ret; | 106 | int ret; |
107 | int size = 64 * 1024; | 107 | int size = 256 * 1024; |
108 | int i; | 108 | int i; |
109 | 109 | ||
110 | if (!radeon_atrm_supported(rdev->pdev)) | 110 | if (!radeon_atrm_supported(rdev->pdev)) |
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c index 6f508ffd1035..8bb347d23ca6 100644 --- a/drivers/gpu/drm/radeon/rv770.c +++ b/drivers/gpu/drm/radeon/rv770.c | |||
@@ -575,6 +575,12 @@ static void rv770_program_channel_remap(struct radeon_device *rdev) | |||
575 | else | 575 | else |
576 | tcp_chan_steer = 0x00fac688; | 576 | tcp_chan_steer = 0x00fac688; |
577 | 577 | ||
578 | /* RV770 CE has special chremap setup */ | ||
579 | if (rdev->pdev->device == 0x944e) { | ||
580 | tcp_chan_steer = 0x00b08b08; | ||
581 | mc_shared_chremap = 0x00b08b08; | ||
582 | } | ||
583 | |||
578 | WREG32(TCP_CHAN_STEER, tcp_chan_steer); | 584 | WREG32(TCP_CHAN_STEER, tcp_chan_steer); |
579 | WREG32(MC_SHARED_CHREMAP, mc_shared_chremap); | 585 | WREG32(MC_SHARED_CHREMAP, mc_shared_chremap); |
580 | } | 586 | } |
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig index 16db83c83c8b..5f888f7e7dcb 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig | |||
@@ -333,7 +333,7 @@ config SENSORS_F71882FG | |||
333 | F71858FG | 333 | F71858FG |
334 | F71862FG | 334 | F71862FG |
335 | F71863FG | 335 | F71863FG |
336 | F71869F/E | 336 | F71869F/E/A |
337 | F71882FG | 337 | F71882FG |
338 | F71883FG | 338 | F71883FG |
339 | F71889FG/ED/A | 339 | F71889FG/ED/A |
diff --git a/drivers/hwmon/adm1275.c b/drivers/hwmon/adm1275.c index c2ee2048ab91..b9b7caf4a1d2 100644 --- a/drivers/hwmon/adm1275.c +++ b/drivers/hwmon/adm1275.c | |||
@@ -32,6 +32,7 @@ static int adm1275_probe(struct i2c_client *client, | |||
32 | const struct i2c_device_id *id) | 32 | const struct i2c_device_id *id) |
33 | { | 33 | { |
34 | int config; | 34 | int config; |
35 | int ret; | ||
35 | struct pmbus_driver_info *info; | 36 | struct pmbus_driver_info *info; |
36 | 37 | ||
37 | if (!i2c_check_functionality(client->adapter, | 38 | if (!i2c_check_functionality(client->adapter, |
@@ -43,8 +44,10 @@ static int adm1275_probe(struct i2c_client *client, | |||
43 | return -ENOMEM; | 44 | return -ENOMEM; |
44 | 45 | ||
45 | config = i2c_smbus_read_byte_data(client, ADM1275_PMON_CONFIG); | 46 | config = i2c_smbus_read_byte_data(client, ADM1275_PMON_CONFIG); |
46 | if (config < 0) | 47 | if (config < 0) { |
47 | return config; | 48 | ret = config; |
49 | goto err_mem; | ||
50 | } | ||
48 | 51 | ||
49 | info->pages = 1; | 52 | info->pages = 1; |
50 | info->direct[PSC_VOLTAGE_IN] = true; | 53 | info->direct[PSC_VOLTAGE_IN] = true; |
@@ -76,7 +79,14 @@ static int adm1275_probe(struct i2c_client *client, | |||
76 | else | 79 | else |
77 | info->func[0] |= PMBUS_HAVE_VIN | PMBUS_HAVE_STATUS_INPUT; | 80 | info->func[0] |= PMBUS_HAVE_VIN | PMBUS_HAVE_STATUS_INPUT; |
78 | 81 | ||
79 | return pmbus_do_probe(client, id, info); | 82 | ret = pmbus_do_probe(client, id, info); |
83 | if (ret) | ||
84 | goto err_mem; | ||
85 | return 0; | ||
86 | |||
87 | err_mem: | ||
88 | kfree(info); | ||
89 | return ret; | ||
80 | } | 90 | } |
81 | 91 | ||
82 | static int adm1275_remove(struct i2c_client *client) | 92 | static int adm1275_remove(struct i2c_client *client) |
diff --git a/drivers/hwmon/emc6w201.c b/drivers/hwmon/emc6w201.c index e0ef32378ac6..0064432f361f 100644 --- a/drivers/hwmon/emc6w201.c +++ b/drivers/hwmon/emc6w201.c | |||
@@ -78,8 +78,9 @@ static u16 emc6w201_read16(struct i2c_client *client, u8 reg) | |||
78 | 78 | ||
79 | lsb = i2c_smbus_read_byte_data(client, reg); | 79 | lsb = i2c_smbus_read_byte_data(client, reg); |
80 | msb = i2c_smbus_read_byte_data(client, reg + 1); | 80 | msb = i2c_smbus_read_byte_data(client, reg + 1); |
81 | if (lsb < 0 || msb < 0) { | 81 | if (unlikely(lsb < 0 || msb < 0)) { |
82 | dev_err(&client->dev, "16-bit read failed at 0x%02x\n", reg); | 82 | dev_err(&client->dev, "%d-bit %s failed at 0x%02x\n", |
83 | 16, "read", reg); | ||
83 | return 0xFFFF; /* Arbitrary value */ | 84 | return 0xFFFF; /* Arbitrary value */ |
84 | } | 85 | } |
85 | 86 | ||
@@ -95,10 +96,39 @@ static int emc6w201_write16(struct i2c_client *client, u8 reg, u16 val) | |||
95 | int err; | 96 | int err; |
96 | 97 | ||
97 | err = i2c_smbus_write_byte_data(client, reg, val & 0xff); | 98 | err = i2c_smbus_write_byte_data(client, reg, val & 0xff); |
98 | if (!err) | 99 | if (likely(!err)) |
99 | err = i2c_smbus_write_byte_data(client, reg + 1, val >> 8); | 100 | err = i2c_smbus_write_byte_data(client, reg + 1, val >> 8); |
100 | if (err < 0) | 101 | if (unlikely(err < 0)) |
101 | dev_err(&client->dev, "16-bit write failed at 0x%02x\n", reg); | 102 | dev_err(&client->dev, "%d-bit %s failed at 0x%02x\n", |
103 | 16, "write", reg); | ||
104 | |||
105 | return err; | ||
106 | } | ||
107 | |||
108 | /* Read 8-bit value from register */ | ||
109 | static u8 emc6w201_read8(struct i2c_client *client, u8 reg) | ||
110 | { | ||
111 | int val; | ||
112 | |||
113 | val = i2c_smbus_read_byte_data(client, reg); | ||
114 | if (unlikely(val < 0)) { | ||
115 | dev_err(&client->dev, "%d-bit %s failed at 0x%02x\n", | ||
116 | 8, "read", reg); | ||
117 | return 0x00; /* Arbitrary value */ | ||
118 | } | ||
119 | |||
120 | return val; | ||
121 | } | ||
122 | |||
123 | /* Write 8-bit value to register */ | ||
124 | static int emc6w201_write8(struct i2c_client *client, u8 reg, u8 val) | ||
125 | { | ||
126 | int err; | ||
127 | |||
128 | err = i2c_smbus_write_byte_data(client, reg, val); | ||
129 | if (unlikely(err < 0)) | ||
130 | dev_err(&client->dev, "%d-bit %s failed at 0x%02x\n", | ||
131 | 8, "write", reg); | ||
102 | 132 | ||
103 | return err; | 133 | return err; |
104 | } | 134 | } |
@@ -114,25 +144,25 @@ static struct emc6w201_data *emc6w201_update_device(struct device *dev) | |||
114 | if (time_after(jiffies, data->last_updated + HZ) || !data->valid) { | 144 | if (time_after(jiffies, data->last_updated + HZ) || !data->valid) { |
115 | for (nr = 0; nr < 6; nr++) { | 145 | for (nr = 0; nr < 6; nr++) { |
116 | data->in[input][nr] = | 146 | data->in[input][nr] = |
117 | i2c_smbus_read_byte_data(client, | 147 | emc6w201_read8(client, |
118 | EMC6W201_REG_IN(nr)); | 148 | EMC6W201_REG_IN(nr)); |
119 | data->in[min][nr] = | 149 | data->in[min][nr] = |
120 | i2c_smbus_read_byte_data(client, | 150 | emc6w201_read8(client, |
121 | EMC6W201_REG_IN_LOW(nr)); | 151 | EMC6W201_REG_IN_LOW(nr)); |
122 | data->in[max][nr] = | 152 | data->in[max][nr] = |
123 | i2c_smbus_read_byte_data(client, | 153 | emc6w201_read8(client, |
124 | EMC6W201_REG_IN_HIGH(nr)); | 154 | EMC6W201_REG_IN_HIGH(nr)); |
125 | } | 155 | } |
126 | 156 | ||
127 | for (nr = 0; nr < 6; nr++) { | 157 | for (nr = 0; nr < 6; nr++) { |
128 | data->temp[input][nr] = | 158 | data->temp[input][nr] = |
129 | i2c_smbus_read_byte_data(client, | 159 | emc6w201_read8(client, |
130 | EMC6W201_REG_TEMP(nr)); | 160 | EMC6W201_REG_TEMP(nr)); |
131 | data->temp[min][nr] = | 161 | data->temp[min][nr] = |
132 | i2c_smbus_read_byte_data(client, | 162 | emc6w201_read8(client, |
133 | EMC6W201_REG_TEMP_LOW(nr)); | 163 | EMC6W201_REG_TEMP_LOW(nr)); |
134 | data->temp[max][nr] = | 164 | data->temp[max][nr] = |
135 | i2c_smbus_read_byte_data(client, | 165 | emc6w201_read8(client, |
136 | EMC6W201_REG_TEMP_HIGH(nr)); | 166 | EMC6W201_REG_TEMP_HIGH(nr)); |
137 | } | 167 | } |
138 | 168 | ||
@@ -192,7 +222,7 @@ static ssize_t set_in(struct device *dev, struct device_attribute *devattr, | |||
192 | 222 | ||
193 | mutex_lock(&data->update_lock); | 223 | mutex_lock(&data->update_lock); |
194 | data->in[sf][nr] = SENSORS_LIMIT(val, 0, 255); | 224 | data->in[sf][nr] = SENSORS_LIMIT(val, 0, 255); |
195 | err = i2c_smbus_write_byte_data(client, reg, data->in[sf][nr]); | 225 | err = emc6w201_write8(client, reg, data->in[sf][nr]); |
196 | mutex_unlock(&data->update_lock); | 226 | mutex_unlock(&data->update_lock); |
197 | 227 | ||
198 | return err < 0 ? err : count; | 228 | return err < 0 ? err : count; |
@@ -229,7 +259,7 @@ static ssize_t set_temp(struct device *dev, struct device_attribute *devattr, | |||
229 | 259 | ||
230 | mutex_lock(&data->update_lock); | 260 | mutex_lock(&data->update_lock); |
231 | data->temp[sf][nr] = SENSORS_LIMIT(val, -127, 128); | 261 | data->temp[sf][nr] = SENSORS_LIMIT(val, -127, 128); |
232 | err = i2c_smbus_write_byte_data(client, reg, data->temp[sf][nr]); | 262 | err = emc6w201_write8(client, reg, data->temp[sf][nr]); |
233 | mutex_unlock(&data->update_lock); | 263 | mutex_unlock(&data->update_lock); |
234 | 264 | ||
235 | return err < 0 ? err : count; | 265 | return err < 0 ? err : count; |
@@ -444,7 +474,7 @@ static int emc6w201_detect(struct i2c_client *client, | |||
444 | 474 | ||
445 | /* Check configuration */ | 475 | /* Check configuration */ |
446 | config = i2c_smbus_read_byte_data(client, EMC6W201_REG_CONFIG); | 476 | config = i2c_smbus_read_byte_data(client, EMC6W201_REG_CONFIG); |
447 | if ((config & 0xF4) != 0x04) | 477 | if (config < 0 || (config & 0xF4) != 0x04) |
448 | return -ENODEV; | 478 | return -ENODEV; |
449 | if (!(config & 0x01)) { | 479 | if (!(config & 0x01)) { |
450 | dev_err(&client->dev, "Monitoring not enabled\n"); | 480 | dev_err(&client->dev, "Monitoring not enabled\n"); |
diff --git a/drivers/hwmon/f71882fg.c b/drivers/hwmon/f71882fg.c index a4a94a096c90..2d96ed2bf8ed 100644 --- a/drivers/hwmon/f71882fg.c +++ b/drivers/hwmon/f71882fg.c | |||
@@ -52,6 +52,7 @@ | |||
52 | #define SIO_F71858_ID 0x0507 /* Chipset ID */ | 52 | #define SIO_F71858_ID 0x0507 /* Chipset ID */ |
53 | #define SIO_F71862_ID 0x0601 /* Chipset ID */ | 53 | #define SIO_F71862_ID 0x0601 /* Chipset ID */ |
54 | #define SIO_F71869_ID 0x0814 /* Chipset ID */ | 54 | #define SIO_F71869_ID 0x0814 /* Chipset ID */ |
55 | #define SIO_F71869A_ID 0x1007 /* Chipset ID */ | ||
55 | #define SIO_F71882_ID 0x0541 /* Chipset ID */ | 56 | #define SIO_F71882_ID 0x0541 /* Chipset ID */ |
56 | #define SIO_F71889_ID 0x0723 /* Chipset ID */ | 57 | #define SIO_F71889_ID 0x0723 /* Chipset ID */ |
57 | #define SIO_F71889E_ID 0x0909 /* Chipset ID */ | 58 | #define SIO_F71889E_ID 0x0909 /* Chipset ID */ |
@@ -108,8 +109,8 @@ static unsigned short force_id; | |||
108 | module_param(force_id, ushort, 0); | 109 | module_param(force_id, ushort, 0); |
109 | MODULE_PARM_DESC(force_id, "Override the detected device ID"); | 110 | MODULE_PARM_DESC(force_id, "Override the detected device ID"); |
110 | 111 | ||
111 | enum chips { f71808e, f71808a, f71858fg, f71862fg, f71869, f71882fg, f71889fg, | 112 | enum chips { f71808e, f71808a, f71858fg, f71862fg, f71869, f71869a, f71882fg, |
112 | f71889ed, f71889a, f8000, f81865f }; | 113 | f71889fg, f71889ed, f71889a, f8000, f81865f }; |
113 | 114 | ||
114 | static const char *f71882fg_names[] = { | 115 | static const char *f71882fg_names[] = { |
115 | "f71808e", | 116 | "f71808e", |
@@ -117,6 +118,7 @@ static const char *f71882fg_names[] = { | |||
117 | "f71858fg", | 118 | "f71858fg", |
118 | "f71862fg", | 119 | "f71862fg", |
119 | "f71869", /* Both f71869f and f71869e, reg. compatible and same id */ | 120 | "f71869", /* Both f71869f and f71869e, reg. compatible and same id */ |
121 | "f71869a", | ||
120 | "f71882fg", | 122 | "f71882fg", |
121 | "f71889fg", /* f81801u too, same id */ | 123 | "f71889fg", /* f81801u too, same id */ |
122 | "f71889ed", | 124 | "f71889ed", |
@@ -131,6 +133,7 @@ static const char f71882fg_has_in[][F71882FG_MAX_INS] = { | |||
131 | [f71858fg] = { 1, 1, 1, 0, 0, 0, 0, 0, 0 }, | 133 | [f71858fg] = { 1, 1, 1, 0, 0, 0, 0, 0, 0 }, |
132 | [f71862fg] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }, | 134 | [f71862fg] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }, |
133 | [f71869] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }, | 135 | [f71869] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }, |
136 | [f71869a] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }, | ||
134 | [f71882fg] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }, | 137 | [f71882fg] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }, |
135 | [f71889fg] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }, | 138 | [f71889fg] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }, |
136 | [f71889ed] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }, | 139 | [f71889ed] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }, |
@@ -145,6 +148,7 @@ static const char f71882fg_has_in1_alarm[] = { | |||
145 | [f71858fg] = 0, | 148 | [f71858fg] = 0, |
146 | [f71862fg] = 0, | 149 | [f71862fg] = 0, |
147 | [f71869] = 0, | 150 | [f71869] = 0, |
151 | [f71869a] = 0, | ||
148 | [f71882fg] = 1, | 152 | [f71882fg] = 1, |
149 | [f71889fg] = 1, | 153 | [f71889fg] = 1, |
150 | [f71889ed] = 1, | 154 | [f71889ed] = 1, |
@@ -159,6 +163,7 @@ static const char f71882fg_fan_has_beep[] = { | |||
159 | [f71858fg] = 0, | 163 | [f71858fg] = 0, |
160 | [f71862fg] = 1, | 164 | [f71862fg] = 1, |
161 | [f71869] = 1, | 165 | [f71869] = 1, |
166 | [f71869a] = 1, | ||
162 | [f71882fg] = 1, | 167 | [f71882fg] = 1, |
163 | [f71889fg] = 1, | 168 | [f71889fg] = 1, |
164 | [f71889ed] = 1, | 169 | [f71889ed] = 1, |
@@ -173,6 +178,7 @@ static const char f71882fg_nr_fans[] = { | |||
173 | [f71858fg] = 3, | 178 | [f71858fg] = 3, |
174 | [f71862fg] = 3, | 179 | [f71862fg] = 3, |
175 | [f71869] = 3, | 180 | [f71869] = 3, |
181 | [f71869a] = 3, | ||
176 | [f71882fg] = 4, | 182 | [f71882fg] = 4, |
177 | [f71889fg] = 3, | 183 | [f71889fg] = 3, |
178 | [f71889ed] = 3, | 184 | [f71889ed] = 3, |
@@ -187,6 +193,7 @@ static const char f71882fg_temp_has_beep[] = { | |||
187 | [f71858fg] = 0, | 193 | [f71858fg] = 0, |
188 | [f71862fg] = 1, | 194 | [f71862fg] = 1, |
189 | [f71869] = 1, | 195 | [f71869] = 1, |
196 | [f71869a] = 1, | ||
190 | [f71882fg] = 1, | 197 | [f71882fg] = 1, |
191 | [f71889fg] = 1, | 198 | [f71889fg] = 1, |
192 | [f71889ed] = 1, | 199 | [f71889ed] = 1, |
@@ -201,6 +208,7 @@ static const char f71882fg_nr_temps[] = { | |||
201 | [f71858fg] = 3, | 208 | [f71858fg] = 3, |
202 | [f71862fg] = 3, | 209 | [f71862fg] = 3, |
203 | [f71869] = 3, | 210 | [f71869] = 3, |
211 | [f71869a] = 3, | ||
204 | [f71882fg] = 3, | 212 | [f71882fg] = 3, |
205 | [f71889fg] = 3, | 213 | [f71889fg] = 3, |
206 | [f71889ed] = 3, | 214 | [f71889ed] = 3, |
@@ -2243,6 +2251,7 @@ static int __devinit f71882fg_probe(struct platform_device *pdev) | |||
2243 | case f71808e: | 2251 | case f71808e: |
2244 | case f71808a: | 2252 | case f71808a: |
2245 | case f71869: | 2253 | case f71869: |
2254 | case f71869a: | ||
2246 | /* These always have signed auto point temps */ | 2255 | /* These always have signed auto point temps */ |
2247 | data->auto_point_temp_signed = 1; | 2256 | data->auto_point_temp_signed = 1; |
2248 | /* Fall through to select correct fan/pwm reg bank! */ | 2257 | /* Fall through to select correct fan/pwm reg bank! */ |
@@ -2305,6 +2314,7 @@ static int __devinit f71882fg_probe(struct platform_device *pdev) | |||
2305 | case f71808e: | 2314 | case f71808e: |
2306 | case f71808a: | 2315 | case f71808a: |
2307 | case f71869: | 2316 | case f71869: |
2317 | case f71869a: | ||
2308 | case f71889fg: | 2318 | case f71889fg: |
2309 | case f71889ed: | 2319 | case f71889ed: |
2310 | case f71889a: | 2320 | case f71889a: |
@@ -2528,6 +2538,9 @@ static int __init f71882fg_find(int sioaddr, unsigned short *address, | |||
2528 | case SIO_F71869_ID: | 2538 | case SIO_F71869_ID: |
2529 | sio_data->type = f71869; | 2539 | sio_data->type = f71869; |
2530 | break; | 2540 | break; |
2541 | case SIO_F71869A_ID: | ||
2542 | sio_data->type = f71869a; | ||
2543 | break; | ||
2531 | case SIO_F71882_ID: | 2544 | case SIO_F71882_ID: |
2532 | sio_data->type = f71882fg; | 2545 | sio_data->type = f71882fg; |
2533 | break; | 2546 | break; |
@@ -2662,7 +2675,7 @@ static void __exit f71882fg_exit(void) | |||
2662 | } | 2675 | } |
2663 | 2676 | ||
2664 | MODULE_DESCRIPTION("F71882FG Hardware Monitoring Driver"); | 2677 | MODULE_DESCRIPTION("F71882FG Hardware Monitoring Driver"); |
2665 | MODULE_AUTHOR("Hans Edgington, Hans de Goede (hdegoede@redhat.com)"); | 2678 | MODULE_AUTHOR("Hans Edgington, Hans de Goede <hdegoede@redhat.com>"); |
2666 | MODULE_LICENSE("GPL"); | 2679 | MODULE_LICENSE("GPL"); |
2667 | 2680 | ||
2668 | module_init(f71882fg_init); | 2681 | module_init(f71882fg_init); |
diff --git a/drivers/hwmon/hwmon-vid.c b/drivers/hwmon/hwmon-vid.c index 2582bfef6ccb..c8195a077da3 100644 --- a/drivers/hwmon/hwmon-vid.c +++ b/drivers/hwmon/hwmon-vid.c | |||
@@ -202,7 +202,7 @@ static struct vrm_model vrm_models[] = { | |||
202 | 202 | ||
203 | {X86_VENDOR_CENTAUR, 0x6, 0x7, ANY, 85}, /* Eden ESP/Ezra */ | 203 | {X86_VENDOR_CENTAUR, 0x6, 0x7, ANY, 85}, /* Eden ESP/Ezra */ |
204 | {X86_VENDOR_CENTAUR, 0x6, 0x8, 0x7, 85}, /* Ezra T */ | 204 | {X86_VENDOR_CENTAUR, 0x6, 0x8, 0x7, 85}, /* Ezra T */ |
205 | {X86_VENDOR_CENTAUR, 0x6, 0x9, 0x7, 85}, /* Nemiah */ | 205 | {X86_VENDOR_CENTAUR, 0x6, 0x9, 0x7, 85}, /* Nehemiah */ |
206 | {X86_VENDOR_CENTAUR, 0x6, 0x9, ANY, 17}, /* C3-M, Eden-N */ | 206 | {X86_VENDOR_CENTAUR, 0x6, 0x9, ANY, 17}, /* C3-M, Eden-N */ |
207 | {X86_VENDOR_CENTAUR, 0x6, 0xA, 0x7, 0}, /* No information */ | 207 | {X86_VENDOR_CENTAUR, 0x6, 0xA, 0x7, 0}, /* No information */ |
208 | {X86_VENDOR_CENTAUR, 0x6, 0xA, ANY, 13}, /* C7, Esther */ | 208 | {X86_VENDOR_CENTAUR, 0x6, 0xA, ANY, 13}, /* C7, Esther */ |
diff --git a/drivers/hwmon/pmbus.c b/drivers/hwmon/pmbus.c index 98e2e28899e2..931d940923ae 100644 --- a/drivers/hwmon/pmbus.c +++ b/drivers/hwmon/pmbus.c | |||
@@ -47,12 +47,14 @@ static void pmbus_find_sensor_groups(struct i2c_client *client, | |||
47 | if (info->func[0] | 47 | if (info->func[0] |
48 | && pmbus_check_byte_register(client, 0, PMBUS_STATUS_INPUT)) | 48 | && pmbus_check_byte_register(client, 0, PMBUS_STATUS_INPUT)) |
49 | info->func[0] |= PMBUS_HAVE_STATUS_INPUT; | 49 | info->func[0] |= PMBUS_HAVE_STATUS_INPUT; |
50 | if (pmbus_check_word_register(client, 0, PMBUS_READ_FAN_SPEED_1)) { | 50 | if (pmbus_check_byte_register(client, 0, PMBUS_FAN_CONFIG_12) && |
51 | pmbus_check_word_register(client, 0, PMBUS_READ_FAN_SPEED_1)) { | ||
51 | info->func[0] |= PMBUS_HAVE_FAN12; | 52 | info->func[0] |= PMBUS_HAVE_FAN12; |
52 | if (pmbus_check_byte_register(client, 0, PMBUS_STATUS_FAN_12)) | 53 | if (pmbus_check_byte_register(client, 0, PMBUS_STATUS_FAN_12)) |
53 | info->func[0] |= PMBUS_HAVE_STATUS_FAN12; | 54 | info->func[0] |= PMBUS_HAVE_STATUS_FAN12; |
54 | } | 55 | } |
55 | if (pmbus_check_word_register(client, 0, PMBUS_READ_FAN_SPEED_3)) { | 56 | if (pmbus_check_byte_register(client, 0, PMBUS_FAN_CONFIG_34) && |
57 | pmbus_check_word_register(client, 0, PMBUS_READ_FAN_SPEED_3)) { | ||
56 | info->func[0] |= PMBUS_HAVE_FAN34; | 58 | info->func[0] |= PMBUS_HAVE_FAN34; |
57 | if (pmbus_check_byte_register(client, 0, PMBUS_STATUS_FAN_34)) | 59 | if (pmbus_check_byte_register(client, 0, PMBUS_STATUS_FAN_34)) |
58 | info->func[0] |= PMBUS_HAVE_STATUS_FAN34; | 60 | info->func[0] |= PMBUS_HAVE_STATUS_FAN34; |
@@ -63,6 +65,10 @@ static void pmbus_find_sensor_groups(struct i2c_client *client, | |||
63 | PMBUS_STATUS_TEMPERATURE)) | 65 | PMBUS_STATUS_TEMPERATURE)) |
64 | info->func[0] |= PMBUS_HAVE_STATUS_TEMP; | 66 | info->func[0] |= PMBUS_HAVE_STATUS_TEMP; |
65 | } | 67 | } |
68 | if (pmbus_check_word_register(client, 0, PMBUS_READ_TEMPERATURE_2)) | ||
69 | info->func[0] |= PMBUS_HAVE_TEMP2; | ||
70 | if (pmbus_check_word_register(client, 0, PMBUS_READ_TEMPERATURE_3)) | ||
71 | info->func[0] |= PMBUS_HAVE_TEMP3; | ||
66 | 72 | ||
67 | /* Sensors detected on all pages */ | 73 | /* Sensors detected on all pages */ |
68 | for (page = 0; page < info->pages; page++) { | 74 | for (page = 0; page < info->pages; page++) { |
diff --git a/drivers/hwmon/pmbus_core.c b/drivers/hwmon/pmbus_core.c index 354770ed3186..744672c1f26d 100644 --- a/drivers/hwmon/pmbus_core.c +++ b/drivers/hwmon/pmbus_core.c | |||
@@ -1430,14 +1430,9 @@ int pmbus_do_probe(struct i2c_client *client, const struct i2c_device_id *id, | |||
1430 | i2c_set_clientdata(client, data); | 1430 | i2c_set_clientdata(client, data); |
1431 | mutex_init(&data->update_lock); | 1431 | mutex_init(&data->update_lock); |
1432 | 1432 | ||
1433 | /* | 1433 | /* Bail out if PMBus status register does not exist. */ |
1434 | * Bail out if status register or PMBus revision register | 1434 | if (i2c_smbus_read_byte_data(client, PMBUS_STATUS_BYTE) < 0) { |
1435 | * does not exist. | 1435 | dev_err(&client->dev, "PMBus status register not found\n"); |
1436 | */ | ||
1437 | if (i2c_smbus_read_byte_data(client, PMBUS_STATUS_BYTE) < 0 | ||
1438 | || i2c_smbus_read_byte_data(client, PMBUS_REVISION) < 0) { | ||
1439 | dev_err(&client->dev, | ||
1440 | "Status or revision register not found\n"); | ||
1441 | ret = -ENODEV; | 1436 | ret = -ENODEV; |
1442 | goto out_data; | 1437 | goto out_data; |
1443 | } | 1438 | } |
diff --git a/drivers/hwmon/sch5627.c b/drivers/hwmon/sch5627.c index 020c87273ea1..3494a4cce414 100644 --- a/drivers/hwmon/sch5627.c +++ b/drivers/hwmon/sch5627.c | |||
@@ -887,7 +887,7 @@ static void __exit sch5627_exit(void) | |||
887 | } | 887 | } |
888 | 888 | ||
889 | MODULE_DESCRIPTION("SMSC SCH5627 Hardware Monitoring Driver"); | 889 | MODULE_DESCRIPTION("SMSC SCH5627 Hardware Monitoring Driver"); |
890 | MODULE_AUTHOR("Hans de Goede (hdegoede@redhat.com)"); | 890 | MODULE_AUTHOR("Hans de Goede <hdegoede@redhat.com>"); |
891 | MODULE_LICENSE("GPL"); | 891 | MODULE_LICENSE("GPL"); |
892 | 892 | ||
893 | module_init(sch5627_init); | 893 | module_init(sch5627_init); |
diff --git a/drivers/i2c/busses/i2c-taos-evm.c b/drivers/i2c/busses/i2c-taos-evm.c index dd39c1eb03ed..26c352a09298 100644 --- a/drivers/i2c/busses/i2c-taos-evm.c +++ b/drivers/i2c/busses/i2c-taos-evm.c | |||
@@ -234,7 +234,7 @@ static int taos_connect(struct serio *serio, struct serio_driver *drv) | |||
234 | 234 | ||
235 | if (taos->state != TAOS_STATE_IDLE) { | 235 | if (taos->state != TAOS_STATE_IDLE) { |
236 | err = -ENODEV; | 236 | err = -ENODEV; |
237 | dev_dbg(&serio->dev, "TAOS EVM reset failed (state=%d, " | 237 | dev_err(&serio->dev, "TAOS EVM reset failed (state=%d, " |
238 | "pos=%d)\n", taos->state, taos->pos); | 238 | "pos=%d)\n", taos->state, taos->pos); |
239 | goto exit_close; | 239 | goto exit_close; |
240 | } | 240 | } |
@@ -255,7 +255,7 @@ static int taos_connect(struct serio *serio, struct serio_driver *drv) | |||
255 | msecs_to_jiffies(250)); | 255 | msecs_to_jiffies(250)); |
256 | if (taos->state != TAOS_STATE_IDLE) { | 256 | if (taos->state != TAOS_STATE_IDLE) { |
257 | err = -ENODEV; | 257 | err = -ENODEV; |
258 | dev_err(&adapter->dev, "Echo off failed " | 258 | dev_err(&serio->dev, "TAOS EVM echo off failed " |
259 | "(state=%d)\n", taos->state); | 259 | "(state=%d)\n", taos->state); |
260 | goto exit_close; | 260 | goto exit_close; |
261 | } | 261 | } |
@@ -263,7 +263,7 @@ static int taos_connect(struct serio *serio, struct serio_driver *drv) | |||
263 | err = i2c_add_adapter(adapter); | 263 | err = i2c_add_adapter(adapter); |
264 | if (err) | 264 | if (err) |
265 | goto exit_close; | 265 | goto exit_close; |
266 | dev_dbg(&serio->dev, "Connected to TAOS EVM\n"); | 266 | dev_info(&serio->dev, "Connected to TAOS EVM\n"); |
267 | 267 | ||
268 | taos->client = taos_instantiate_device(adapter); | 268 | taos->client = taos_instantiate_device(adapter); |
269 | return 0; | 269 | return 0; |
@@ -288,7 +288,7 @@ static void taos_disconnect(struct serio *serio) | |||
288 | serio_set_drvdata(serio, NULL); | 288 | serio_set_drvdata(serio, NULL); |
289 | kfree(taos); | 289 | kfree(taos); |
290 | 290 | ||
291 | dev_dbg(&serio->dev, "Disconnected from TAOS EVM\n"); | 291 | dev_info(&serio->dev, "Disconnected from TAOS EVM\n"); |
292 | } | 292 | } |
293 | 293 | ||
294 | static struct serio_device_id taos_serio_ids[] = { | 294 | static struct serio_device_id taos_serio_ids[] = { |
diff --git a/drivers/i2c/muxes/pca954x.c b/drivers/i2c/muxes/pca954x.c index 54e1ce73534b..6f8953664636 100644 --- a/drivers/i2c/muxes/pca954x.c +++ b/drivers/i2c/muxes/pca954x.c | |||
@@ -201,10 +201,11 @@ static int pca954x_probe(struct i2c_client *client, | |||
201 | 201 | ||
202 | i2c_set_clientdata(client, data); | 202 | i2c_set_clientdata(client, data); |
203 | 203 | ||
204 | /* Read the mux register at addr to verify | 204 | /* Write the mux register at addr to verify |
205 | * that the mux is in fact present. | 205 | * that the mux is in fact present. This also |
206 | * initializes the mux to disconnected state. | ||
206 | */ | 207 | */ |
207 | if (i2c_smbus_read_byte(client) < 0) { | 208 | if (i2c_smbus_write_byte(client, 0) < 0) { |
208 | dev_warn(&client->dev, "probe failed\n"); | 209 | dev_warn(&client->dev, "probe failed\n"); |
209 | goto exit_free; | 210 | goto exit_free; |
210 | } | 211 | } |
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c index f62f52fb9ece..fc0f2bd9ca82 100644 --- a/drivers/infiniband/core/cm.c +++ b/drivers/infiniband/core/cm.c | |||
@@ -3641,7 +3641,8 @@ static struct kobj_type cm_port_obj_type = { | |||
3641 | 3641 | ||
3642 | static char *cm_devnode(struct device *dev, mode_t *mode) | 3642 | static char *cm_devnode(struct device *dev, mode_t *mode) |
3643 | { | 3643 | { |
3644 | *mode = 0666; | 3644 | if (mode) |
3645 | *mode = 0666; | ||
3645 | return kasprintf(GFP_KERNEL, "infiniband/%s", dev_name(dev)); | 3646 | return kasprintf(GFP_KERNEL, "infiniband/%s", dev_name(dev)); |
3646 | } | 3647 | } |
3647 | 3648 | ||
diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c index e49a85f8a44d..56898b6578a4 100644 --- a/drivers/infiniband/core/uverbs_main.c +++ b/drivers/infiniband/core/uverbs_main.c | |||
@@ -826,7 +826,8 @@ static void ib_uverbs_remove_one(struct ib_device *device) | |||
826 | 826 | ||
827 | static char *uverbs_devnode(struct device *dev, mode_t *mode) | 827 | static char *uverbs_devnode(struct device *dev, mode_t *mode) |
828 | { | 828 | { |
829 | *mode = 0666; | 829 | if (mode) |
830 | *mode = 0666; | ||
830 | return kasprintf(GFP_KERNEL, "infiniband/%s", dev_name(dev)); | 831 | return kasprintf(GFP_KERNEL, "infiniband/%s", dev_name(dev)); |
831 | } | 832 | } |
832 | 833 | ||
diff --git a/drivers/mtd/nand/fsl_elbc_nand.c b/drivers/mtd/nand/fsl_elbc_nand.c index 0bb254c7d2b1..33d8aad8bba5 100644 --- a/drivers/mtd/nand/fsl_elbc_nand.c +++ b/drivers/mtd/nand/fsl_elbc_nand.c | |||
@@ -339,9 +339,9 @@ static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command, | |||
339 | (FIR_OP_UA << FIR_OP1_SHIFT) | | 339 | (FIR_OP_UA << FIR_OP1_SHIFT) | |
340 | (FIR_OP_RBW << FIR_OP2_SHIFT)); | 340 | (FIR_OP_RBW << FIR_OP2_SHIFT)); |
341 | out_be32(&lbc->fcr, NAND_CMD_READID << FCR_CMD0_SHIFT); | 341 | out_be32(&lbc->fcr, NAND_CMD_READID << FCR_CMD0_SHIFT); |
342 | /* 5 bytes for manuf, device and exts */ | 342 | /* nand_get_flash_type() reads 8 bytes of entire ID string */ |
343 | out_be32(&lbc->fbcr, 5); | 343 | out_be32(&lbc->fbcr, 8); |
344 | elbc_fcm_ctrl->read_bytes = 5; | 344 | elbc_fcm_ctrl->read_bytes = 8; |
345 | elbc_fcm_ctrl->use_mdr = 1; | 345 | elbc_fcm_ctrl->use_mdr = 1; |
346 | elbc_fcm_ctrl->mdr = 0; | 346 | elbc_fcm_ctrl->mdr = 0; |
347 | 347 | ||
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 19f04a34783a..93359fab240e 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
@@ -3416,7 +3416,8 @@ config NETCONSOLE | |||
3416 | 3416 | ||
3417 | config NETCONSOLE_DYNAMIC | 3417 | config NETCONSOLE_DYNAMIC |
3418 | bool "Dynamic reconfiguration of logging targets" | 3418 | bool "Dynamic reconfiguration of logging targets" |
3419 | depends on NETCONSOLE && SYSFS && CONFIGFS_FS | 3419 | depends on NETCONSOLE && SYSFS && CONFIGFS_FS && \ |
3420 | !(NETCONSOLE=y && CONFIGFS_FS=m) | ||
3420 | help | 3421 | help |
3421 | This option enables the ability to dynamically reconfigure target | 3422 | This option enables the ability to dynamically reconfigure target |
3422 | parameters (interface, IP addresses, port numbers, MAC addresses) | 3423 | parameters (interface, IP addresses, port numbers, MAC addresses) |
diff --git a/drivers/net/bnx2x/bnx2x_main.c b/drivers/net/bnx2x/bnx2x_main.c index 4b70311a11ef..74be989f51c5 100644 --- a/drivers/net/bnx2x/bnx2x_main.c +++ b/drivers/net/bnx2x/bnx2x_main.c | |||
@@ -49,6 +49,7 @@ | |||
49 | #include <linux/zlib.h> | 49 | #include <linux/zlib.h> |
50 | #include <linux/io.h> | 50 | #include <linux/io.h> |
51 | #include <linux/stringify.h> | 51 | #include <linux/stringify.h> |
52 | #include <linux/vmalloc.h> | ||
52 | 53 | ||
53 | #define BNX2X_MAIN | 54 | #define BNX2X_MAIN |
54 | #include "bnx2x.h" | 55 | #include "bnx2x.h" |
@@ -4537,8 +4538,7 @@ static int bnx2x_gunzip_init(struct bnx2x *bp) | |||
4537 | if (bp->strm == NULL) | 4538 | if (bp->strm == NULL) |
4538 | goto gunzip_nomem2; | 4539 | goto gunzip_nomem2; |
4539 | 4540 | ||
4540 | bp->strm->workspace = kmalloc(zlib_inflate_workspacesize(), | 4541 | bp->strm->workspace = vmalloc(zlib_inflate_workspacesize()); |
4541 | GFP_KERNEL); | ||
4542 | if (bp->strm->workspace == NULL) | 4542 | if (bp->strm->workspace == NULL) |
4543 | goto gunzip_nomem3; | 4543 | goto gunzip_nomem3; |
4544 | 4544 | ||
@@ -4562,7 +4562,7 @@ gunzip_nomem1: | |||
4562 | static void bnx2x_gunzip_end(struct bnx2x *bp) | 4562 | static void bnx2x_gunzip_end(struct bnx2x *bp) |
4563 | { | 4563 | { |
4564 | if (bp->strm) { | 4564 | if (bp->strm) { |
4565 | kfree(bp->strm->workspace); | 4565 | vfree(bp->strm->workspace); |
4566 | kfree(bp->strm); | 4566 | kfree(bp->strm); |
4567 | bp->strm = NULL; | 4567 | bp->strm = NULL; |
4568 | } | 4568 | } |
diff --git a/drivers/net/can/Kconfig b/drivers/net/can/Kconfig index 1d699e3df547..754df5ef1729 100644 --- a/drivers/net/can/Kconfig +++ b/drivers/net/can/Kconfig | |||
@@ -36,7 +36,7 @@ config CAN_SLCAN | |||
36 | config CAN_DEV | 36 | config CAN_DEV |
37 | tristate "Platform CAN drivers with Netlink support" | 37 | tristate "Platform CAN drivers with Netlink support" |
38 | depends on CAN | 38 | depends on CAN |
39 | default Y | 39 | default y |
40 | ---help--- | 40 | ---help--- |
41 | Enables the common framework for platform CAN drivers with Netlink | 41 | Enables the common framework for platform CAN drivers with Netlink |
42 | support. This is the standard library for CAN drivers. | 42 | support. This is the standard library for CAN drivers. |
@@ -45,7 +45,7 @@ config CAN_DEV | |||
45 | config CAN_CALC_BITTIMING | 45 | config CAN_CALC_BITTIMING |
46 | bool "CAN bit-timing calculation" | 46 | bool "CAN bit-timing calculation" |
47 | depends on CAN_DEV | 47 | depends on CAN_DEV |
48 | default Y | 48 | default y |
49 | ---help--- | 49 | ---help--- |
50 | If enabled, CAN bit-timing parameters will be calculated for the | 50 | If enabled, CAN bit-timing parameters will be calculated for the |
51 | bit-rate specified via Netlink argument "bitrate" when the device | 51 | bit-rate specified via Netlink argument "bitrate" when the device |
diff --git a/drivers/net/cxgb3/sge.c b/drivers/net/cxgb3/sge.c index 3f562ba2f0c9..76bf5892b962 100644 --- a/drivers/net/cxgb3/sge.c +++ b/drivers/net/cxgb3/sge.c | |||
@@ -2026,7 +2026,7 @@ static void rx_eth(struct adapter *adap, struct sge_rspq *rq, | |||
2026 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 2026 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
2027 | } else | 2027 | } else |
2028 | skb_checksum_none_assert(skb); | 2028 | skb_checksum_none_assert(skb); |
2029 | skb_record_rx_queue(skb, qs - &adap->sge.qs[0]); | 2029 | skb_record_rx_queue(skb, qs - &adap->sge.qs[pi->first_qset]); |
2030 | 2030 | ||
2031 | if (unlikely(p->vlan_valid)) { | 2031 | if (unlikely(p->vlan_valid)) { |
2032 | struct vlan_group *grp = pi->vlan_grp; | 2032 | struct vlan_group *grp = pi->vlan_grp; |
@@ -2145,7 +2145,7 @@ static void lro_add_page(struct adapter *adap, struct sge_qset *qs, | |||
2145 | if (!complete) | 2145 | if (!complete) |
2146 | return; | 2146 | return; |
2147 | 2147 | ||
2148 | skb_record_rx_queue(skb, qs - &adap->sge.qs[0]); | 2148 | skb_record_rx_queue(skb, qs - &adap->sge.qs[pi->first_qset]); |
2149 | 2149 | ||
2150 | if (unlikely(cpl->vlan_valid)) { | 2150 | if (unlikely(cpl->vlan_valid)) { |
2151 | struct vlan_group *grp = pi->vlan_grp; | 2151 | struct vlan_group *grp = pi->vlan_grp; |
diff --git a/drivers/net/ppp_deflate.c b/drivers/net/ppp_deflate.c index 31e9407a0739..1dbdf82a6dfd 100644 --- a/drivers/net/ppp_deflate.c +++ b/drivers/net/ppp_deflate.c | |||
@@ -305,7 +305,7 @@ static void z_decomp_free(void *arg) | |||
305 | 305 | ||
306 | if (state) { | 306 | if (state) { |
307 | zlib_inflateEnd(&state->strm); | 307 | zlib_inflateEnd(&state->strm); |
308 | kfree(state->strm.workspace); | 308 | vfree(state->strm.workspace); |
309 | kfree(state); | 309 | kfree(state); |
310 | } | 310 | } |
311 | } | 311 | } |
@@ -345,8 +345,7 @@ static void *z_decomp_alloc(unsigned char *options, int opt_len) | |||
345 | 345 | ||
346 | state->w_size = w_size; | 346 | state->w_size = w_size; |
347 | state->strm.next_out = NULL; | 347 | state->strm.next_out = NULL; |
348 | state->strm.workspace = kmalloc(zlib_inflate_workspacesize(), | 348 | state->strm.workspace = vmalloc(zlib_inflate_workspacesize()); |
349 | GFP_KERNEL|__GFP_REPEAT); | ||
350 | if (state->strm.workspace == NULL) | 349 | if (state->strm.workspace == NULL) |
351 | goto out_free; | 350 | goto out_free; |
352 | 351 | ||
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c index 05d81780d1fd..5990621fb5cd 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c | |||
@@ -742,7 +742,7 @@ static void rtl8168_oob_notify(struct rtl8169_private *tp, u8 cmd) | |||
742 | msleep(2); | 742 | msleep(2); |
743 | for (i = 0; i < 5; i++) { | 743 | for (i = 0; i < 5; i++) { |
744 | udelay(100); | 744 | udelay(100); |
745 | if (!(RTL_R32(ERIDR) & ERIAR_FLAG)) | 745 | if (!(RTL_R32(ERIAR) & ERIAR_FLAG)) |
746 | break; | 746 | break; |
747 | } | 747 | } |
748 | 748 | ||
diff --git a/drivers/net/rionet.c b/drivers/net/rionet.c index 77c5092a6a40..5d3436d47edd 100644 --- a/drivers/net/rionet.c +++ b/drivers/net/rionet.c | |||
@@ -378,7 +378,7 @@ static int rionet_close(struct net_device *ndev) | |||
378 | 378 | ||
379 | static void rionet_remove(struct rio_dev *rdev) | 379 | static void rionet_remove(struct rio_dev *rdev) |
380 | { | 380 | { |
381 | struct net_device *ndev = NULL; | 381 | struct net_device *ndev = rio_get_drvdata(rdev); |
382 | struct rionet_peer *peer, *tmp; | 382 | struct rionet_peer *peer, *tmp; |
383 | 383 | ||
384 | free_pages((unsigned long)rionet_active, rdev->net->hport->sys_size ? | 384 | free_pages((unsigned long)rionet_active, rdev->net->hport->sys_size ? |
@@ -433,22 +433,12 @@ static const struct net_device_ops rionet_netdev_ops = { | |||
433 | .ndo_set_mac_address = eth_mac_addr, | 433 | .ndo_set_mac_address = eth_mac_addr, |
434 | }; | 434 | }; |
435 | 435 | ||
436 | static int rionet_setup_netdev(struct rio_mport *mport) | 436 | static int rionet_setup_netdev(struct rio_mport *mport, struct net_device *ndev) |
437 | { | 437 | { |
438 | int rc = 0; | 438 | int rc = 0; |
439 | struct net_device *ndev = NULL; | ||
440 | struct rionet_private *rnet; | 439 | struct rionet_private *rnet; |
441 | u16 device_id; | 440 | u16 device_id; |
442 | 441 | ||
443 | /* Allocate our net_device structure */ | ||
444 | ndev = alloc_etherdev(sizeof(struct rionet_private)); | ||
445 | if (ndev == NULL) { | ||
446 | printk(KERN_INFO "%s: could not allocate ethernet device.\n", | ||
447 | DRV_NAME); | ||
448 | rc = -ENOMEM; | ||
449 | goto out; | ||
450 | } | ||
451 | |||
452 | rionet_active = (struct rio_dev **)__get_free_pages(GFP_KERNEL, | 442 | rionet_active = (struct rio_dev **)__get_free_pages(GFP_KERNEL, |
453 | mport->sys_size ? __fls(sizeof(void *)) + 4 : 0); | 443 | mport->sys_size ? __fls(sizeof(void *)) + 4 : 0); |
454 | if (!rionet_active) { | 444 | if (!rionet_active) { |
@@ -504,11 +494,21 @@ static int rionet_probe(struct rio_dev *rdev, const struct rio_device_id *id) | |||
504 | int rc = -ENODEV; | 494 | int rc = -ENODEV; |
505 | u32 lpef, lsrc_ops, ldst_ops; | 495 | u32 lpef, lsrc_ops, ldst_ops; |
506 | struct rionet_peer *peer; | 496 | struct rionet_peer *peer; |
497 | struct net_device *ndev = NULL; | ||
507 | 498 | ||
508 | /* If local device is not rionet capable, give up quickly */ | 499 | /* If local device is not rionet capable, give up quickly */ |
509 | if (!rionet_capable) | 500 | if (!rionet_capable) |
510 | goto out; | 501 | goto out; |
511 | 502 | ||
503 | /* Allocate our net_device structure */ | ||
504 | ndev = alloc_etherdev(sizeof(struct rionet_private)); | ||
505 | if (ndev == NULL) { | ||
506 | printk(KERN_INFO "%s: could not allocate ethernet device.\n", | ||
507 | DRV_NAME); | ||
508 | rc = -ENOMEM; | ||
509 | goto out; | ||
510 | } | ||
511 | |||
512 | /* | 512 | /* |
513 | * First time through, make sure local device is rionet | 513 | * First time through, make sure local device is rionet |
514 | * capable, setup netdev, and set flags so this is skipped | 514 | * capable, setup netdev, and set flags so this is skipped |
@@ -529,7 +529,7 @@ static int rionet_probe(struct rio_dev *rdev, const struct rio_device_id *id) | |||
529 | goto out; | 529 | goto out; |
530 | } | 530 | } |
531 | 531 | ||
532 | rc = rionet_setup_netdev(rdev->net->hport); | 532 | rc = rionet_setup_netdev(rdev->net->hport, ndev); |
533 | rionet_check = 1; | 533 | rionet_check = 1; |
534 | } | 534 | } |
535 | 535 | ||
@@ -546,6 +546,8 @@ static int rionet_probe(struct rio_dev *rdev, const struct rio_device_id *id) | |||
546 | list_add_tail(&peer->node, &rionet_peers); | 546 | list_add_tail(&peer->node, &rionet_peers); |
547 | } | 547 | } |
548 | 548 | ||
549 | rio_set_drvdata(rdev, ndev); | ||
550 | |||
549 | out: | 551 | out: |
550 | return rc; | 552 | return rc; |
551 | } | 553 | } |
diff --git a/drivers/net/usb/kalmia.c b/drivers/net/usb/kalmia.c index d965fb1e013e..a9b6c63d54e4 100644 --- a/drivers/net/usb/kalmia.c +++ b/drivers/net/usb/kalmia.c | |||
@@ -100,34 +100,42 @@ kalmia_send_init_packet(struct usbnet *dev, u8 *init_msg, u8 init_msg_len, | |||
100 | static int | 100 | static int |
101 | kalmia_init_and_get_ethernet_addr(struct usbnet *dev, u8 *ethernet_addr) | 101 | kalmia_init_and_get_ethernet_addr(struct usbnet *dev, u8 *ethernet_addr) |
102 | { | 102 | { |
103 | char init_msg_1[] = | 103 | const static char init_msg_1[] = |
104 | { 0x57, 0x50, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, | 104 | { 0x57, 0x50, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, |
105 | 0x00, 0x00 }; | 105 | 0x00, 0x00 }; |
106 | char init_msg_2[] = | 106 | const static char init_msg_2[] = |
107 | { 0x57, 0x50, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xf4, | 107 | { 0x57, 0x50, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xf4, |
108 | 0x00, 0x00 }; | 108 | 0x00, 0x00 }; |
109 | char receive_buf[28]; | 109 | const static int buflen = 28; |
110 | char *usb_buf; | ||
110 | int status; | 111 | int status; |
111 | 112 | ||
112 | status = kalmia_send_init_packet(dev, init_msg_1, sizeof(init_msg_1) | 113 | usb_buf = kmalloc(buflen, GFP_DMA | GFP_KERNEL); |
113 | / sizeof(init_msg_1[0]), receive_buf, 24); | 114 | if (!usb_buf) |
115 | return -ENOMEM; | ||
116 | |||
117 | memcpy(usb_buf, init_msg_1, 12); | ||
118 | status = kalmia_send_init_packet(dev, usb_buf, sizeof(init_msg_1) | ||
119 | / sizeof(init_msg_1[0]), usb_buf, 24); | ||
114 | if (status != 0) | 120 | if (status != 0) |
115 | return status; | 121 | return status; |
116 | 122 | ||
117 | status = kalmia_send_init_packet(dev, init_msg_2, sizeof(init_msg_2) | 123 | memcpy(usb_buf, init_msg_2, 12); |
118 | / sizeof(init_msg_2[0]), receive_buf, 28); | 124 | status = kalmia_send_init_packet(dev, usb_buf, sizeof(init_msg_2) |
125 | / sizeof(init_msg_2[0]), usb_buf, 28); | ||
119 | if (status != 0) | 126 | if (status != 0) |
120 | return status; | 127 | return status; |
121 | 128 | ||
122 | memcpy(ethernet_addr, receive_buf + 10, ETH_ALEN); | 129 | memcpy(ethernet_addr, usb_buf + 10, ETH_ALEN); |
123 | 130 | ||
131 | kfree(usb_buf); | ||
124 | return status; | 132 | return status; |
125 | } | 133 | } |
126 | 134 | ||
127 | static int | 135 | static int |
128 | kalmia_bind(struct usbnet *dev, struct usb_interface *intf) | 136 | kalmia_bind(struct usbnet *dev, struct usb_interface *intf) |
129 | { | 137 | { |
130 | u8 status; | 138 | int status; |
131 | u8 ethernet_addr[ETH_ALEN]; | 139 | u8 ethernet_addr[ETH_ALEN]; |
132 | 140 | ||
133 | /* Don't bind to AT command interface */ | 141 | /* Don't bind to AT command interface */ |
@@ -190,7 +198,8 @@ kalmia_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags) | |||
190 | dev_kfree_skb_any(skb); | 198 | dev_kfree_skb_any(skb); |
191 | skb = skb2; | 199 | skb = skb2; |
192 | 200 | ||
193 | done: header_start = skb_push(skb, KALMIA_HEADER_LENGTH); | 201 | done: |
202 | header_start = skb_push(skb, KALMIA_HEADER_LENGTH); | ||
194 | ether_type_1 = header_start[KALMIA_HEADER_LENGTH + 12]; | 203 | ether_type_1 = header_start[KALMIA_HEADER_LENGTH + 12]; |
195 | ether_type_2 = header_start[KALMIA_HEADER_LENGTH + 13]; | 204 | ether_type_2 = header_start[KALMIA_HEADER_LENGTH + 13]; |
196 | 205 | ||
@@ -201,9 +210,8 @@ kalmia_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags) | |||
201 | header_start[0] = 0x57; | 210 | header_start[0] = 0x57; |
202 | header_start[1] = 0x44; | 211 | header_start[1] = 0x44; |
203 | content_len = skb->len - KALMIA_HEADER_LENGTH; | 212 | content_len = skb->len - KALMIA_HEADER_LENGTH; |
204 | header_start[2] = (content_len & 0xff); /* low byte */ | ||
205 | header_start[3] = (content_len >> 8); /* high byte */ | ||
206 | 213 | ||
214 | put_unaligned_le16(content_len, &header_start[2]); | ||
207 | header_start[4] = ether_type_1; | 215 | header_start[4] = ether_type_1; |
208 | header_start[5] = ether_type_2; | 216 | header_start[5] = ether_type_2; |
209 | 217 | ||
@@ -231,13 +239,13 @@ kalmia_rx_fixup(struct usbnet *dev, struct sk_buff *skb) | |||
231 | * Our task here is to strip off framing, leaving skb with one | 239 | * Our task here is to strip off framing, leaving skb with one |
232 | * data frame for the usbnet framework code to process. | 240 | * data frame for the usbnet framework code to process. |
233 | */ | 241 | */ |
234 | const u8 HEADER_END_OF_USB_PACKET[] = | 242 | const static u8 HEADER_END_OF_USB_PACKET[] = |
235 | { 0x57, 0x5a, 0x00, 0x00, 0x08, 0x00 }; | 243 | { 0x57, 0x5a, 0x00, 0x00, 0x08, 0x00 }; |
236 | const u8 EXPECTED_UNKNOWN_HEADER_1[] = | 244 | const static u8 EXPECTED_UNKNOWN_HEADER_1[] = |
237 | { 0x57, 0x43, 0x1e, 0x00, 0x15, 0x02 }; | 245 | { 0x57, 0x43, 0x1e, 0x00, 0x15, 0x02 }; |
238 | const u8 EXPECTED_UNKNOWN_HEADER_2[] = | 246 | const static u8 EXPECTED_UNKNOWN_HEADER_2[] = |
239 | { 0x57, 0x50, 0x0e, 0x00, 0x00, 0x00 }; | 247 | { 0x57, 0x50, 0x0e, 0x00, 0x00, 0x00 }; |
240 | u8 i = 0; | 248 | int i = 0; |
241 | 249 | ||
242 | /* incomplete header? */ | 250 | /* incomplete header? */ |
243 | if (skb->len < KALMIA_HEADER_LENGTH) | 251 | if (skb->len < KALMIA_HEADER_LENGTH) |
@@ -285,7 +293,7 @@ kalmia_rx_fixup(struct usbnet *dev, struct sk_buff *skb) | |||
285 | 293 | ||
286 | /* subtract start header and end header */ | 294 | /* subtract start header and end header */ |
287 | usb_packet_length = skb->len - (2 * KALMIA_HEADER_LENGTH); | 295 | usb_packet_length = skb->len - (2 * KALMIA_HEADER_LENGTH); |
288 | ether_packet_length = header_start[2] + (header_start[3] << 8); | 296 | ether_packet_length = get_unaligned_le16(&header_start[2]); |
289 | skb_pull(skb, KALMIA_HEADER_LENGTH); | 297 | skb_pull(skb, KALMIA_HEADER_LENGTH); |
290 | 298 | ||
291 | /* Some small packets misses end marker */ | 299 | /* Some small packets misses end marker */ |
diff --git a/drivers/net/usb/zaurus.c b/drivers/net/usb/zaurus.c index 241756e0e86f..1a2234c20514 100644 --- a/drivers/net/usb/zaurus.c +++ b/drivers/net/usb/zaurus.c | |||
@@ -331,17 +331,7 @@ static const struct usb_device_id products [] = { | |||
331 | ZAURUS_MASTER_INTERFACE, | 331 | ZAURUS_MASTER_INTERFACE, |
332 | .driver_info = ZAURUS_PXA_INFO, | 332 | .driver_info = ZAURUS_PXA_INFO, |
333 | }, | 333 | }, |
334 | |||
335 | |||
336 | /* At least some of the newest PXA units have very different lies about | ||
337 | * their standards support: they claim to be cell phones offering | ||
338 | * direct access to their radios! (No, they don't conform to CDC MDLM.) | ||
339 | */ | ||
340 | { | 334 | { |
341 | USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_MDLM, | ||
342 | USB_CDC_PROTO_NONE), | ||
343 | .driver_info = (unsigned long) &bogus_mdlm_info, | ||
344 | }, { | ||
345 | /* Motorola MOTOMAGX phones */ | 335 | /* Motorola MOTOMAGX phones */ |
346 | USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x6425, USB_CLASS_COMM, | 336 | USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x6425, USB_CLASS_COMM, |
347 | USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE), | 337 | USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE), |
diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c index 9f8ccae93317..254b64ba4bf6 100644 --- a/drivers/net/wireless/rtlwifi/pci.c +++ b/drivers/net/wireless/rtlwifi/pci.c | |||
@@ -1624,6 +1624,16 @@ static bool _rtl_pci_find_adapter(struct pci_dev *pdev, | |||
1624 | pci_read_config_byte(pdev, 0x8, &revisionid); | 1624 | pci_read_config_byte(pdev, 0x8, &revisionid); |
1625 | pci_read_config_word(pdev, 0x3C, &irqline); | 1625 | pci_read_config_word(pdev, 0x3C, &irqline); |
1626 | 1626 | ||
1627 | /* PCI ID 0x10ec:0x8192 occurs for both RTL8192E, which uses | ||
1628 | * r8192e_pci, and RTL8192SE, which uses this driver. If the | ||
1629 | * revision ID is RTL_PCI_REVISION_ID_8192PCIE (0x01), then | ||
1630 | * the correct driver is r8192e_pci, thus this routine should | ||
1631 | * return false. | ||
1632 | */ | ||
1633 | if (deviceid == RTL_PCI_8192SE_DID && | ||
1634 | revisionid == RTL_PCI_REVISION_ID_8192PCIE) | ||
1635 | return false; | ||
1636 | |||
1627 | if (deviceid == RTL_PCI_8192_DID || | 1637 | if (deviceid == RTL_PCI_8192_DID || |
1628 | deviceid == RTL_PCI_0044_DID || | 1638 | deviceid == RTL_PCI_0044_DID || |
1629 | deviceid == RTL_PCI_0047_DID || | 1639 | deviceid == RTL_PCI_0047_DID || |
@@ -1856,7 +1866,8 @@ int __devinit rtl_pci_probe(struct pci_dev *pdev, | |||
1856 | pci_write_config_byte(pdev, 0x04, 0x07); | 1866 | pci_write_config_byte(pdev, 0x04, 0x07); |
1857 | 1867 | ||
1858 | /* find adapter */ | 1868 | /* find adapter */ |
1859 | _rtl_pci_find_adapter(pdev, hw); | 1869 | if (!_rtl_pci_find_adapter(pdev, hw)) |
1870 | goto fail3; | ||
1860 | 1871 | ||
1861 | /* Init IO handler */ | 1872 | /* Init IO handler */ |
1862 | _rtl_pci_io_handler_init(&pdev->dev, hw); | 1873 | _rtl_pci_io_handler_init(&pdev->dev, hw); |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c index bee7c1480f63..092e342c19df 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c | |||
@@ -53,6 +53,8 @@ MODULE_FIRMWARE("rtlwifi/rtl8192cufw.bin"); | |||
53 | static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw) | 53 | static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw) |
54 | { | 54 | { |
55 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 55 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
56 | const struct firmware *firmware; | ||
57 | int err; | ||
56 | 58 | ||
57 | rtlpriv->dm.dm_initialgain_enable = 1; | 59 | rtlpriv->dm.dm_initialgain_enable = 1; |
58 | rtlpriv->dm.dm_flag = 0; | 60 | rtlpriv->dm.dm_flag = 0; |
@@ -64,6 +66,24 @@ static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw) | |||
64 | ("Can't alloc buffer for fw.\n")); | 66 | ("Can't alloc buffer for fw.\n")); |
65 | return 1; | 67 | return 1; |
66 | } | 68 | } |
69 | /* request fw */ | ||
70 | err = request_firmware(&firmware, rtlpriv->cfg->fw_name, | ||
71 | rtlpriv->io.dev); | ||
72 | if (err) { | ||
73 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, | ||
74 | ("Failed to request firmware!\n")); | ||
75 | return 1; | ||
76 | } | ||
77 | if (firmware->size > 0x4000) { | ||
78 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, | ||
79 | ("Firmware is too big!\n")); | ||
80 | release_firmware(firmware); | ||
81 | return 1; | ||
82 | } | ||
83 | memcpy(rtlpriv->rtlhal.pfirmware, firmware->data, firmware->size); | ||
84 | rtlpriv->rtlhal.fwsize = firmware->size; | ||
85 | release_firmware(firmware); | ||
86 | |||
67 | return 0; | 87 | return 0; |
68 | } | 88 | } |
69 | 89 | ||
diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c index 6d5d6e679fc7..af9b7814965a 100644 --- a/drivers/tty/serial/atmel_serial.c +++ b/drivers/tty/serial/atmel_serial.c | |||
@@ -1709,12 +1709,13 @@ static int atmel_serial_resume(struct platform_device *pdev) | |||
1709 | static int __devinit atmel_serial_probe(struct platform_device *pdev) | 1709 | static int __devinit atmel_serial_probe(struct platform_device *pdev) |
1710 | { | 1710 | { |
1711 | struct atmel_uart_port *port; | 1711 | struct atmel_uart_port *port; |
1712 | struct atmel_uart_data *pdata = pdev->dev.platform_data; | ||
1712 | void *data; | 1713 | void *data; |
1713 | int ret; | 1714 | int ret; |
1714 | 1715 | ||
1715 | BUILD_BUG_ON(ATMEL_SERIAL_RINGSIZE & (ATMEL_SERIAL_RINGSIZE - 1)); | 1716 | BUILD_BUG_ON(ATMEL_SERIAL_RINGSIZE & (ATMEL_SERIAL_RINGSIZE - 1)); |
1716 | 1717 | ||
1717 | port = &atmel_ports[pdev->id]; | 1718 | port = &atmel_ports[pdata->num]; |
1718 | port->backup_imr = 0; | 1719 | port->backup_imr = 0; |
1719 | 1720 | ||
1720 | atmel_init_port(port, pdev); | 1721 | atmel_init_port(port, pdev); |
diff --git a/drivers/video/amba-clcd.c b/drivers/video/amba-clcd.c index 5fc983c5b92c..cf03ad067147 100644 --- a/drivers/video/amba-clcd.c +++ b/drivers/video/amba-clcd.c | |||
@@ -447,6 +447,8 @@ static int clcdfb_register(struct clcd_fb *fb) | |||
447 | goto out; | 447 | goto out; |
448 | } | 448 | } |
449 | 449 | ||
450 | fb->fb.device = &fb->dev->dev; | ||
451 | |||
450 | fb->fb.fix.mmio_start = fb->dev->res.start; | 452 | fb->fb.fix.mmio_start = fb->dev->res.start; |
451 | fb->fb.fix.mmio_len = resource_size(&fb->dev->res); | 453 | fb->fb.fix.mmio_len = resource_size(&fb->dev->res); |
452 | 454 | ||
diff --git a/drivers/video/fsl-diu-fb.c b/drivers/video/fsl-diu-fb.c index bedf5be27f05..0acc7d65aeaa 100644 --- a/drivers/video/fsl-diu-fb.c +++ b/drivers/video/fsl-diu-fb.c | |||
@@ -555,8 +555,6 @@ static void adjust_aoi_size_position(struct fb_var_screeninfo *var, | |||
555 | static int fsl_diu_check_var(struct fb_var_screeninfo *var, | 555 | static int fsl_diu_check_var(struct fb_var_screeninfo *var, |
556 | struct fb_info *info) | 556 | struct fb_info *info) |
557 | { | 557 | { |
558 | unsigned long htotal, vtotal; | ||
559 | |||
560 | pr_debug("check_var xres: %d\n", var->xres); | 558 | pr_debug("check_var xres: %d\n", var->xres); |
561 | pr_debug("check_var yres: %d\n", var->yres); | 559 | pr_debug("check_var yres: %d\n", var->yres); |
562 | 560 | ||
@@ -635,20 +633,6 @@ static int fsl_diu_check_var(struct fb_var_screeninfo *var, | |||
635 | 633 | ||
636 | break; | 634 | break; |
637 | } | 635 | } |
638 | /* If the pixclock is below the minimum spec'd value then set to | ||
639 | * refresh rate for 60Hz since this is supported by most monitors. | ||
640 | * Refer to Documentation/fb/ for calculations. | ||
641 | */ | ||
642 | if ((var->pixclock < MIN_PIX_CLK) || (var->pixclock > MAX_PIX_CLK)) { | ||
643 | htotal = var->xres + var->right_margin + var->hsync_len + | ||
644 | var->left_margin; | ||
645 | vtotal = var->yres + var->lower_margin + var->vsync_len + | ||
646 | var->upper_margin; | ||
647 | var->pixclock = (vtotal * htotal * 6UL) / 100UL; | ||
648 | var->pixclock = KHZ2PICOS(var->pixclock); | ||
649 | pr_debug("pixclock set for 60Hz refresh = %u ps\n", | ||
650 | var->pixclock); | ||
651 | } | ||
652 | 636 | ||
653 | var->height = -1; | 637 | var->height = -1; |
654 | var->width = -1; | 638 | var->width = -1; |
diff --git a/drivers/video/geode/gx1fb_core.c b/drivers/video/geode/gx1fb_core.c index c6b554f72c6d..5a5d0928df33 100644 --- a/drivers/video/geode/gx1fb_core.c +++ b/drivers/video/geode/gx1fb_core.c | |||
@@ -29,7 +29,7 @@ static int crt_option = 1; | |||
29 | static char panel_option[32] = ""; | 29 | static char panel_option[32] = ""; |
30 | 30 | ||
31 | /* Modes relevant to the GX1 (taken from modedb.c) */ | 31 | /* Modes relevant to the GX1 (taken from modedb.c) */ |
32 | static const struct fb_videomode __initdata gx1_modedb[] = { | 32 | static const struct fb_videomode __devinitdata gx1_modedb[] = { |
33 | /* 640x480-60 VESA */ | 33 | /* 640x480-60 VESA */ |
34 | { NULL, 60, 640, 480, 39682, 48, 16, 33, 10, 96, 2, | 34 | { NULL, 60, 640, 480, 39682, 48, 16, 33, 10, 96, 2, |
35 | 0, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA }, | 35 | 0, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA }, |
@@ -195,7 +195,7 @@ static int gx1fb_blank(int blank_mode, struct fb_info *info) | |||
195 | return par->vid_ops->blank_display(info, blank_mode); | 195 | return par->vid_ops->blank_display(info, blank_mode); |
196 | } | 196 | } |
197 | 197 | ||
198 | static int __init gx1fb_map_video_memory(struct fb_info *info, struct pci_dev *dev) | 198 | static int __devinit gx1fb_map_video_memory(struct fb_info *info, struct pci_dev *dev) |
199 | { | 199 | { |
200 | struct geodefb_par *par = info->par; | 200 | struct geodefb_par *par = info->par; |
201 | unsigned gx_base; | 201 | unsigned gx_base; |
@@ -268,7 +268,7 @@ static struct fb_ops gx1fb_ops = { | |||
268 | .fb_imageblit = cfb_imageblit, | 268 | .fb_imageblit = cfb_imageblit, |
269 | }; | 269 | }; |
270 | 270 | ||
271 | static struct fb_info * __init gx1fb_init_fbinfo(struct device *dev) | 271 | static struct fb_info * __devinit gx1fb_init_fbinfo(struct device *dev) |
272 | { | 272 | { |
273 | struct geodefb_par *par; | 273 | struct geodefb_par *par; |
274 | struct fb_info *info; | 274 | struct fb_info *info; |
@@ -318,7 +318,7 @@ static struct fb_info * __init gx1fb_init_fbinfo(struct device *dev) | |||
318 | return info; | 318 | return info; |
319 | } | 319 | } |
320 | 320 | ||
321 | static int __init gx1fb_probe(struct pci_dev *pdev, const struct pci_device_id *id) | 321 | static int __devinit gx1fb_probe(struct pci_dev *pdev, const struct pci_device_id *id) |
322 | { | 322 | { |
323 | struct geodefb_par *par; | 323 | struct geodefb_par *par; |
324 | struct fb_info *info; | 324 | struct fb_info *info; |
@@ -382,7 +382,7 @@ static int __init gx1fb_probe(struct pci_dev *pdev, const struct pci_device_id * | |||
382 | return ret; | 382 | return ret; |
383 | } | 383 | } |
384 | 384 | ||
385 | static void gx1fb_remove(struct pci_dev *pdev) | 385 | static void __devexit gx1fb_remove(struct pci_dev *pdev) |
386 | { | 386 | { |
387 | struct fb_info *info = pci_get_drvdata(pdev); | 387 | struct fb_info *info = pci_get_drvdata(pdev); |
388 | struct geodefb_par *par = info->par; | 388 | struct geodefb_par *par = info->par; |
@@ -441,7 +441,7 @@ static struct pci_driver gx1fb_driver = { | |||
441 | .name = "gx1fb", | 441 | .name = "gx1fb", |
442 | .id_table = gx1fb_id_table, | 442 | .id_table = gx1fb_id_table, |
443 | .probe = gx1fb_probe, | 443 | .probe = gx1fb_probe, |
444 | .remove = gx1fb_remove, | 444 | .remove = __devexit_p(gx1fb_remove), |
445 | }; | 445 | }; |
446 | 446 | ||
447 | static int __init gx1fb_init(void) | 447 | static int __init gx1fb_init(void) |
@@ -456,7 +456,7 @@ static int __init gx1fb_init(void) | |||
456 | return pci_register_driver(&gx1fb_driver); | 456 | return pci_register_driver(&gx1fb_driver); |
457 | } | 457 | } |
458 | 458 | ||
459 | static void __exit gx1fb_cleanup(void) | 459 | static void __devexit gx1fb_cleanup(void) |
460 | { | 460 | { |
461 | pci_unregister_driver(&gx1fb_driver); | 461 | pci_unregister_driver(&gx1fb_driver); |
462 | } | 462 | } |
diff --git a/drivers/video/hecubafb.c b/drivers/video/hecubafb.c index fbef15f7a218..614251a9af91 100644 --- a/drivers/video/hecubafb.c +++ b/drivers/video/hecubafb.c | |||
@@ -233,7 +233,7 @@ static int __devinit hecubafb_probe(struct platform_device *dev) | |||
233 | 233 | ||
234 | videomemory = vzalloc(videomemorysize); | 234 | videomemory = vzalloc(videomemorysize); |
235 | if (!videomemory) | 235 | if (!videomemory) |
236 | return retval; | 236 | goto err_videomem_alloc; |
237 | 237 | ||
238 | info = framebuffer_alloc(sizeof(struct hecubafb_par), &dev->dev); | 238 | info = framebuffer_alloc(sizeof(struct hecubafb_par), &dev->dev); |
239 | if (!info) | 239 | if (!info) |
@@ -275,6 +275,7 @@ err_fbreg: | |||
275 | framebuffer_release(info); | 275 | framebuffer_release(info); |
276 | err_fballoc: | 276 | err_fballoc: |
277 | vfree(videomemory); | 277 | vfree(videomemory); |
278 | err_videomem_alloc: | ||
278 | module_put(board->owner); | 279 | module_put(board->owner); |
279 | return retval; | 280 | return retval; |
280 | } | 281 | } |
diff --git a/drivers/video/sh_mobile_meram.c b/drivers/video/sh_mobile_meram.c index 9170c82b495c..cc7d7329dc15 100644 --- a/drivers/video/sh_mobile_meram.c +++ b/drivers/video/sh_mobile_meram.c | |||
@@ -218,7 +218,7 @@ static inline void meram_get_next_icb_addr(struct sh_mobile_meram_info *pdata, | |||
218 | icb_offset = 0xc0000000 | (cfg->current_reg << 23); | 218 | icb_offset = 0xc0000000 | (cfg->current_reg << 23); |
219 | 219 | ||
220 | *icb_addr_y = icb_offset | (cfg->icb[0].marker_icb << 24); | 220 | *icb_addr_y = icb_offset | (cfg->icb[0].marker_icb << 24); |
221 | if ((*icb_addr_c) && is_nvcolor(cfg->pixelformat)) | 221 | if (is_nvcolor(cfg->pixelformat)) |
222 | *icb_addr_c = icb_offset | (cfg->icb[1].marker_icb << 24); | 222 | *icb_addr_c = icb_offset | (cfg->icb[1].marker_icb << 24); |
223 | } | 223 | } |
224 | 224 | ||
diff --git a/drivers/video/sm501fb.c b/drivers/video/sm501fb.c index 87f0be1e78b5..6294dca95500 100644 --- a/drivers/video/sm501fb.c +++ b/drivers/video/sm501fb.c | |||
@@ -1664,7 +1664,7 @@ static void sm501fb_stop(struct sm501fb_info *info) | |||
1664 | resource_size(info->regs_res)); | 1664 | resource_size(info->regs_res)); |
1665 | } | 1665 | } |
1666 | 1666 | ||
1667 | static int sm501fb_init_fb(struct fb_info *fb, | 1667 | static int __devinit sm501fb_init_fb(struct fb_info *fb, |
1668 | enum sm501_controller head, | 1668 | enum sm501_controller head, |
1669 | const char *fbname) | 1669 | const char *fbname) |
1670 | { | 1670 | { |
diff --git a/drivers/video/udlfb.c b/drivers/video/udlfb.c index 52b0f3e8ccac..816a4fda04f5 100644 --- a/drivers/video/udlfb.c +++ b/drivers/video/udlfb.c | |||
@@ -1233,8 +1233,12 @@ static int dlfb_setup_modes(struct dlfb_data *dev, | |||
1233 | if (dlfb_is_valid_mode(&info->monspecs.modedb[i], info)) | 1233 | if (dlfb_is_valid_mode(&info->monspecs.modedb[i], info)) |
1234 | fb_add_videomode(&info->monspecs.modedb[i], | 1234 | fb_add_videomode(&info->monspecs.modedb[i], |
1235 | &info->modelist); | 1235 | &info->modelist); |
1236 | else /* if we've removed top/best mode */ | 1236 | else { |
1237 | info->monspecs.misc &= ~FB_MISC_1ST_DETAIL; | 1237 | if (i == 0) |
1238 | /* if we've removed top/best mode */ | ||
1239 | info->monspecs.misc | ||
1240 | &= ~FB_MISC_1ST_DETAIL; | ||
1241 | } | ||
1238 | } | 1242 | } |
1239 | 1243 | ||
1240 | default_vmode = fb_find_best_display(&info->monspecs, | 1244 | default_vmode = fb_find_best_display(&info->monspecs, |
diff --git a/drivers/video/vesafb.c b/drivers/video/vesafb.c index a99bbe86db13..501b3406c6d5 100644 --- a/drivers/video/vesafb.c +++ b/drivers/video/vesafb.c | |||
@@ -175,6 +175,7 @@ static int vesafb_setcolreg(unsigned regno, unsigned red, unsigned green, | |||
175 | 175 | ||
176 | static void vesafb_destroy(struct fb_info *info) | 176 | static void vesafb_destroy(struct fb_info *info) |
177 | { | 177 | { |
178 | fb_dealloc_cmap(&info->cmap); | ||
178 | if (info->screen_base) | 179 | if (info->screen_base) |
179 | iounmap(info->screen_base); | 180 | iounmap(info->screen_base); |
180 | release_mem_region(info->apertures->ranges[0].base, info->apertures->ranges[0].size); | 181 | release_mem_region(info->apertures->ranges[0].base, info->apertures->ranges[0].size); |
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index 022f9eb0b7bf..9536d386bb38 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig | |||
@@ -535,8 +535,7 @@ config I6300ESB_WDT | |||
535 | 535 | ||
536 | config INTEL_SCU_WATCHDOG | 536 | config INTEL_SCU_WATCHDOG |
537 | bool "Intel SCU Watchdog for Mobile Platforms" | 537 | bool "Intel SCU Watchdog for Mobile Platforms" |
538 | depends on WATCHDOG | 538 | depends on X86_MRST |
539 | depends on INTEL_SCU_IPC | ||
540 | ---help--- | 539 | ---help--- |
541 | Hardware driver for the watchdog time built into the Intel SCU | 540 | Hardware driver for the watchdog time built into the Intel SCU |
542 | for Intel Mobile Platforms. | 541 | for Intel Mobile Platforms. |
diff --git a/drivers/watchdog/at32ap700x_wdt.c b/drivers/watchdog/at32ap700x_wdt.c index 750bc5281d79..4ca5d40304b2 100644 --- a/drivers/watchdog/at32ap700x_wdt.c +++ b/drivers/watchdog/at32ap700x_wdt.c | |||
@@ -448,7 +448,7 @@ static void __exit at32_wdt_exit(void) | |||
448 | } | 448 | } |
449 | module_exit(at32_wdt_exit); | 449 | module_exit(at32_wdt_exit); |
450 | 450 | ||
451 | MODULE_AUTHOR("Hans-Christian Egtvedt <hcegtvedt@atmel.com>"); | 451 | MODULE_AUTHOR("Hans-Christian Egtvedt <egtvedt@samfundet.no>"); |
452 | MODULE_DESCRIPTION("Watchdog driver for Atmel AT32AP700X"); | 452 | MODULE_DESCRIPTION("Watchdog driver for Atmel AT32AP700X"); |
453 | MODULE_LICENSE("GPL"); | 453 | MODULE_LICENSE("GPL"); |
454 | MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); | 454 | MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); |
diff --git a/drivers/watchdog/gef_wdt.c b/drivers/watchdog/gef_wdt.c index 29a7cd4b90c8..b146082bd85a 100644 --- a/drivers/watchdog/gef_wdt.c +++ b/drivers/watchdog/gef_wdt.c | |||
@@ -329,4 +329,4 @@ MODULE_AUTHOR("Martyn Welch <martyn.welch@ge.com>"); | |||
329 | MODULE_DESCRIPTION("GE watchdog driver"); | 329 | MODULE_DESCRIPTION("GE watchdog driver"); |
330 | MODULE_LICENSE("GPL"); | 330 | MODULE_LICENSE("GPL"); |
331 | MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); | 331 | MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); |
332 | MODULE_ALIAS("platform: gef_wdt"); | 332 | MODULE_ALIAS("platform:gef_wdt"); |
diff --git a/drivers/watchdog/intel_scu_watchdog.c b/drivers/watchdog/intel_scu_watchdog.c index 919bdd16136f..ba4386066a42 100644 --- a/drivers/watchdog/intel_scu_watchdog.c +++ b/drivers/watchdog/intel_scu_watchdog.c | |||
@@ -42,7 +42,6 @@ | |||
42 | #include <linux/sched.h> | 42 | #include <linux/sched.h> |
43 | #include <linux/signal.h> | 43 | #include <linux/signal.h> |
44 | #include <linux/sfi.h> | 44 | #include <linux/sfi.h> |
45 | #include <linux/types.h> | ||
46 | #include <asm/irq.h> | 45 | #include <asm/irq.h> |
47 | #include <asm/atomic.h> | 46 | #include <asm/atomic.h> |
48 | #include <asm/intel_scu_ipc.h> | 47 | #include <asm/intel_scu_ipc.h> |
diff --git a/drivers/watchdog/mtx-1_wdt.c b/drivers/watchdog/mtx-1_wdt.c index 1479dc4d6129..0430e093b1a0 100644 --- a/drivers/watchdog/mtx-1_wdt.c +++ b/drivers/watchdog/mtx-1_wdt.c | |||
@@ -66,23 +66,18 @@ static struct { | |||
66 | int default_ticks; | 66 | int default_ticks; |
67 | unsigned long inuse; | 67 | unsigned long inuse; |
68 | unsigned gpio; | 68 | unsigned gpio; |
69 | int gstate; | 69 | unsigned int gstate; |
70 | } mtx1_wdt_device; | 70 | } mtx1_wdt_device; |
71 | 71 | ||
72 | static void mtx1_wdt_trigger(unsigned long unused) | 72 | static void mtx1_wdt_trigger(unsigned long unused) |
73 | { | 73 | { |
74 | u32 tmp; | ||
75 | |||
76 | spin_lock(&mtx1_wdt_device.lock); | 74 | spin_lock(&mtx1_wdt_device.lock); |
77 | if (mtx1_wdt_device.running) | 75 | if (mtx1_wdt_device.running) |
78 | ticks--; | 76 | ticks--; |
79 | 77 | ||
80 | /* toggle wdt gpio */ | 78 | /* toggle wdt gpio */ |
81 | mtx1_wdt_device.gstate = ~mtx1_wdt_device.gstate; | 79 | mtx1_wdt_device.gstate = !mtx1_wdt_device.gstate; |
82 | if (mtx1_wdt_device.gstate) | 80 | gpio_set_value(mtx1_wdt_device.gpio, mtx1_wdt_device.gstate); |
83 | gpio_direction_output(mtx1_wdt_device.gpio, 1); | ||
84 | else | ||
85 | gpio_direction_input(mtx1_wdt_device.gpio); | ||
86 | 81 | ||
87 | if (mtx1_wdt_device.queue && ticks) | 82 | if (mtx1_wdt_device.queue && ticks) |
88 | mod_timer(&mtx1_wdt_device.timer, jiffies + MTX1_WDT_INTERVAL); | 83 | mod_timer(&mtx1_wdt_device.timer, jiffies + MTX1_WDT_INTERVAL); |
@@ -105,7 +100,7 @@ static void mtx1_wdt_start(void) | |||
105 | if (!mtx1_wdt_device.queue) { | 100 | if (!mtx1_wdt_device.queue) { |
106 | mtx1_wdt_device.queue = 1; | 101 | mtx1_wdt_device.queue = 1; |
107 | mtx1_wdt_device.gstate = 1; | 102 | mtx1_wdt_device.gstate = 1; |
108 | gpio_direction_output(mtx1_wdt_device.gpio, 1); | 103 | gpio_set_value(mtx1_wdt_device.gpio, 1); |
109 | mod_timer(&mtx1_wdt_device.timer, jiffies + MTX1_WDT_INTERVAL); | 104 | mod_timer(&mtx1_wdt_device.timer, jiffies + MTX1_WDT_INTERVAL); |
110 | } | 105 | } |
111 | mtx1_wdt_device.running++; | 106 | mtx1_wdt_device.running++; |
@@ -120,7 +115,7 @@ static int mtx1_wdt_stop(void) | |||
120 | if (mtx1_wdt_device.queue) { | 115 | if (mtx1_wdt_device.queue) { |
121 | mtx1_wdt_device.queue = 0; | 116 | mtx1_wdt_device.queue = 0; |
122 | mtx1_wdt_device.gstate = 0; | 117 | mtx1_wdt_device.gstate = 0; |
123 | gpio_direction_output(mtx1_wdt_device.gpio, 0); | 118 | gpio_set_value(mtx1_wdt_device.gpio, 0); |
124 | } | 119 | } |
125 | ticks = mtx1_wdt_device.default_ticks; | 120 | ticks = mtx1_wdt_device.default_ticks; |
126 | spin_unlock_irqrestore(&mtx1_wdt_device.lock, flags); | 121 | spin_unlock_irqrestore(&mtx1_wdt_device.lock, flags); |
@@ -214,6 +209,12 @@ static int __devinit mtx1_wdt_probe(struct platform_device *pdev) | |||
214 | int ret; | 209 | int ret; |
215 | 210 | ||
216 | mtx1_wdt_device.gpio = pdev->resource[0].start; | 211 | mtx1_wdt_device.gpio = pdev->resource[0].start; |
212 | ret = gpio_request_one(mtx1_wdt_device.gpio, | ||
213 | GPIOF_OUT_INIT_HIGH, "mtx1-wdt"); | ||
214 | if (ret < 0) { | ||
215 | dev_err(&pdev->dev, "failed to request gpio"); | ||
216 | return ret; | ||
217 | } | ||
217 | 218 | ||
218 | spin_lock_init(&mtx1_wdt_device.lock); | 219 | spin_lock_init(&mtx1_wdt_device.lock); |
219 | init_completion(&mtx1_wdt_device.stop); | 220 | init_completion(&mtx1_wdt_device.stop); |
@@ -239,11 +240,13 @@ static int __devexit mtx1_wdt_remove(struct platform_device *pdev) | |||
239 | mtx1_wdt_device.queue = 0; | 240 | mtx1_wdt_device.queue = 0; |
240 | wait_for_completion(&mtx1_wdt_device.stop); | 241 | wait_for_completion(&mtx1_wdt_device.stop); |
241 | } | 242 | } |
243 | |||
244 | gpio_free(mtx1_wdt_device.gpio); | ||
242 | misc_deregister(&mtx1_wdt_misc); | 245 | misc_deregister(&mtx1_wdt_misc); |
243 | return 0; | 246 | return 0; |
244 | } | 247 | } |
245 | 248 | ||
246 | static struct platform_driver mtx1_wdt = { | 249 | static struct platform_driver mtx1_wdt_driver = { |
247 | .probe = mtx1_wdt_probe, | 250 | .probe = mtx1_wdt_probe, |
248 | .remove = __devexit_p(mtx1_wdt_remove), | 251 | .remove = __devexit_p(mtx1_wdt_remove), |
249 | .driver.name = "mtx1-wdt", | 252 | .driver.name = "mtx1-wdt", |
@@ -252,12 +255,12 @@ static struct platform_driver mtx1_wdt = { | |||
252 | 255 | ||
253 | static int __init mtx1_wdt_init(void) | 256 | static int __init mtx1_wdt_init(void) |
254 | { | 257 | { |
255 | return platform_driver_register(&mtx1_wdt); | 258 | return platform_driver_register(&mtx1_wdt_driver); |
256 | } | 259 | } |
257 | 260 | ||
258 | static void __exit mtx1_wdt_exit(void) | 261 | static void __exit mtx1_wdt_exit(void) |
259 | { | 262 | { |
260 | platform_driver_unregister(&mtx1_wdt); | 263 | platform_driver_unregister(&mtx1_wdt_driver); |
261 | } | 264 | } |
262 | 265 | ||
263 | module_init(mtx1_wdt_init); | 266 | module_init(mtx1_wdt_init); |
diff --git a/drivers/watchdog/wm831x_wdt.c b/drivers/watchdog/wm831x_wdt.c index 8c4b2d5bb7da..871caea4e1c6 100644 --- a/drivers/watchdog/wm831x_wdt.c +++ b/drivers/watchdog/wm831x_wdt.c | |||
@@ -320,6 +320,11 @@ static int __devinit wm831x_wdt_probe(struct platform_device *pdev) | |||
320 | struct wm831x_watchdog_pdata *pdata; | 320 | struct wm831x_watchdog_pdata *pdata; |
321 | int reg, ret; | 321 | int reg, ret; |
322 | 322 | ||
323 | if (wm831x) { | ||
324 | dev_err(&pdev->dev, "wm831x watchdog already registered\n"); | ||
325 | return -EBUSY; | ||
326 | } | ||
327 | |||
323 | wm831x = dev_get_drvdata(pdev->dev.parent); | 328 | wm831x = dev_get_drvdata(pdev->dev.parent); |
324 | 329 | ||
325 | ret = wm831x_reg_read(wm831x, WM831X_WATCHDOG); | 330 | ret = wm831x_reg_read(wm831x, WM831X_WATCHDOG); |
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 7f540df52527..c8cb83ef6f6f 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c | |||
@@ -2474,14 +2474,6 @@ generic_ip_connect(struct TCP_Server_Info *server) | |||
2474 | if (rc < 0) | 2474 | if (rc < 0) |
2475 | return rc; | 2475 | return rc; |
2476 | 2476 | ||
2477 | rc = socket->ops->connect(socket, saddr, slen, 0); | ||
2478 | if (rc < 0) { | ||
2479 | cFYI(1, "Error %d connecting to server", rc); | ||
2480 | sock_release(socket); | ||
2481 | server->ssocket = NULL; | ||
2482 | return rc; | ||
2483 | } | ||
2484 | |||
2485 | /* | 2477 | /* |
2486 | * Eventually check for other socket options to change from | 2478 | * Eventually check for other socket options to change from |
2487 | * the default. sock_setsockopt not used because it expects | 2479 | * the default. sock_setsockopt not used because it expects |
@@ -2510,6 +2502,14 @@ generic_ip_connect(struct TCP_Server_Info *server) | |||
2510 | socket->sk->sk_sndbuf, | 2502 | socket->sk->sk_sndbuf, |
2511 | socket->sk->sk_rcvbuf, socket->sk->sk_rcvtimeo); | 2503 | socket->sk->sk_rcvbuf, socket->sk->sk_rcvtimeo); |
2512 | 2504 | ||
2505 | rc = socket->ops->connect(socket, saddr, slen, 0); | ||
2506 | if (rc < 0) { | ||
2507 | cFYI(1, "Error %d connecting to server", rc); | ||
2508 | sock_release(socket); | ||
2509 | server->ssocket = NULL; | ||
2510 | return rc; | ||
2511 | } | ||
2512 | |||
2513 | if (sport == htons(RFC1001_PORT)) | 2513 | if (sport == htons(RFC1001_PORT)) |
2514 | rc = ip_rfc1001_connect(server); | 2514 | rc = ip_rfc1001_connect(server); |
2515 | 2515 | ||
diff --git a/include/linux/fsl-diu-fb.h b/include/linux/fsl-diu-fb.h index 781d4671415f..daa9952d2174 100644 --- a/include/linux/fsl-diu-fb.h +++ b/include/linux/fsl-diu-fb.h | |||
@@ -24,12 +24,6 @@ | |||
24 | * See mpc8610fb_set_par(), map_video_memory(), and unmap_video_memory() | 24 | * See mpc8610fb_set_par(), map_video_memory(), and unmap_video_memory() |
25 | */ | 25 | */ |
26 | #define MEM_ALLOC_THRESHOLD (1024*768*4+32) | 26 | #define MEM_ALLOC_THRESHOLD (1024*768*4+32) |
27 | /* Minimum value that the pixel clock can be set to in pico seconds | ||
28 | * This is determined by platform clock/3 where the minimum platform | ||
29 | * clock is 533MHz. This gives 5629 pico seconds. | ||
30 | */ | ||
31 | #define MIN_PIX_CLK 5629 | ||
32 | #define MAX_PIX_CLK 96096 | ||
33 | 27 | ||
34 | #include <linux/types.h> | 28 | #include <linux/types.h> |
35 | 29 | ||
diff --git a/include/sound/sb16_csp.h b/include/sound/sb16_csp.h index 736eac71d053..af1b49e982df 100644 --- a/include/sound/sb16_csp.h +++ b/include/sound/sb16_csp.h | |||
@@ -99,7 +99,14 @@ struct snd_sb_csp_info { | |||
99 | /* get CSP information */ | 99 | /* get CSP information */ |
100 | #define SNDRV_SB_CSP_IOCTL_INFO _IOR('H', 0x10, struct snd_sb_csp_info) | 100 | #define SNDRV_SB_CSP_IOCTL_INFO _IOR('H', 0x10, struct snd_sb_csp_info) |
101 | /* load microcode to CSP */ | 101 | /* load microcode to CSP */ |
102 | #define SNDRV_SB_CSP_IOCTL_LOAD_CODE _IOW('H', 0x11, struct snd_sb_csp_microcode) | 102 | /* NOTE: struct snd_sb_csp_microcode overflows the max size (13 bits) |
103 | * defined for some architectures like MIPS, and it leads to build errors. | ||
104 | * (x86 and co have 14-bit size, thus it's valid, though.) | ||
105 | * As a workaround for skipping the size-limit check, here we don't use the | ||
106 | * normal _IOW() macro but _IOC() with the manual argument. | ||
107 | */ | ||
108 | #define SNDRV_SB_CSP_IOCTL_LOAD_CODE \ | ||
109 | _IOC(_IOC_WRITE, 'H', 0x11, sizeof(struct snd_sb_csp_microcode)) | ||
103 | /* unload microcode from CSP */ | 110 | /* unload microcode from CSP */ |
104 | #define SNDRV_SB_CSP_IOCTL_UNLOAD_CODE _IO('H', 0x12) | 111 | #define SNDRV_SB_CSP_IOCTL_UNLOAD_CODE _IO('H', 0x12) |
105 | /* start CSP */ | 112 | /* start CSP */ |
diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c index 3163330cd4f1..d3a05b9ade7a 100644 --- a/net/bluetooth/hci_conn.c +++ b/net/bluetooth/hci_conn.c | |||
@@ -608,11 +608,11 @@ int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type) | |||
608 | goto encrypt; | 608 | goto encrypt; |
609 | 609 | ||
610 | auth: | 610 | auth: |
611 | if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) | 611 | if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) |
612 | return 0; | 612 | return 0; |
613 | 613 | ||
614 | hci_conn_auth(conn, sec_level, auth_type); | 614 | if (!hci_conn_auth(conn, sec_level, auth_type)) |
615 | return 0; | 615 | return 0; |
616 | 616 | ||
617 | encrypt: | 617 | encrypt: |
618 | if (conn->link_mode & HCI_LM_ENCRYPT) | 618 | if (conn->link_mode & HCI_LM_ENCRYPT) |
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index e64a1c2df238..56fdd9162da9 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c | |||
@@ -4002,21 +4002,30 @@ static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt) | |||
4002 | } | 4002 | } |
4003 | } else if (sk->sk_state == BT_CONNECT2) { | 4003 | } else if (sk->sk_state == BT_CONNECT2) { |
4004 | struct l2cap_conn_rsp rsp; | 4004 | struct l2cap_conn_rsp rsp; |
4005 | __u16 result; | 4005 | __u16 res, stat; |
4006 | 4006 | ||
4007 | if (!status) { | 4007 | if (!status) { |
4008 | sk->sk_state = BT_CONFIG; | 4008 | if (bt_sk(sk)->defer_setup) { |
4009 | result = L2CAP_CR_SUCCESS; | 4009 | struct sock *parent = bt_sk(sk)->parent; |
4010 | res = L2CAP_CR_PEND; | ||
4011 | stat = L2CAP_CS_AUTHOR_PEND; | ||
4012 | parent->sk_data_ready(parent, 0); | ||
4013 | } else { | ||
4014 | sk->sk_state = BT_CONFIG; | ||
4015 | res = L2CAP_CR_SUCCESS; | ||
4016 | stat = L2CAP_CS_NO_INFO; | ||
4017 | } | ||
4010 | } else { | 4018 | } else { |
4011 | sk->sk_state = BT_DISCONN; | 4019 | sk->sk_state = BT_DISCONN; |
4012 | l2cap_sock_set_timer(sk, HZ / 10); | 4020 | l2cap_sock_set_timer(sk, HZ / 10); |
4013 | result = L2CAP_CR_SEC_BLOCK; | 4021 | res = L2CAP_CR_SEC_BLOCK; |
4022 | stat = L2CAP_CS_NO_INFO; | ||
4014 | } | 4023 | } |
4015 | 4024 | ||
4016 | rsp.scid = cpu_to_le16(chan->dcid); | 4025 | rsp.scid = cpu_to_le16(chan->dcid); |
4017 | rsp.dcid = cpu_to_le16(chan->scid); | 4026 | rsp.dcid = cpu_to_le16(chan->scid); |
4018 | rsp.result = cpu_to_le16(result); | 4027 | rsp.result = cpu_to_le16(res); |
4019 | rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO); | 4028 | rsp.status = cpu_to_le16(stat); |
4020 | l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP, | 4029 | l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP, |
4021 | sizeof(rsp), &rsp); | 4030 | sizeof(rsp), &rsp); |
4022 | } | 4031 | } |
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c index 29b9812c8da0..2d85ca7111d3 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c | |||
@@ -1379,8 +1379,11 @@ static int br_multicast_ipv4_rcv(struct net_bridge *br, | |||
1379 | if (unlikely(ip_fast_csum((u8 *)iph, iph->ihl))) | 1379 | if (unlikely(ip_fast_csum((u8 *)iph, iph->ihl))) |
1380 | return -EINVAL; | 1380 | return -EINVAL; |
1381 | 1381 | ||
1382 | if (iph->protocol != IPPROTO_IGMP) | 1382 | if (iph->protocol != IPPROTO_IGMP) { |
1383 | if ((iph->daddr & IGMP_LOCAL_GROUP_MASK) != IGMP_LOCAL_GROUP) | ||
1384 | BR_INPUT_SKB_CB(skb)->mrouters_only = 1; | ||
1383 | return 0; | 1385 | return 0; |
1386 | } | ||
1384 | 1387 | ||
1385 | len = ntohs(iph->tot_len); | 1388 | len = ntohs(iph->tot_len); |
1386 | if (skb->len < len || len < ip_hdrlen(skb)) | 1389 | if (skb->len < len || len < ip_hdrlen(skb)) |
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index a8024eaa0e87..4a7e16b5d3f3 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
@@ -802,8 +802,6 @@ static int __ip_append_data(struct sock *sk, | |||
802 | skb = skb_peek_tail(queue); | 802 | skb = skb_peek_tail(queue); |
803 | 803 | ||
804 | exthdrlen = !skb ? rt->dst.header_len : 0; | 804 | exthdrlen = !skb ? rt->dst.header_len : 0; |
805 | length += exthdrlen; | ||
806 | transhdrlen += exthdrlen; | ||
807 | mtu = cork->fragsize; | 805 | mtu = cork->fragsize; |
808 | 806 | ||
809 | hh_len = LL_RESERVED_SPACE(rt->dst.dev); | 807 | hh_len = LL_RESERVED_SPACE(rt->dst.dev); |
@@ -883,17 +881,16 @@ alloc_new_skb: | |||
883 | else | 881 | else |
884 | alloclen = fraglen; | 882 | alloclen = fraglen; |
885 | 883 | ||
884 | alloclen += exthdrlen; | ||
885 | |||
886 | /* The last fragment gets additional space at tail. | 886 | /* The last fragment gets additional space at tail. |
887 | * Note, with MSG_MORE we overallocate on fragments, | 887 | * Note, with MSG_MORE we overallocate on fragments, |
888 | * because we have no idea what fragment will be | 888 | * because we have no idea what fragment will be |
889 | * the last. | 889 | * the last. |
890 | */ | 890 | */ |
891 | if (datalen == length + fraggap) { | 891 | if (datalen == length + fraggap) |
892 | alloclen += rt->dst.trailer_len; | 892 | alloclen += rt->dst.trailer_len; |
893 | /* make sure mtu is not reached */ | 893 | |
894 | if (datalen > mtu - fragheaderlen - rt->dst.trailer_len) | ||
895 | datalen -= ALIGN(rt->dst.trailer_len, 8); | ||
896 | } | ||
897 | if (transhdrlen) { | 894 | if (transhdrlen) { |
898 | skb = sock_alloc_send_skb(sk, | 895 | skb = sock_alloc_send_skb(sk, |
899 | alloclen + hh_len + 15, | 896 | alloclen + hh_len + 15, |
@@ -926,11 +923,11 @@ alloc_new_skb: | |||
926 | /* | 923 | /* |
927 | * Find where to start putting bytes. | 924 | * Find where to start putting bytes. |
928 | */ | 925 | */ |
929 | data = skb_put(skb, fraglen); | 926 | data = skb_put(skb, fraglen + exthdrlen); |
930 | skb_set_network_header(skb, exthdrlen); | 927 | skb_set_network_header(skb, exthdrlen); |
931 | skb->transport_header = (skb->network_header + | 928 | skb->transport_header = (skb->network_header + |
932 | fragheaderlen); | 929 | fragheaderlen); |
933 | data += fragheaderlen; | 930 | data += fragheaderlen + exthdrlen; |
934 | 931 | ||
935 | if (fraggap) { | 932 | if (fraggap) { |
936 | skb->csum = skb_copy_and_csum_bits( | 933 | skb->csum = skb_copy_and_csum_bits( |
@@ -1064,7 +1061,7 @@ static int ip_setup_cork(struct sock *sk, struct inet_cork *cork, | |||
1064 | */ | 1061 | */ |
1065 | *rtp = NULL; | 1062 | *rtp = NULL; |
1066 | cork->fragsize = inet->pmtudisc == IP_PMTUDISC_PROBE ? | 1063 | cork->fragsize = inet->pmtudisc == IP_PMTUDISC_PROBE ? |
1067 | rt->dst.dev->mtu : dst_mtu(rt->dst.path); | 1064 | rt->dst.dev->mtu : dst_mtu(&rt->dst); |
1068 | cork->dst = &rt->dst; | 1065 | cork->dst = &rt->dst; |
1069 | cork->length = 0; | 1066 | cork->length = 0; |
1070 | cork->tx_flags = ipc->tx_flags; | 1067 | cork->tx_flags = ipc->tx_flags; |
diff --git a/net/ipv4/netfilter.c b/net/ipv4/netfilter.c index 4614babdc45f..2e97e3ec1eb7 100644 --- a/net/ipv4/netfilter.c +++ b/net/ipv4/netfilter.c | |||
@@ -17,51 +17,35 @@ int ip_route_me_harder(struct sk_buff *skb, unsigned addr_type) | |||
17 | const struct iphdr *iph = ip_hdr(skb); | 17 | const struct iphdr *iph = ip_hdr(skb); |
18 | struct rtable *rt; | 18 | struct rtable *rt; |
19 | struct flowi4 fl4 = {}; | 19 | struct flowi4 fl4 = {}; |
20 | unsigned long orefdst; | 20 | __be32 saddr = iph->saddr; |
21 | __u8 flags = 0; | ||
21 | unsigned int hh_len; | 22 | unsigned int hh_len; |
22 | unsigned int type; | ||
23 | 23 | ||
24 | type = inet_addr_type(net, iph->saddr); | 24 | if (!skb->sk && addr_type != RTN_LOCAL) { |
25 | if (skb->sk && inet_sk(skb->sk)->transparent) | 25 | if (addr_type == RTN_UNSPEC) |
26 | type = RTN_LOCAL; | 26 | addr_type = inet_addr_type(net, saddr); |
27 | if (addr_type == RTN_UNSPEC) | 27 | if (addr_type == RTN_LOCAL || addr_type == RTN_UNICAST) |
28 | addr_type = type; | 28 | flags |= FLOWI_FLAG_ANYSRC; |
29 | else | ||
30 | saddr = 0; | ||
31 | } | ||
29 | 32 | ||
30 | /* some non-standard hacks like ipt_REJECT.c:send_reset() can cause | 33 | /* some non-standard hacks like ipt_REJECT.c:send_reset() can cause |
31 | * packets with foreign saddr to appear on the NF_INET_LOCAL_OUT hook. | 34 | * packets with foreign saddr to appear on the NF_INET_LOCAL_OUT hook. |
32 | */ | 35 | */ |
33 | if (addr_type == RTN_LOCAL) { | 36 | fl4.daddr = iph->daddr; |
34 | fl4.daddr = iph->daddr; | 37 | fl4.saddr = saddr; |
35 | if (type == RTN_LOCAL) | 38 | fl4.flowi4_tos = RT_TOS(iph->tos); |
36 | fl4.saddr = iph->saddr; | 39 | fl4.flowi4_oif = skb->sk ? skb->sk->sk_bound_dev_if : 0; |
37 | fl4.flowi4_tos = RT_TOS(iph->tos); | 40 | fl4.flowi4_mark = skb->mark; |
38 | fl4.flowi4_oif = skb->sk ? skb->sk->sk_bound_dev_if : 0; | 41 | fl4.flowi4_flags = skb->sk ? inet_sk_flowi_flags(skb->sk) : flags; |
39 | fl4.flowi4_mark = skb->mark; | 42 | rt = ip_route_output_key(net, &fl4); |
40 | fl4.flowi4_flags = skb->sk ? inet_sk_flowi_flags(skb->sk) : 0; | 43 | if (IS_ERR(rt)) |
41 | rt = ip_route_output_key(net, &fl4); | 44 | return -1; |
42 | if (IS_ERR(rt)) | ||
43 | return -1; | ||
44 | |||
45 | /* Drop old route. */ | ||
46 | skb_dst_drop(skb); | ||
47 | skb_dst_set(skb, &rt->dst); | ||
48 | } else { | ||
49 | /* non-local src, find valid iif to satisfy | ||
50 | * rp-filter when calling ip_route_input. */ | ||
51 | fl4.daddr = iph->saddr; | ||
52 | rt = ip_route_output_key(net, &fl4); | ||
53 | if (IS_ERR(rt)) | ||
54 | return -1; | ||
55 | 45 | ||
56 | orefdst = skb->_skb_refdst; | 46 | /* Drop old route. */ |
57 | if (ip_route_input(skb, iph->daddr, iph->saddr, | 47 | skb_dst_drop(skb); |
58 | RT_TOS(iph->tos), rt->dst.dev) != 0) { | 48 | skb_dst_set(skb, &rt->dst); |
59 | dst_release(&rt->dst); | ||
60 | return -1; | ||
61 | } | ||
62 | dst_release(&rt->dst); | ||
63 | refdst_drop(orefdst); | ||
64 | } | ||
65 | 49 | ||
66 | if (skb_dst(skb)->error) | 50 | if (skb_dst(skb)->error) |
67 | return -1; | 51 | return -1; |
diff --git a/net/ipv4/netfilter/ipt_REJECT.c b/net/ipv4/netfilter/ipt_REJECT.c index 1ff79e557f96..51f13f8ec724 100644 --- a/net/ipv4/netfilter/ipt_REJECT.c +++ b/net/ipv4/netfilter/ipt_REJECT.c | |||
@@ -40,7 +40,6 @@ static void send_reset(struct sk_buff *oldskb, int hook) | |||
40 | struct iphdr *niph; | 40 | struct iphdr *niph; |
41 | const struct tcphdr *oth; | 41 | const struct tcphdr *oth; |
42 | struct tcphdr _otcph, *tcph; | 42 | struct tcphdr _otcph, *tcph; |
43 | unsigned int addr_type; | ||
44 | 43 | ||
45 | /* IP header checks: fragment. */ | 44 | /* IP header checks: fragment. */ |
46 | if (ip_hdr(oldskb)->frag_off & htons(IP_OFFSET)) | 45 | if (ip_hdr(oldskb)->frag_off & htons(IP_OFFSET)) |
@@ -55,6 +54,9 @@ static void send_reset(struct sk_buff *oldskb, int hook) | |||
55 | if (oth->rst) | 54 | if (oth->rst) |
56 | return; | 55 | return; |
57 | 56 | ||
57 | if (skb_rtable(oldskb)->rt_flags & (RTCF_BROADCAST | RTCF_MULTICAST)) | ||
58 | return; | ||
59 | |||
58 | /* Check checksum */ | 60 | /* Check checksum */ |
59 | if (nf_ip_checksum(oldskb, hook, ip_hdrlen(oldskb), IPPROTO_TCP)) | 61 | if (nf_ip_checksum(oldskb, hook, ip_hdrlen(oldskb), IPPROTO_TCP)) |
60 | return; | 62 | return; |
@@ -101,19 +103,11 @@ static void send_reset(struct sk_buff *oldskb, int hook) | |||
101 | nskb->csum_start = (unsigned char *)tcph - nskb->head; | 103 | nskb->csum_start = (unsigned char *)tcph - nskb->head; |
102 | nskb->csum_offset = offsetof(struct tcphdr, check); | 104 | nskb->csum_offset = offsetof(struct tcphdr, check); |
103 | 105 | ||
104 | addr_type = RTN_UNSPEC; | ||
105 | if (hook != NF_INET_FORWARD | ||
106 | #ifdef CONFIG_BRIDGE_NETFILTER | ||
107 | || (nskb->nf_bridge && nskb->nf_bridge->mask & BRNF_BRIDGED) | ||
108 | #endif | ||
109 | ) | ||
110 | addr_type = RTN_LOCAL; | ||
111 | |||
112 | /* ip_route_me_harder expects skb->dst to be set */ | 106 | /* ip_route_me_harder expects skb->dst to be set */ |
113 | skb_dst_set_noref(nskb, skb_dst(oldskb)); | 107 | skb_dst_set_noref(nskb, skb_dst(oldskb)); |
114 | 108 | ||
115 | nskb->protocol = htons(ETH_P_IP); | 109 | nskb->protocol = htons(ETH_P_IP); |
116 | if (ip_route_me_harder(nskb, addr_type)) | 110 | if (ip_route_me_harder(nskb, RTN_UNSPEC)) |
117 | goto free_nskb; | 111 | goto free_nskb; |
118 | 112 | ||
119 | niph->ttl = ip4_dst_hoplimit(skb_dst(nskb)); | 113 | niph->ttl = ip4_dst_hoplimit(skb_dst(nskb)); |
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index abca870d8ff6..48cd88e62553 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
@@ -1249,6 +1249,9 @@ csum_copy_err: | |||
1249 | 1249 | ||
1250 | if (noblock) | 1250 | if (noblock) |
1251 | return -EAGAIN; | 1251 | return -EAGAIN; |
1252 | |||
1253 | /* starting over for a new packet */ | ||
1254 | msg->msg_flags &= ~MSG_TRUNC; | ||
1252 | goto try_again; | 1255 | goto try_again; |
1253 | } | 1256 | } |
1254 | 1257 | ||
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 41f8c9c08dba..328985c40883 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c | |||
@@ -453,8 +453,11 @@ csum_copy_err: | |||
453 | } | 453 | } |
454 | unlock_sock_fast(sk, slow); | 454 | unlock_sock_fast(sk, slow); |
455 | 455 | ||
456 | if (flags & MSG_DONTWAIT) | 456 | if (noblock) |
457 | return -EAGAIN; | 457 | return -EAGAIN; |
458 | |||
459 | /* starting over for a new packet */ | ||
460 | msg->msg_flags &= ~MSG_TRUNC; | ||
458 | goto try_again; | 461 | goto try_again; |
459 | } | 462 | } |
460 | 463 | ||
diff --git a/sound/atmel/abdac.c b/sound/atmel/abdac.c index 6e2409181895..bfee60c4d4c0 100644 --- a/sound/atmel/abdac.c +++ b/sound/atmel/abdac.c | |||
@@ -599,4 +599,4 @@ module_exit(atmel_abdac_exit); | |||
599 | 599 | ||
600 | MODULE_LICENSE("GPL"); | 600 | MODULE_LICENSE("GPL"); |
601 | MODULE_DESCRIPTION("Driver for Atmel Audio Bitstream DAC (ABDAC)"); | 601 | MODULE_DESCRIPTION("Driver for Atmel Audio Bitstream DAC (ABDAC)"); |
602 | MODULE_AUTHOR("Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>"); | 602 | MODULE_AUTHOR("Hans-Christian Egtvedt <egtvedt@samfundet.no>"); |
diff --git a/sound/atmel/ac97c.c b/sound/atmel/ac97c.c index b310702c646e..ac35222ad0dd 100644 --- a/sound/atmel/ac97c.c +++ b/sound/atmel/ac97c.c | |||
@@ -1199,4 +1199,4 @@ module_exit(atmel_ac97c_exit); | |||
1199 | 1199 | ||
1200 | MODULE_LICENSE("GPL"); | 1200 | MODULE_LICENSE("GPL"); |
1201 | MODULE_DESCRIPTION("Driver for Atmel AC97 controller"); | 1201 | MODULE_DESCRIPTION("Driver for Atmel AC97 controller"); |
1202 | MODULE_AUTHOR("Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>"); | 1202 | MODULE_AUTHOR("Hans-Christian Egtvedt <egtvedt@samfundet.no>"); |
diff --git a/sound/pci/cs5535audio/cs5535audio_pcm.c b/sound/pci/cs5535audio/cs5535audio_pcm.c index f16bc8aad6ed..e083122ca55a 100644 --- a/sound/pci/cs5535audio/cs5535audio_pcm.c +++ b/sound/pci/cs5535audio/cs5535audio_pcm.c | |||
@@ -149,7 +149,7 @@ static int cs5535audio_build_dma_packets(struct cs5535audio *cs5535au, | |||
149 | &((struct cs5535audio_dma_desc *) dma->desc_buf.area)[i]; | 149 | &((struct cs5535audio_dma_desc *) dma->desc_buf.area)[i]; |
150 | desc->addr = cpu_to_le32(addr); | 150 | desc->addr = cpu_to_le32(addr); |
151 | desc->size = cpu_to_le32(period_bytes); | 151 | desc->size = cpu_to_le32(period_bytes); |
152 | desc->ctlreserved = cpu_to_le32(PRD_EOP); | 152 | desc->ctlreserved = cpu_to_le16(PRD_EOP); |
153 | desc_addr += sizeof(struct cs5535audio_dma_desc); | 153 | desc_addr += sizeof(struct cs5535audio_dma_desc); |
154 | addr += period_bytes; | 154 | addr += period_bytes; |
155 | } | 155 | } |
@@ -157,7 +157,7 @@ static int cs5535audio_build_dma_packets(struct cs5535audio *cs5535au, | |||
157 | lastdesc = &((struct cs5535audio_dma_desc *) dma->desc_buf.area)[periods]; | 157 | lastdesc = &((struct cs5535audio_dma_desc *) dma->desc_buf.area)[periods]; |
158 | lastdesc->addr = cpu_to_le32((u32) dma->desc_buf.addr); | 158 | lastdesc->addr = cpu_to_le32((u32) dma->desc_buf.addr); |
159 | lastdesc->size = 0; | 159 | lastdesc->size = 0; |
160 | lastdesc->ctlreserved = cpu_to_le32(PRD_JMP); | 160 | lastdesc->ctlreserved = cpu_to_le16(PRD_JMP); |
161 | jmpprd_addr = cpu_to_le32(lastdesc->addr + | 161 | jmpprd_addr = cpu_to_le32(lastdesc->addr + |
162 | (sizeof(struct cs5535audio_dma_desc)*periods)); | 162 | (sizeof(struct cs5535audio_dma_desc)*periods)); |
163 | 163 | ||
diff --git a/sound/pci/hda/hda_eld.c b/sound/pci/hda/hda_eld.c index b05f7be9dc1b..e3e853153d14 100644 --- a/sound/pci/hda/hda_eld.c +++ b/sound/pci/hda/hda_eld.c | |||
@@ -294,7 +294,7 @@ static int hdmi_update_eld(struct hdmi_eld *e, | |||
294 | snd_printd(KERN_INFO "HDMI: out of range MNL %d\n", mnl); | 294 | snd_printd(KERN_INFO "HDMI: out of range MNL %d\n", mnl); |
295 | goto out_fail; | 295 | goto out_fail; |
296 | } else | 296 | } else |
297 | strlcpy(e->monitor_name, buf + ELD_FIXED_BYTES, mnl); | 297 | strlcpy(e->monitor_name, buf + ELD_FIXED_BYTES, mnl + 1); |
298 | 298 | ||
299 | for (i = 0; i < e->sad_count; i++) { | 299 | for (i = 0; i < e->sad_count; i++) { |
300 | if (ELD_FIXED_BYTES + mnl + 3 * (i + 1) > size) { | 300 | if (ELD_FIXED_BYTES + mnl + 3 * (i + 1) > size) { |
diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c index 694b9daf691f..7bbc5f237a5e 100644 --- a/sound/pci/hda/patch_conexant.c +++ b/sound/pci/hda/patch_conexant.c | |||
@@ -3074,6 +3074,7 @@ static const char * const cxt5066_models[CXT5066_MODELS] = { | |||
3074 | }; | 3074 | }; |
3075 | 3075 | ||
3076 | static const struct snd_pci_quirk cxt5066_cfg_tbl[] = { | 3076 | static const struct snd_pci_quirk cxt5066_cfg_tbl[] = { |
3077 | SND_PCI_QUIRK(0x1025, 0x054c, "Acer Aspire 3830TG", CXT5066_AUTO), | ||
3077 | SND_PCI_QUIRK_MASK(0x1025, 0xff00, 0x0400, "Acer", CXT5066_IDEAPAD), | 3078 | SND_PCI_QUIRK_MASK(0x1025, 0xff00, 0x0400, "Acer", CXT5066_IDEAPAD), |
3078 | SND_PCI_QUIRK(0x1028, 0x02d8, "Dell Vostro", CXT5066_DELL_VOSTRO), | 3079 | SND_PCI_QUIRK(0x1028, 0x02d8, "Dell Vostro", CXT5066_DELL_VOSTRO), |
3079 | SND_PCI_QUIRK(0x1028, 0x02f5, "Dell Vostro 320", CXT5066_IDEAPAD), | 3080 | SND_PCI_QUIRK(0x1028, 0x02f5, "Dell Vostro 320", CXT5066_IDEAPAD), |
@@ -4389,6 +4390,8 @@ static const struct hda_codec_preset snd_hda_preset_conexant[] = { | |||
4389 | .patch = patch_cxt5066 }, | 4390 | .patch = patch_cxt5066 }, |
4390 | { .id = 0x14f15069, .name = "CX20585", | 4391 | { .id = 0x14f15069, .name = "CX20585", |
4391 | .patch = patch_cxt5066 }, | 4392 | .patch = patch_cxt5066 }, |
4393 | { .id = 0x14f1506c, .name = "CX20588", | ||
4394 | .patch = patch_cxt5066 }, | ||
4392 | { .id = 0x14f1506e, .name = "CX20590", | 4395 | { .id = 0x14f1506e, .name = "CX20590", |
4393 | .patch = patch_cxt5066 }, | 4396 | .patch = patch_cxt5066 }, |
4394 | { .id = 0x14f15097, .name = "CX20631", | 4397 | { .id = 0x14f15097, .name = "CX20631", |
@@ -4417,6 +4420,7 @@ MODULE_ALIAS("snd-hda-codec-id:14f15066"); | |||
4417 | MODULE_ALIAS("snd-hda-codec-id:14f15067"); | 4420 | MODULE_ALIAS("snd-hda-codec-id:14f15067"); |
4418 | MODULE_ALIAS("snd-hda-codec-id:14f15068"); | 4421 | MODULE_ALIAS("snd-hda-codec-id:14f15068"); |
4419 | MODULE_ALIAS("snd-hda-codec-id:14f15069"); | 4422 | MODULE_ALIAS("snd-hda-codec-id:14f15069"); |
4423 | MODULE_ALIAS("snd-hda-codec-id:14f1506c"); | ||
4420 | MODULE_ALIAS("snd-hda-codec-id:14f1506e"); | 4424 | MODULE_ALIAS("snd-hda-codec-id:14f1506e"); |
4421 | MODULE_ALIAS("snd-hda-codec-id:14f15097"); | 4425 | MODULE_ALIAS("snd-hda-codec-id:14f15097"); |
4422 | MODULE_ALIAS("snd-hda-codec-id:14f15098"); | 4426 | MODULE_ALIAS("snd-hda-codec-id:14f15098"); |
diff --git a/sound/pci/rme9652/hdspm.c b/sound/pci/rme9652/hdspm.c index 3f08afc0f0d3..c8e402fc3782 100644 --- a/sound/pci/rme9652/hdspm.c +++ b/sound/pci/rme9652/hdspm.c | |||
@@ -896,11 +896,11 @@ struct hdspm { | |||
896 | unsigned char max_channels_in; | 896 | unsigned char max_channels_in; |
897 | unsigned char max_channels_out; | 897 | unsigned char max_channels_out; |
898 | 898 | ||
899 | char *channel_map_in; | 899 | signed char *channel_map_in; |
900 | char *channel_map_out; | 900 | signed char *channel_map_out; |
901 | 901 | ||
902 | char *channel_map_in_ss, *channel_map_in_ds, *channel_map_in_qs; | 902 | signed char *channel_map_in_ss, *channel_map_in_ds, *channel_map_in_qs; |
903 | char *channel_map_out_ss, *channel_map_out_ds, *channel_map_out_qs; | 903 | signed char *channel_map_out_ss, *channel_map_out_ds, *channel_map_out_qs; |
904 | 904 | ||
905 | char **port_names_in; | 905 | char **port_names_in; |
906 | char **port_names_out; | 906 | char **port_names_out; |
diff --git a/sound/spi/at73c213.c b/sound/spi/at73c213.c index 337a00241a1f..4dd051bdf4fd 100644 --- a/sound/spi/at73c213.c +++ b/sound/spi/at73c213.c | |||
@@ -1124,6 +1124,6 @@ static void __exit at73c213_exit(void) | |||
1124 | } | 1124 | } |
1125 | module_exit(at73c213_exit); | 1125 | module_exit(at73c213_exit); |
1126 | 1126 | ||
1127 | MODULE_AUTHOR("Hans-Christian Egtvedt <hcegtvedt@atmel.com>"); | 1127 | MODULE_AUTHOR("Hans-Christian Egtvedt <egtvedt@samfundet.no>"); |
1128 | MODULE_DESCRIPTION("Sound driver for AT73C213 with Atmel SSC"); | 1128 | MODULE_DESCRIPTION("Sound driver for AT73C213 with Atmel SSC"); |
1129 | MODULE_LICENSE("GPL"); | 1129 | MODULE_LICENSE("GPL"); |