Update to 3.2-rc1
Drop a large number of patches that were merged upstream. Fix context in features/all/sound-pci-cs46xx-request_firmware.patch. Remove another firmware image sneaked into staging. svn path=/dists/trunk/linux-2.6/; revision=18288
This commit is contained in:
parent
be78e2ff73
commit
ddbcf28662
|
@ -1,3 +1,9 @@
|
|||
linux-2.6 (3.2~rc1-1~experimental.1) UNRELEASED; urgency=low
|
||||
|
||||
* New upstream release candidate
|
||||
|
||||
-- Ben Hutchings <ben@decadent.org.uk> Mon, 14 Nov 2011 15:21:10 +0000
|
||||
|
||||
linux-2.6 (3.1.1-1) unstable; urgency=high
|
||||
|
||||
* New upstream stable update:
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
From: Steve French <smfrench@gmail.com>
|
||||
Date: Wed, 19 Oct 2011 21:27:11 -0500
|
||||
Subject: [PATCH] [CIFS] Fixup trivial checkpatch warning
|
||||
|
||||
commit b957ae9c53d5715a07f8bac644d8ff0a407c7e07 upstream.
|
||||
|
||||
Signed-off-by: Steve French <smfrench@gmail.com>
|
||||
---
|
||||
include/linux/freezer.h | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/include/linux/freezer.h b/include/linux/freezer.h
|
||||
index 3672f73..a155561 100644
|
||||
--- a/include/linux/freezer.h
|
||||
+++ b/include/linux/freezer.h
|
||||
@@ -143,7 +143,7 @@ static inline void set_freezable_with_signal(void)
|
||||
({ \
|
||||
int __retval; \
|
||||
do { \
|
||||
- __retval = wait_event_killable(wq, \
|
||||
+ __retval = wait_event_killable(wq, \
|
||||
(condition) || freezing(current)); \
|
||||
if (__retval && !freezing(current)) \
|
||||
break; \
|
||||
--
|
||||
1.7.7.2
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
From: Steve French <smfrench@gmail.com>
|
||||
Date: Tue, 25 Oct 2011 10:02:53 -0500
|
||||
Subject: [PATCH] Fix build break when freezer not configured
|
||||
|
||||
commit e0c8ea1a69410ef44043646938a6a4175f5307e4 upstream.
|
||||
|
||||
fs/cifs/transport.c: In function 'wait_for_response':
|
||||
fs/cifs/transport.c:328: error: implicit declaration of function 'wait_event_freezekillable'
|
||||
|
||||
Caused by commit f06ac72e9291 ("cifs, freezer: add
|
||||
wait_event_freezekillable and have cifs use it"). In this config,
|
||||
CONFIG_FREEZER is not set.
|
||||
|
||||
Reviewed-by: Shirish Pargaonkar <shirishp@us.ibm.com>
|
||||
CC: Jeff Layton <jlayton@redhat.com>
|
||||
Signed-off-by: Steve French <smfrench@gmail.com>
|
||||
---
|
||||
include/linux/freezer.h | 3 +++
|
||||
1 files changed, 3 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/include/linux/freezer.h b/include/linux/freezer.h
|
||||
index a155561..5989883 100644
|
||||
--- a/include/linux/freezer.h
|
||||
+++ b/include/linux/freezer.h
|
||||
@@ -203,6 +203,9 @@ static inline void set_freezable_with_signal(void) {}
|
||||
#define wait_event_freezable_timeout(wq, condition, timeout) \
|
||||
wait_event_interruptible_timeout(wq, condition, timeout)
|
||||
|
||||
+#define wait_event_freezekillable(wq, condition) \
|
||||
+ wait_event_killable(wq, condition)
|
||||
+
|
||||
#endif /* !CONFIG_FREEZER */
|
||||
|
||||
#endif /* FREEZER_H_INCLUDED */
|
||||
--
|
||||
1.7.7.2
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
From: Oleg Nesterov <oleg@redhat.com>
|
||||
Date: Thu, 3 Nov 2011 16:07:49 -0700
|
||||
Subject: [PATCH] PM / Freezer: Reimplement wait_event_freezekillable using
|
||||
freezer_do_not_count/freezer_count
|
||||
|
||||
commit 6f35c4abd7f0294166a5e0ab0401fe7949b33034 upstream.
|
||||
|
||||
Commit 27920651fe "PM / Freezer: Make fake_signal_wake_up() wake
|
||||
TASK_KILLABLE tasks too" updated fake_signal_wake_up() used by freezer
|
||||
to wake up KILLABLE tasks. Sending unsolicited wakeups to tasks in
|
||||
killable sleep is dangerous as there are code paths which depend on
|
||||
tasks not waking up spuriously from KILLABLE sleep.
|
||||
|
||||
For example. sys_read() or page can sleep in TASK_KILLABLE assuming
|
||||
that wait/down/whatever _killable can only fail if we can not return
|
||||
to the usermode. TASK_TRACED is another obvious example.
|
||||
|
||||
The offending commit was to resolve freezer hang during system PM
|
||||
operations caused by KILLABLE sleeps in network filesystems.
|
||||
wait_event_freezekillable(), which depends on the spurious KILLABLE
|
||||
wakeup, was added by f06ac72e92 "cifs, freezer: add
|
||||
wait_event_freezekillable and have cifs use it" to be used to
|
||||
implement killable & freezable sleeps in network filesystems.
|
||||
|
||||
To prepare for reverting of 27920651fe, this patch reimplements
|
||||
wait_event_freezekillable() using freezer_do_not_count/freezer_count()
|
||||
so that it doesn't depend on the spurious KILLABLE wakeup. This isn't
|
||||
very nice but should do for now.
|
||||
|
||||
[tj: Refreshed patch to apply to linus/master and updated commit
|
||||
description on Rafael's request.]
|
||||
|
||||
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
|
||||
Signed-off-by: Tejun Heo <tj@kernel.org>
|
||||
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
|
||||
---
|
||||
include/linux/freezer.h | 11 +++--------
|
||||
1 files changed, 3 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/include/linux/freezer.h b/include/linux/freezer.h
|
||||
index a49b529..a5386e3 100644
|
||||
--- a/include/linux/freezer.h
|
||||
+++ b/include/linux/freezer.h
|
||||
@@ -143,14 +143,9 @@ static inline void set_freezable_with_signal(void)
|
||||
#define wait_event_freezekillable(wq, condition) \
|
||||
({ \
|
||||
int __retval; \
|
||||
- do { \
|
||||
- __retval = wait_event_killable(wq, \
|
||||
- (condition) || freezing(current)); \
|
||||
- if (__retval && !freezing(current)) \
|
||||
- break; \
|
||||
- else if (!(condition)) \
|
||||
- __retval = -ERESTARTSYS; \
|
||||
- } while (try_to_freeze()); \
|
||||
+ freezer_do_not_count(); \
|
||||
+ __retval = wait_event_killable(wq, (condition)); \
|
||||
+ freezer_count(); \
|
||||
__retval; \
|
||||
})
|
||||
|
||||
--
|
||||
1.7.7.2
|
||||
|
|
@ -1,81 +0,0 @@
|
|||
From: Jeff Layton <jlayton@redhat.com>
|
||||
Date: Wed, 19 Oct 2011 15:30:40 -0400
|
||||
Subject: [PATCH] cifs, freezer: add wait_event_freezekillable and have cifs
|
||||
use it
|
||||
|
||||
commit f06ac72e929115f2772c29727152ba0832d641e4 upstream.
|
||||
|
||||
CIFS currently uses wait_event_killable to put tasks to sleep while
|
||||
they await replies from the server. That function though does not
|
||||
allow the freezer to run. In many cases, the network interface may
|
||||
be going down anyway, in which case the reply will never come. The
|
||||
client then ends up blocking the computer from suspending.
|
||||
|
||||
Fix this by adding a new wait_event_freezable variant --
|
||||
wait_event_freezekillable. The idea is to combine the behavior of
|
||||
wait_event_killable and wait_event_freezable -- put the task to
|
||||
sleep and only allow it to be awoken by fatal signals, but also
|
||||
allow the freezer to do its job.
|
||||
|
||||
Signed-off-by: Jeff Layton <jlayton@redhat.com>
|
||||
---
|
||||
fs/cifs/transport.c | 3 ++-
|
||||
include/linux/freezer.h | 19 +++++++++++++++++--
|
||||
2 files changed, 19 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
|
||||
index e7398d0..0cc9584 100644
|
||||
--- a/fs/cifs/transport.c
|
||||
+++ b/fs/cifs/transport.c
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <linux/wait.h>
|
||||
#include <linux/net.h>
|
||||
#include <linux/delay.h>
|
||||
+#include <linux/freezer.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/processor.h>
|
||||
#include <linux/mempool.h>
|
||||
@@ -324,7 +325,7 @@ wait_for_response(struct TCP_Server_Info *server, struct mid_q_entry *midQ)
|
||||
{
|
||||
int error;
|
||||
|
||||
- error = wait_event_killable(server->response_q,
|
||||
+ error = wait_event_freezekillable(server->response_q,
|
||||
midQ->midState != MID_REQUEST_SUBMITTED);
|
||||
if (error < 0)
|
||||
return -ERESTARTSYS;
|
||||
diff --git a/include/linux/freezer.h b/include/linux/freezer.h
|
||||
index 1effc8b..3672f73 100644
|
||||
--- a/include/linux/freezer.h
|
||||
+++ b/include/linux/freezer.h
|
||||
@@ -134,10 +134,25 @@ static inline void set_freezable_with_signal(void)
|
||||
}
|
||||
|
||||
/*
|
||||
- * Freezer-friendly wrappers around wait_event_interruptible() and
|
||||
- * wait_event_interruptible_timeout(), originally defined in <linux/wait.h>
|
||||
+ * Freezer-friendly wrappers around wait_event_interruptible(),
|
||||
+ * wait_event_killable() and wait_event_interruptible_timeout(), originally
|
||||
+ * defined in <linux/wait.h>
|
||||
*/
|
||||
|
||||
+#define wait_event_freezekillable(wq, condition) \
|
||||
+({ \
|
||||
+ int __retval; \
|
||||
+ do { \
|
||||
+ __retval = wait_event_killable(wq, \
|
||||
+ (condition) || freezing(current)); \
|
||||
+ if (__retval && !freezing(current)) \
|
||||
+ break; \
|
||||
+ else if (!(condition)) \
|
||||
+ __retval = -ERESTARTSYS; \
|
||||
+ } while (try_to_freeze()); \
|
||||
+ __retval; \
|
||||
+})
|
||||
+
|
||||
#define wait_event_freezable(wq, condition) \
|
||||
({ \
|
||||
int __retval; \
|
||||
--
|
||||
1.7.7.2
|
||||
|
|
@ -1,89 +0,0 @@
|
|||
From: Phillip Lougher <plougher@redhat.com>
|
||||
Date: Wed, 2 Nov 2011 13:38:01 -0700
|
||||
Subject: [PATCH] hfs: fix hfs_find_init() sb->ext_tree NULL ptr oops
|
||||
|
||||
commit 434a964daa14b9db083ce20404a4a2add54d037a upstream.
|
||||
|
||||
Clement Lecigne reports a filesystem which causes a kernel oops in
|
||||
hfs_find_init() trying to dereference sb->ext_tree which is NULL.
|
||||
|
||||
This proves to be because the filesystem has a corrupted MDB extent
|
||||
record, where the extents file does not fit into the first three extents
|
||||
in the file record (the first blocks).
|
||||
|
||||
In hfs_get_block() when looking up the blocks for the extent file
|
||||
(HFS_EXT_CNID), it fails the first blocks special case, and falls
|
||||
through to the extent code (which ultimately calls hfs_find_init())
|
||||
which is in the process of being initialised.
|
||||
|
||||
Hfs avoids this scenario by always having the extents b-tree fitting
|
||||
into the first blocks (the extents B-tree can't have overflow extents).
|
||||
|
||||
The fix is to check at mount time that the B-tree fits into first
|
||||
blocks, i.e. fail if HFS_I(inode)->alloc_blocks >=
|
||||
HFS_I(inode)->first_blocks
|
||||
|
||||
Note, the existing commit 47f365eb57573 ("hfs: fix oops on mount with
|
||||
corrupted btree extent records") becomes subsumed into this as a special
|
||||
case, but only for the extents B-tree (HFS_EXT_CNID), it is perfectly
|
||||
acceptable for the catalog B-Tree file to grow beyond three extents,
|
||||
with the remaining extent descriptors in the extents overfow.
|
||||
|
||||
This fixes CVE-2011-2203
|
||||
|
||||
Reported-by: Clement LECIGNE <clement.lecigne@netasq.com>
|
||||
Signed-off-by: Phillip Lougher <plougher@redhat.com>
|
||||
Cc: Jeff Mahoney <jeffm@suse.com>
|
||||
Cc: Christoph Hellwig <hch@lst.de>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
---
|
||||
fs/hfs/btree.c | 20 +++++++++++++++-----
|
||||
1 files changed, 15 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/fs/hfs/btree.c b/fs/hfs/btree.c
|
||||
index 3ebc437..1cbdeea 100644
|
||||
--- a/fs/hfs/btree.c
|
||||
+++ b/fs/hfs/btree.c
|
||||
@@ -46,11 +46,26 @@ struct hfs_btree *hfs_btree_open(struct super_block *sb, u32 id, btree_keycmp ke
|
||||
case HFS_EXT_CNID:
|
||||
hfs_inode_read_fork(tree->inode, mdb->drXTExtRec, mdb->drXTFlSize,
|
||||
mdb->drXTFlSize, be32_to_cpu(mdb->drXTClpSiz));
|
||||
+ if (HFS_I(tree->inode)->alloc_blocks >
|
||||
+ HFS_I(tree->inode)->first_blocks) {
|
||||
+ printk(KERN_ERR "hfs: invalid btree extent records\n");
|
||||
+ unlock_new_inode(tree->inode);
|
||||
+ goto free_inode;
|
||||
+ }
|
||||
+
|
||||
tree->inode->i_mapping->a_ops = &hfs_btree_aops;
|
||||
break;
|
||||
case HFS_CAT_CNID:
|
||||
hfs_inode_read_fork(tree->inode, mdb->drCTExtRec, mdb->drCTFlSize,
|
||||
mdb->drCTFlSize, be32_to_cpu(mdb->drCTClpSiz));
|
||||
+
|
||||
+ if (!HFS_I(tree->inode)->first_blocks) {
|
||||
+ printk(KERN_ERR "hfs: invalid btree extent records "
|
||||
+ "(0 size).\n");
|
||||
+ unlock_new_inode(tree->inode);
|
||||
+ goto free_inode;
|
||||
+ }
|
||||
+
|
||||
tree->inode->i_mapping->a_ops = &hfs_btree_aops;
|
||||
break;
|
||||
default:
|
||||
@@ -59,11 +74,6 @@ struct hfs_btree *hfs_btree_open(struct super_block *sb, u32 id, btree_keycmp ke
|
||||
}
|
||||
unlock_new_inode(tree->inode);
|
||||
|
||||
- if (!HFS_I(tree->inode)->first_blocks) {
|
||||
- printk(KERN_ERR "hfs: invalid btree extent records (0 size).\n");
|
||||
- goto free_inode;
|
||||
- }
|
||||
-
|
||||
mapping = tree->inode->i_mapping;
|
||||
page = read_mapping_page(mapping, 0, NULL);
|
||||
if (IS_ERR(page))
|
||||
--
|
||||
1.7.7.2
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
From: "Fry, Donald H" <donald.h.fry@intel.com>
|
||||
Date: Thu, 15 Sep 2011 11:46:37 -0700
|
||||
Subject: [PATCH] iwlagn: fix modinfo display for 135 ucode.
|
||||
|
||||
commit 5092e47afcbe6c470094c32095794b16083dfac2 upstream.
|
||||
|
||||
The modinfo report for 135 ucode is iwlwifi-135-IWL135_UCODE_API_MAX.ucode
|
||||
Change to show the value of the define: iwlwifi-135-6.ucode
|
||||
|
||||
Signed-off-by: Don Fry <donald.h.fry@intel.com>
|
||||
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
---
|
||||
drivers/net/wireless/iwlwifi/iwl-2000.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/iwlwifi/iwl-2000.c b/drivers/net/wireless/iwlwifi/iwl-2000.c
|
||||
index 913f2a2..0579398 100644
|
||||
--- a/drivers/net/wireless/iwlwifi/iwl-2000.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/iwl-2000.c
|
||||
@@ -75,7 +75,7 @@
|
||||
#define IWL105_MODULE_FIRMWARE(api) IWL105_FW_PRE __stringify(api) ".ucode"
|
||||
|
||||
#define IWL135_FW_PRE "iwlwifi-135-"
|
||||
-#define IWL135_MODULE_FIRMWARE(api) IWL135_FW_PRE #api ".ucode"
|
||||
+#define IWL135_MODULE_FIRMWARE(api) IWL135_FW_PRE __stringify(api) ".ucode"
|
||||
|
||||
static void iwl2000_set_ct_threshold(struct iwl_priv *priv)
|
||||
{
|
||||
--
|
||||
1.7.7
|
||||
|
|
@ -1,46 +0,0 @@
|
|||
From: Mikulas Patocka <mpatocka@redhat.com>
|
||||
Date: Mon, 31 Oct 2011 17:08:57 -0700
|
||||
Subject: [PATCH] vmscan: fix shrinker callback bug in fs/super.c
|
||||
|
||||
commit 09f363c7363eb10cfb4b82094bd7064e5608258b upstream.
|
||||
|
||||
The callback must not return -1 when nr_to_scan is zero. Fix the bug in
|
||||
fs/super.c and add this requirement to the callback specification.
|
||||
|
||||
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
|
||||
Cc: Dave Chinner <david@fromorbit.com>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
---
|
||||
fs/super.c | 2 +-
|
||||
include/linux/shrinker.h | 1 +
|
||||
2 files changed, 2 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/fs/super.c b/fs/super.c
|
||||
index 3f56a26..32a81f3 100644
|
||||
--- a/fs/super.c
|
||||
+++ b/fs/super.c
|
||||
@@ -61,7 +61,7 @@ static int prune_super(struct shrinker *shrink, struct shrink_control *sc)
|
||||
return -1;
|
||||
|
||||
if (!grab_super_passive(sb))
|
||||
- return -1;
|
||||
+ return !sc->nr_to_scan ? 0 : -1;
|
||||
|
||||
if (sb->s_op && sb->s_op->nr_cached_objects)
|
||||
fs_objects = sb->s_op->nr_cached_objects(sb);
|
||||
diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h
|
||||
index 790651b..a83833a 100644
|
||||
--- a/include/linux/shrinker.h
|
||||
+++ b/include/linux/shrinker.h
|
||||
@@ -20,6 +20,7 @@ struct shrink_control {
|
||||
* 'nr_to_scan' entries and attempt to free them up. It should return
|
||||
* the number of objects which remain in the cache. If it returns -1, it means
|
||||
* it cannot do any scanning at this time (eg. there is a risk of deadlock).
|
||||
+ * The callback must not return -1 if nr_to_scan is zero.
|
||||
*
|
||||
* The 'gfpmask' refers to the allocation we are currently trying to
|
||||
* fulfil.
|
||||
--
|
||||
1.7.7.2
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
From: Michael Cree <mcree@orcon.net.nz>
|
||||
Date: Mon, 31 Oct 2011 17:09:49 -0700
|
||||
Subject: [PATCH] alpha: wire up accept4 syscall
|
||||
|
||||
commit 0a8c384ebe4cc1c462076732dbffb595e7e81d5c upstream.
|
||||
|
||||
Somehow wiring up the accept4 syscall on Alpha was missed long ago.
|
||||
This commit rectifies that oversight.
|
||||
|
||||
Signed-off-by: Michael Cree <mcree@orcon.net.nz>
|
||||
Reviewed-by: Matt Turner <mattst88@gmail.com>
|
||||
Cc: Richard Henderson <rth@twiddle.net>
|
||||
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
---
|
||||
arch/alpha/include/asm/unistd.h | 3 ++-
|
||||
arch/alpha/kernel/systbls.S | 1 +
|
||||
2 files changed, 3 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/arch/alpha/include/asm/unistd.h b/arch/alpha/include/asm/unistd.h
|
||||
index 4ac48a0..1fbfd64 100644
|
||||
--- a/arch/alpha/include/asm/unistd.h
|
||||
+++ b/arch/alpha/include/asm/unistd.h
|
||||
@@ -457,10 +457,11 @@
|
||||
#define __NR_clock_adjtime 499
|
||||
#define __NR_syncfs 500
|
||||
#define __NR_setns 501
|
||||
+#define __NR_accept4 502
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
-#define NR_SYSCALLS 502
|
||||
+#define NR_SYSCALLS 503
|
||||
|
||||
#define __ARCH_WANT_IPC_PARSE_VERSION
|
||||
#define __ARCH_WANT_OLD_READDIR
|
||||
diff --git a/arch/alpha/kernel/systbls.S b/arch/alpha/kernel/systbls.S
|
||||
index 6acea1f..53d0ce2 100644
|
||||
--- a/arch/alpha/kernel/systbls.S
|
||||
+++ b/arch/alpha/kernel/systbls.S
|
||||
@@ -520,6 +520,7 @@ sys_call_table:
|
||||
.quad sys_clock_adjtime
|
||||
.quad sys_syncfs /* 500 */
|
||||
.quad sys_setns
|
||||
+ .quad sys_accept4
|
||||
|
||||
.size sys_call_table, . - sys_call_table
|
||||
.type sys_call_table, @object
|
||||
--
|
||||
1.7.7
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
From: Arnd Bergmann <arnd@arndb.de>
|
||||
Date: Sat, 3 Sep 2011 17:54:44 +0200
|
||||
Subject: [PATCH] ARM: add io{read,write}{16,32}be functions
|
||||
|
||||
commit 06901bd83412db5a31de7526e637101ed0c2c472 upstream.
|
||||
|
||||
These functions are used in some PCI drivers with big-endian
|
||||
MMIO space, and they are trivial to add here.
|
||||
|
||||
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
|
||||
---
|
||||
arch/arm/include/asm/io.h | 6 ++++++
|
||||
1 files changed, 6 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h
|
||||
index d66605d..bad7bfb 100644
|
||||
--- a/arch/arm/include/asm/io.h
|
||||
+++ b/arch/arm/include/asm/io.h
|
||||
@@ -260,10 +260,16 @@ extern void _memset_io(volatile void __iomem *, int, size_t);
|
||||
#define ioread16(p) ({ unsigned int __v = le16_to_cpu((__force __le16)__raw_readw(p)); __iormb(); __v; })
|
||||
#define ioread32(p) ({ unsigned int __v = le32_to_cpu((__force __le32)__raw_readl(p)); __iormb(); __v; })
|
||||
|
||||
+#define ioread16be(p) ({ unsigned int __v = be16_to_cpu((__force __be16)__raw_readw(p)); __iormb(); __v; })
|
||||
+#define ioread32be(p) ({ unsigned int __v = be32_to_cpu((__force __be32)__raw_readl(p)); __iormb(); __v; })
|
||||
+
|
||||
#define iowrite8(v,p) ({ __iowmb(); (void)__raw_writeb(v, p); })
|
||||
#define iowrite16(v,p) ({ __iowmb(); (void)__raw_writew((__force __u16)cpu_to_le16(v), p); })
|
||||
#define iowrite32(v,p) ({ __iowmb(); (void)__raw_writel((__force __u32)cpu_to_le32(v), p); })
|
||||
|
||||
+#define iowrite16be(v,p) ({ __iowmb(); (void)__raw_writew((__force __u16)cpu_to_be16(v), p); })
|
||||
+#define iowrite32be(v,p) ({ __iowmb(); (void)__raw_writel((__force __u32)cpu_to_be32(v), p); })
|
||||
+
|
||||
#define ioread8_rep(p,d,c) __raw_readsb(p,d,c)
|
||||
#define ioread16_rep(p,d,c) __raw_readsw(p,d,c)
|
||||
#define ioread32_rep(p,d,c) __raw_readsl(p,d,c)
|
||||
--
|
||||
1.7.7.2
|
||||
|
|
@ -1,158 +0,0 @@
|
|||
From: Imre Kaloz <kaloz@openwrt.org>
|
||||
Subject: [RFC/PATCH] ARM: ixp4xx gpiolib support
|
||||
Date: Mon, 5 Sep 2011 14:49:51 +0200
|
||||
|
||||
This patch adds gpiolib support for the IXP4xx platform
|
||||
|
||||
Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
||||
---
|
||||
arch/arm/Kconfig | 2 +-
|
||||
arch/arm/mach-ixp4xx/common.c | 39 +++++++++++++++++++++++++
|
||||
arch/arm/mach-ixp4xx/include/mach/gpio.h | 46 ++++++++++--------------------
|
||||
3 files changed, 55 insertions(+), 32 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
|
||||
index 3269576..e793a75 100644
|
||||
--- a/arch/arm/Kconfig
|
||||
+++ b/arch/arm/Kconfig
|
||||
@@ -481,7 +481,7 @@ config ARCH_IXP4XX
|
||||
depends on MMU
|
||||
select CLKSRC_MMIO
|
||||
select CPU_XSCALE
|
||||
- select GENERIC_GPIO
|
||||
+ select ARCH_REQUIRE_GPIOLIB
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select HAVE_SCHED_CLOCK
|
||||
select MIGHT_HAVE_PCI
|
||||
diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c
|
||||
index 0777257..7603456 100644
|
||||
--- a/arch/arm/mach-ixp4xx/common.c
|
||||
+++ b/arch/arm/mach-ixp4xx/common.c
|
||||
@@ -36,6 +36,7 @@
|
||||
#include <asm/page.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/sched_clock.h>
|
||||
+#include <asm/gpio.h>
|
||||
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/irq.h>
|
||||
@@ -375,12 +376,50 @@ static struct platform_device *ixp46x_devices[] __initdata = {
|
||||
unsigned long ixp4xx_exp_bus_size;
|
||||
EXPORT_SYMBOL(ixp4xx_exp_bus_size);
|
||||
|
||||
+static int ixp4xx_gpio_direction_input(struct gpio_chip *chip, unsigned gpio)
|
||||
+{
|
||||
+ gpio_line_config(gpio, IXP4XX_GPIO_IN);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int ixp4xx_gpio_direction_output(struct gpio_chip *chip, unsigned gpio, int level)
|
||||
+{
|
||||
+ gpio_line_set(gpio, level);
|
||||
+ gpio_line_config(gpio, IXP4XX_GPIO_OUT);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int ixp4xx_gpio_get_value(struct gpio_chip *chip, unsigned gpio)
|
||||
+{
|
||||
+ int value;
|
||||
+
|
||||
+ gpio_line_get(gpio, &value);
|
||||
+ return value;
|
||||
+}
|
||||
+
|
||||
+static void ixp4xx_gpio_set_value(struct gpio_chip *chip, unsigned gpio, int value)
|
||||
+{
|
||||
+ gpio_line_set(gpio, value);
|
||||
+}
|
||||
+
|
||||
+static struct gpio_chip ixp4xx_gpio_chip = {
|
||||
+ .label = "IXP4XX_GPIO_CHIP",
|
||||
+ .direction_input = ixp4xx_gpio_direction_input,
|
||||
+ .direction_output = ixp4xx_gpio_direction_output,
|
||||
+ .get = ixp4xx_gpio_get_value,
|
||||
+ .set = ixp4xx_gpio_set_value,
|
||||
+ .base = 0,
|
||||
+ .ngpio = 16,
|
||||
+};
|
||||
+
|
||||
void __init ixp4xx_sys_init(void)
|
||||
{
|
||||
ixp4xx_exp_bus_size = SZ_16M;
|
||||
|
||||
platform_add_devices(ixp4xx_devices, ARRAY_SIZE(ixp4xx_devices));
|
||||
|
||||
+ gpiochip_add(&ixp4xx_gpio_chip);
|
||||
+
|
||||
if (cpu_is_ixp46x()) {
|
||||
int region;
|
||||
|
||||
diff --git a/arch/arm/mach-ixp4xx/include/mach/gpio.h b/arch/arm/mach-ixp4xx/include/mach/gpio.h
|
||||
index a5f87de..86f3596 100644
|
||||
--- a/arch/arm/mach-ixp4xx/include/mach/gpio.h
|
||||
+++ b/arch/arm/mach-ixp4xx/include/mach/gpio.h
|
||||
@@ -27,47 +27,31 @@
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <mach/hardware.h>
|
||||
+#include <asm-generic/gpio.h> /* cansleep wrappers */
|
||||
|
||||
-static inline int gpio_request(unsigned gpio, const char *label)
|
||||
-{
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static inline void gpio_free(unsigned gpio)
|
||||
-{
|
||||
- might_sleep();
|
||||
-
|
||||
- return;
|
||||
-}
|
||||
-
|
||||
-static inline int gpio_direction_input(unsigned gpio)
|
||||
-{
|
||||
- gpio_line_config(gpio, IXP4XX_GPIO_IN);
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static inline int gpio_direction_output(unsigned gpio, int level)
|
||||
-{
|
||||
- gpio_line_set(gpio, level);
|
||||
- gpio_line_config(gpio, IXP4XX_GPIO_OUT);
|
||||
- return 0;
|
||||
-}
|
||||
+#define NR_BUILTIN_GPIO 16
|
||||
|
||||
static inline int gpio_get_value(unsigned gpio)
|
||||
{
|
||||
- int value;
|
||||
-
|
||||
- gpio_line_get(gpio, &value);
|
||||
-
|
||||
- return value;
|
||||
+ if (gpio < NR_BUILTIN_GPIO)
|
||||
+ {
|
||||
+ int value;
|
||||
+ gpio_line_get(gpio, &value);
|
||||
+ return value;
|
||||
+ }
|
||||
+ else
|
||||
+ return __gpio_get_value(gpio);
|
||||
}
|
||||
|
||||
static inline void gpio_set_value(unsigned gpio, int value)
|
||||
{
|
||||
- gpio_line_set(gpio, value);
|
||||
+ if (gpio < NR_BUILTIN_GPIO)
|
||||
+ gpio_line_set(gpio, value);
|
||||
+ else
|
||||
+ __gpio_set_value(gpio, value);
|
||||
}
|
||||
|
||||
-#include <asm-generic/gpio.h> /* cansleep wrappers */
|
||||
+#define gpio_cansleep __gpio_cansleep
|
||||
|
||||
extern int gpio_to_irq(int gpio);
|
||||
extern int irq_to_gpio(unsigned int irq);
|
||||
--
|
||||
1.7.1
|
|
@ -1,28 +0,0 @@
|
|||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Thu, 1 Sep 2011 05:32:51 +0100
|
||||
Subject: [PATCH 1/2] ia64, gpio: GENERIC_GPIO default must be n
|
||||
|
||||
Since GPIOLIB is optional on ia64, GENERIC_GPIO must not be selected by
|
||||
default. If GPIOLIB is enabled, it will select GENERIC_GPIO.
|
||||
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
---
|
||||
arch/ia64/Kconfig | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
|
||||
index 3ff7785..27489b6 100644
|
||||
--- a/arch/ia64/Kconfig
|
||||
+++ b/arch/ia64/Kconfig
|
||||
@@ -92,7 +92,7 @@ config HAVE_SETUP_PER_CPU_AREA
|
||||
def_bool y
|
||||
|
||||
config GENERIC_GPIO
|
||||
- def_bool y
|
||||
+ bool
|
||||
|
||||
config DMI
|
||||
bool
|
||||
--
|
||||
1.7.5.4
|
||||
|
|
@ -1,66 +0,0 @@
|
|||
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
|
||||
Date: Mon, 26 Sep 2011 19:37:57 +0000
|
||||
Subject: [PATCH] powerpc/ptrace: Fix build with gcc 4.6
|
||||
|
||||
commit e69b742a6793dc5bf16f6eedca534d4bc10d68b2 upstream.
|
||||
|
||||
gcc (rightfully) complains that we are accessing beyond the
|
||||
end of the fpr array (we do, to access the fpscr).
|
||||
|
||||
The only sane thing to do (whether anything in that code can be
|
||||
called remotely sane is debatable) is to special case fpscr and
|
||||
handle it as a separate statement.
|
||||
|
||||
I initially tried to do it it by making the array access conditional
|
||||
to index < PT_FPSCR and using a 3rd else leg but for some reason gcc
|
||||
was unable to understand it and still spewed the warning.
|
||||
|
||||
So I ended up with something a tad more intricated but it seems to
|
||||
build on 32-bit and on 64-bit with and without VSX.
|
||||
|
||||
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
|
||||
---
|
||||
arch/powerpc/kernel/ptrace.c | 18 ++++++++++++++----
|
||||
1 files changed, 14 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
|
||||
index 05b7dd2..18447c4 100644
|
||||
--- a/arch/powerpc/kernel/ptrace.c
|
||||
+++ b/arch/powerpc/kernel/ptrace.c
|
||||
@@ -1497,9 +1497,14 @@ long arch_ptrace(struct task_struct *child, long request,
|
||||
if (index < PT_FPR0) {
|
||||
tmp = ptrace_get_reg(child, (int) index);
|
||||
} else {
|
||||
+ unsigned int fpidx = index - PT_FPR0;
|
||||
+
|
||||
flush_fp_to_thread(child);
|
||||
- tmp = ((unsigned long *)child->thread.fpr)
|
||||
- [TS_FPRWIDTH * (index - PT_FPR0)];
|
||||
+ if (fpidx < (PT_FPSCR - PT_FPR0))
|
||||
+ tmp = ((unsigned long *)child->thread.fpr)
|
||||
+ [fpidx * TS_FPRWIDTH];
|
||||
+ else
|
||||
+ tmp = child->thread.fpscr.val;
|
||||
}
|
||||
ret = put_user(tmp, datalp);
|
||||
break;
|
||||
@@ -1525,9 +1530,14 @@ long arch_ptrace(struct task_struct *child, long request,
|
||||
if (index < PT_FPR0) {
|
||||
ret = ptrace_put_reg(child, index, data);
|
||||
} else {
|
||||
+ unsigned int fpidx = index - PT_FPR0;
|
||||
+
|
||||
flush_fp_to_thread(child);
|
||||
- ((unsigned long *)child->thread.fpr)
|
||||
- [TS_FPRWIDTH * (index - PT_FPR0)] = data;
|
||||
+ if (fpidx < (PT_FPSCR - PT_FPR0))
|
||||
+ ((unsigned long *)child->thread.fpr)
|
||||
+ [fpidx * TS_FPRWIDTH] = data;
|
||||
+ else
|
||||
+ child->thread.fpscr.val = data;
|
||||
ret = 0;
|
||||
}
|
||||
break;
|
||||
--
|
||||
1.7.7.2
|
||||
|
|
@ -18,6 +18,8 @@ rm drivers/staging/ft1000/ft1000-*/*.img
|
|||
|
||||
rm drivers/staging/keucr/init.h
|
||||
|
||||
rm drivers/staging/rtl8192e/r8192E_hwimg.c
|
||||
|
||||
rm drivers/staging/wlags49_h2/ap_*.c
|
||||
rm drivers/staging/wlags49_h2/sta_*.c
|
||||
|
||||
|
|
|
@ -1,99 +0,0 @@
|
|||
From 129d27b59502c85e9427f2c5299083818f77bad2 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Sun, 9 Jan 2011 06:41:52 +0000
|
||||
Subject: [PATCH] module,bug: Add TAINT_OOT_MODULE flag for modules that weren't built in-tree
|
||||
|
||||
This makes it easier to spot out-of-tree modules. We have enough
|
||||
bugs of our own to deal with, before supporting these.
|
||||
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
---
|
||||
include/linux/kernel.h | 1 +
|
||||
kernel/module.c | 5 +++++
|
||||
kernel/panic.c | 2 ++
|
||||
scripts/mod/modpost.c | 7 +++++++
|
||||
4 files changed, 15 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
|
||||
index b6de9a6..7d41307 100644
|
||||
--- a/include/linux/kernel.h
|
||||
+++ b/include/linux/kernel.h
|
||||
@@ -250,6 +250,7 @@ extern enum system_states {
|
||||
#define TAINT_WARN 9
|
||||
#define TAINT_CRAP 10
|
||||
#define TAINT_FIRMWARE_WORKAROUND 11
|
||||
+#define TAINT_OOT_MODULE 12
|
||||
|
||||
extern const char hex_asc[];
|
||||
#define hex_asc_lo(x) hex_asc[((x) & 0x0f)]
|
||||
diff --git a/kernel/module.c b/kernel/module.c
|
||||
index d190664..0549df3 100644
|
||||
--- a/kernel/module.c
|
||||
+++ b/kernel/module.c
|
||||
@@ -2260,6 +2260,9 @@ static int check_modinfo(struct module *mod, struct load_info *info)
|
||||
return -ENOEXEC;
|
||||
}
|
||||
|
||||
+ if (!get_modinfo(info, "intree"))
|
||||
+ add_taint_module(mod, TAINT_OOT_MODULE);
|
||||
+
|
||||
if (get_modinfo(info, "staging")) {
|
||||
add_taint_module(mod, TAINT_CRAP);
|
||||
printk(KERN_WARNING "%s: module is from the staging directory,"
|
||||
@@ -3001,6 +3004,8 @@ static char *module_flags(struct module *mod, char *buf)
|
||||
buf[bx++] = '(';
|
||||
if (mod->taints & (1 << TAINT_PROPRIETARY_MODULE))
|
||||
buf[bx++] = 'P';
|
||||
+ else if (mod->taints & (1 << TAINT_OOT_MODULE))
|
||||
+ buf[bx++] = 'O';
|
||||
if (mod->taints & (1 << TAINT_FORCED_MODULE))
|
||||
buf[bx++] = 'F';
|
||||
if (mod->taints & (1 << TAINT_CRAP))
|
||||
diff --git a/kernel/panic.c b/kernel/panic.c
|
||||
index 4c13b1a..9385d25 100644
|
||||
--- a/kernel/panic.c
|
||||
+++ b/kernel/panic.c
|
||||
@@ -174,6 +174,7 @@ static const struct tnt tnts[] = {
|
||||
{ TAINT_WARN, 'W', ' ' },
|
||||
{ TAINT_CRAP, 'C', ' ' },
|
||||
{ TAINT_FIRMWARE_WORKAROUND, 'I', ' ' },
|
||||
+ { TAINT_OOT_MODULE, 'O', ' ' },
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -191,6 +192,7 @@ static const struct tnt tnts[] = {
|
||||
* 'W' - Taint on warning.
|
||||
* 'C' - modules from drivers/staging are loaded.
|
||||
* 'I' - Working around severe firmware bug.
|
||||
+ * 'O' - Out-of-tree module has been loaded.
|
||||
*
|
||||
* The string is overwritten by the next call to print_tainted().
|
||||
*/
|
||||
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
|
||||
index 33122ca..d0cb92c 100644
|
||||
--- a/scripts/mod/modpost.c
|
||||
+++ b/scripts/mod/modpost.c
|
||||
@@ -1818,6 +1818,12 @@ static void add_header(struct buffer *b, struct module *mod)
|
||||
buf_printf(b, "};\n");
|
||||
}
|
||||
|
||||
+static void add_intree_flag(struct buffer *b, int is_intree)
|
||||
+{
|
||||
+ if (is_intree)
|
||||
+ buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n");
|
||||
+}
|
||||
+
|
||||
static void add_staging_flag(struct buffer *b, const char *name)
|
||||
{
|
||||
static const char *staging_dir = "drivers/staging";
|
||||
@@ -2138,6 +2144,7 @@ int main(int argc, char **argv)
|
||||
buf.pos = 0;
|
||||
|
||||
add_header(&buf, mod);
|
||||
+ add_intree_flag(&buf, !external_module);
|
||||
add_staging_flag(&buf, mod->name);
|
||||
err |= add_versions(&buf, mod);
|
||||
add_depends(&buf, mod, modules);
|
||||
--
|
||||
1.7.4.1
|
||||
|
|
@ -31,10 +31,10 @@ diff --git a/sound/pci/cs46xx/cs46xx_lib.c b/sound/pci/cs46xx/cs46xx_lib.c
|
|||
index 1be96ea..b12b930 100644
|
||||
--- a/sound/pci/cs46xx/cs46xx_lib.c
|
||||
+++ b/sound/pci/cs46xx/cs46xx_lib.c
|
||||
@@ -53,6 +53,7 @@
|
||||
#include <linux/slab.h>
|
||||
@@ -54,6 +54,7 @@
|
||||
#include <linux/gameport.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/export.h>
|
||||
+#include <linux/firmware.h>
|
||||
|
||||
|
||||
|
|
|
@ -1,140 +0,0 @@
|
|||
commit 7409cd1cd554a0bdedfecf2afde58ff468b7045e
|
||||
Author: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
Date: Wed Aug 24 08:54:04 2011 +0200
|
||||
|
||||
ARM i.MX: allow to compile together all i.MX5 based SoCs
|
||||
|
||||
For this we need CONFIG_AUTO_ZRELADDR and CONFIG_ARM_PATCH_PHYS_VIRT.
|
||||
|
||||
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
|
||||
Index: linux-3.1/arch/arm/mach-mx5/Kconfig
|
||||
===================================================================
|
||||
--- linux-3.1.orig/arch/arm/mach-mx5/Kconfig 2011-11-13 14:24:52.090827440 +0100
|
||||
+++ linux-3.1/arch/arm/mach-mx5/Kconfig 2011-11-13 14:24:52.158827438 +0100
|
||||
@@ -1,8 +1,9 @@
|
||||
-if ARCH_MX503 || ARCH_MX51
|
||||
+if ARCH_MX5
|
||||
+
|
||||
# ARCH_MX5/50/53 are left to mark places where prevent multi-soc in single
|
||||
# image. So for most time, SOC_IMX50/51/53 should be used.
|
||||
|
||||
-config ARCH_MX5
|
||||
+config ARCH_MX51
|
||||
bool
|
||||
|
||||
config ARCH_MX50
|
||||
@@ -19,7 +20,6 @@ config SOC_IMX50
|
||||
select ARCH_MXC_IOMUX_V3
|
||||
select ARCH_MXC_AUDMUX_V2
|
||||
select ARCH_HAS_CPUFREQ
|
||||
- select ARCH_MX5
|
||||
select ARCH_MX50
|
||||
|
||||
config SOC_IMX51
|
||||
@@ -30,7 +30,7 @@ config SOC_IMX51
|
||||
select ARCH_MXC_IOMUX_V3
|
||||
select ARCH_MXC_AUDMUX_V2
|
||||
select ARCH_HAS_CPUFREQ
|
||||
- select ARCH_MX5
|
||||
+ select ARCH_MX51
|
||||
|
||||
config SOC_IMX53
|
||||
bool
|
||||
@@ -38,10 +38,8 @@ config SOC_IMX53
|
||||
select ARM_L1_CACHE_SHIFT_6
|
||||
select MXC_TZIC
|
||||
select ARCH_MXC_IOMUX_V3
|
||||
- select ARCH_MX5
|
||||
select ARCH_MX53
|
||||
|
||||
-if ARCH_MX50_SUPPORTED
|
||||
#comment "i.MX50 machines:"
|
||||
|
||||
config MACH_MX50_RDP
|
||||
@@ -57,9 +55,6 @@ config MACH_MX50_RDP
|
||||
Include support for MX50 reference design platform (RDP) board. This
|
||||
includes specific configurations for the board and its peripherals.
|
||||
|
||||
-endif # ARCH_MX50_SUPPORTED
|
||||
-
|
||||
-if ARCH_MX51
|
||||
comment "i.MX51 machines:"
|
||||
|
||||
config MACH_MX51_BABBAGE
|
||||
@@ -168,9 +163,6 @@ config MACH_MX51_EFIKASB
|
||||
Include support for Genesi Efika Smartbook. This includes specific
|
||||
configurations for the board and its peripherals.
|
||||
|
||||
-endif # ARCH_MX51
|
||||
-
|
||||
-if ARCH_MX53_SUPPORTED
|
||||
comment "i.MX53 machines:"
|
||||
|
||||
config MACH_MX53_EVK
|
||||
@@ -222,6 +214,4 @@ config MACH_MX53_ARD
|
||||
Include support for MX53 ARD platform. This includes specific
|
||||
configurations for the board and its peripherals.
|
||||
|
||||
-endif # ARCH_MX53_SUPPORTED
|
||||
-
|
||||
endif
|
||||
Index: linux-3.1/arch/arm/plat-mxc/Kconfig
|
||||
===================================================================
|
||||
--- linux-3.1.orig/arch/arm/plat-mxc/Kconfig 2011-11-13 14:20:20.026839411 +0100
|
||||
+++ linux-3.1/arch/arm/plat-mxc/Kconfig 2011-11-13 14:24:52.158827438 +0100
|
||||
@@ -4,12 +4,6 @@ source "arch/arm/plat-mxc/devices/Kconfi
|
||||
|
||||
menu "Freescale MXC Implementations"
|
||||
|
||||
-config ARCH_MX50_SUPPORTED
|
||||
- bool
|
||||
-
|
||||
-config ARCH_MX53_SUPPORTED
|
||||
- bool
|
||||
-
|
||||
choice
|
||||
prompt "Freescale CPU family:"
|
||||
default ARCH_MX3
|
||||
@@ -34,20 +28,14 @@ config ARCH_MX3
|
||||
help
|
||||
This enables support for systems based on the Freescale i.MX3 family
|
||||
|
||||
-config ARCH_MX503
|
||||
- bool "i.MX50 + i.MX53"
|
||||
- select ARCH_MX50_SUPPORTED
|
||||
- select ARCH_MX53_SUPPORTED
|
||||
+config ARCH_MX5
|
||||
+ bool "i.MX50, i.MX51, i.MX53"
|
||||
+ select AUTO_ZRELADDR
|
||||
+ select ARM_PATCH_PHYS_VIRT
|
||||
help
|
||||
This enables support for machines using Freescale's i.MX50 and i.MX51
|
||||
processors.
|
||||
|
||||
-config ARCH_MX51
|
||||
- bool "i.MX51"
|
||||
- select ARCH_MX51_SUPPORTED
|
||||
- help
|
||||
- This enables support for systems based on the Freescale i.MX51 family
|
||||
-
|
||||
endchoice
|
||||
|
||||
source "arch/arm/mach-imx/Kconfig"
|
||||
Index: linux-3.1/arch/arm/plat-mxc/include/mach/memory.h
|
||||
===================================================================
|
||||
--- linux-3.1.orig/arch/arm/plat-mxc/include/mach/memory.h 2011-11-13 14:20:20.014839413 +0100
|
||||
+++ linux-3.1/arch/arm/plat-mxc/include/mach/memory.h 2011-11-13 14:24:52.158827438 +0100
|
||||
@@ -31,12 +31,6 @@
|
||||
# define PLAT_PHYS_OFFSET MX27_PHYS_OFFSET
|
||||
# elif defined CONFIG_ARCH_MX3
|
||||
# define PLAT_PHYS_OFFSET MX3x_PHYS_OFFSET
|
||||
-# elif defined CONFIG_ARCH_MX50
|
||||
-# define PLAT_PHYS_OFFSET MX50_PHYS_OFFSET
|
||||
-# elif defined CONFIG_ARCH_MX51
|
||||
-# define PLAT_PHYS_OFFSET MX51_PHYS_OFFSET
|
||||
-# elif defined CONFIG_ARCH_MX53
|
||||
-# define PLAT_PHYS_OFFSET MX53_PHYS_OFFSET
|
||||
# endif
|
||||
#endif
|
||||
|
|
@ -1,111 +0,0 @@
|
|||
commit a45adf1ce8012f67fe6014175f666ab2960e0350
|
||||
Author: Arnaud Patard (Rtp) <arnaud.patard@rtp-net.org>
|
||||
Date: Tue Jul 26 16:54:25 2011 +0200
|
||||
|
||||
imx51: add pata device
|
||||
|
||||
Declare the pata device found on mx51
|
||||
|
||||
Signed-off-by: Arnaud Patard <arnaud.patard@rtp-net.org>
|
||||
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
|
||||
diff --git a/arch/arm/mach-mx5/devices-imx51.h b/arch/arm/mach-mx5/devices-imx51.h
|
||||
index e11bc0e..89fe77f 100644
|
||||
--- a/arch/arm/mach-mx5/devices-imx51.h
|
||||
+++ b/arch/arm/mach-mx5/devices-imx51.h
|
||||
@@ -52,3 +52,7 @@ extern const struct imx_mxc_pwm_data imx51_mxc_pwm_data[];
|
||||
extern const struct imx_imx_keypad_data imx51_imx_keypad_data;
|
||||
#define imx51_add_imx_keypad(pdata) \
|
||||
imx_add_imx_keypad(&imx51_imx_keypad_data, pdata)
|
||||
+
|
||||
+extern const struct imx_pata_imx_data imx51_pata_imx_data;
|
||||
+#define imx51_add_pata_imx() \
|
||||
+ imx_add_pata_imx(&imx51_pata_imx_data)
|
||||
diff --git a/arch/arm/plat-mxc/devices/Kconfig b/arch/arm/plat-mxc/devices/Kconfig
|
||||
index bd294ad..c55916c 100644
|
||||
--- a/arch/arm/plat-mxc/devices/Kconfig
|
||||
+++ b/arch/arm/plat-mxc/devices/Kconfig
|
||||
@@ -31,6 +31,9 @@ config IMX_HAVE_PLATFORM_IMX_I2C
|
||||
config IMX_HAVE_PLATFORM_IMX_KEYPAD
|
||||
bool
|
||||
|
||||
+config IMX_HAVE_PLATFORM_PATA_IMX
|
||||
+ bool
|
||||
+
|
||||
config IMX_HAVE_PLATFORM_IMX_SSI
|
||||
bool
|
||||
|
||||
diff --git a/arch/arm/plat-mxc/devices/Makefile b/arch/arm/plat-mxc/devices/Makefile
|
||||
index b41bf97..a093b45 100644
|
||||
--- a/arch/arm/plat-mxc/devices/Makefile
|
||||
+++ b/arch/arm/plat-mxc/devices/Makefile
|
||||
@@ -10,6 +10,7 @@ obj-y += platform-imx-dma.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_FB) += platform-imx-fb.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_I2C) += platform-imx-i2c.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_KEYPAD) += platform-imx-keypad.o
|
||||
+obj-$(CONFIG_IMX_HAVE_PLATFORM_PATA_IMX) += platform-pata_imx.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_SSI) += platform-imx-ssi.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_UART) += platform-imx-uart.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_UDC) += platform-imx_udc.o
|
||||
diff --git a/arch/arm/plat-mxc/devices/platform-pata_imx.c b/arch/arm/plat-mxc/devices/platform-pata_imx.c
|
||||
new file mode 100644
|
||||
index 0000000..c1cbaf9
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/plat-mxc/devices/platform-pata_imx.c
|
||||
@@ -0,0 +1,38 @@
|
||||
+/*
|
||||
+ * This program is free software; you can redistribute it and/or modify it under
|
||||
+ * the terms of the GNU General Public License version 2 as published by the
|
||||
+ * Free Software Foundation.
|
||||
+ */
|
||||
+#include <mach/hardware.h>
|
||||
+#include <mach/devices-common.h>
|
||||
+
|
||||
+#define imx_pata_imx_data_entry_single(soc) \
|
||||
+ { \
|
||||
+ .iobase = soc ## _ATA_BASE_ADDR, \
|
||||
+ .irq = soc ## _MXC_INT_ATA, \
|
||||
+ }
|
||||
+
|
||||
+#ifdef CONFIG_SOC_IMX51
|
||||
+const struct imx_pata_imx_data imx51_pata_imx_data __initconst =
|
||||
+ imx_pata_imx_data_entry_single(MX51);
|
||||
+#endif /* ifdef CONFIG_SOC_IMX51 */
|
||||
+
|
||||
+struct platform_device *__init imx_add_pata_imx(
|
||||
+ const struct imx_pata_imx_data *data)
|
||||
+{
|
||||
+ struct resource res[] = {
|
||||
+ {
|
||||
+ .start = data->iobase,
|
||||
+ .end = data->iobase + SZ_16K - 1,
|
||||
+ .flags = IORESOURCE_MEM,
|
||||
+ },
|
||||
+ {
|
||||
+ .start = data->irq,
|
||||
+ .end = data->irq,
|
||||
+ .flags = IORESOURCE_IRQ,
|
||||
+ },
|
||||
+ };
|
||||
+ return imx_add_platform_device("pata_imx", -1,
|
||||
+ res, ARRAY_SIZE(res), NULL, 0);
|
||||
+}
|
||||
+
|
||||
diff --git a/arch/arm/plat-mxc/include/mach/devices-common.h b/arch/arm/plat-mxc/include/mach/devices-common.h
|
||||
index 524538a..1b76c67 100644
|
||||
--- a/arch/arm/plat-mxc/include/mach/devices-common.h
|
||||
+++ b/arch/arm/plat-mxc/include/mach/devices-common.h
|
||||
@@ -251,6 +251,13 @@ struct platform_device *__init imx_add_mxc_nand(
|
||||
const struct imx_mxc_nand_data *data,
|
||||
const struct mxc_nand_platform_data *pdata);
|
||||
|
||||
+struct imx_pata_imx_data {
|
||||
+ resource_size_t iobase;
|
||||
+ resource_size_t irq;
|
||||
+};
|
||||
+struct platform_device *__init imx_add_pata_imx(
|
||||
+ const struct imx_pata_imx_data *data);
|
||||
+
|
||||
struct imx_mxc_pwm_data {
|
||||
int id;
|
||||
resource_size_t iobase;
|
|
@ -1,34 +0,0 @@
|
|||
commit 5bc59bff8c3ee0971fbddb8d6885cb5f30f91c5a
|
||||
Author: Arnaud Patard (Rtp) <arnaud.patard@rtp-net.org>
|
||||
Date: Tue Jul 26 16:54:26 2011 +0200
|
||||
|
||||
imx51: add pata clock
|
||||
|
||||
Define the clock used by the imx51 pata device.
|
||||
|
||||
Signed-off-by: Arnaud Patard <arnaud.patard@rtp-net.org>
|
||||
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
|
||||
diff --git a/arch/arm/mach-mx5/clock-mx51-mx53.c b/arch/arm/mach-mx5/clock-mx51-mx53.c
|
||||
index 7f20308..b653133 100644
|
||||
--- a/arch/arm/mach-mx5/clock-mx51-mx53.c
|
||||
+++ b/arch/arm/mach-mx5/clock-mx51-mx53.c
|
||||
@@ -1414,6 +1414,10 @@ DEFINE_CLOCK(ipu_di0_clk, 0, MXC_CCM_CCGR6, MXC_CCM_CCGRx_CG5_OFFSET,
|
||||
DEFINE_CLOCK(ipu_di1_clk, 0, MXC_CCM_CCGR6, MXC_CCM_CCGRx_CG6_OFFSET,
|
||||
NULL, NULL, &pll3_sw_clk, NULL);
|
||||
|
||||
+/* PATA */
|
||||
+DEFINE_CLOCK(pata_clk, 0, MXC_CCM_CCGR4, MXC_CCM_CCGRx_CG0_OFFSET,
|
||||
+ NULL, NULL, &ipg_clk, &spba_clk);
|
||||
+
|
||||
#define _REGISTER_CLOCK(d, n, c) \
|
||||
{ \
|
||||
.dev_id = d, \
|
||||
@@ -1470,6 +1474,7 @@ static struct clk_lookup mx51_lookups[] = {
|
||||
_REGISTER_CLOCK("imx-ipuv3", "di0", ipu_di0_clk)
|
||||
_REGISTER_CLOCK("imx-ipuv3", "di1", ipu_di1_clk)
|
||||
_REGISTER_CLOCK(NULL, "gpc_dvfs", gpc_dvfs_clk)
|
||||
+ _REGISTER_CLOCK("pata_imx", NULL, pata_clk)
|
||||
};
|
||||
|
||||
static struct clk_lookup mx53_lookups[] = {
|
|
@ -1,36 +0,0 @@
|
|||
commit d8f4059bf96d9bc1b8d2003602404f3d011ac9f2
|
||||
Author: Arnaud Patard (Rtp) <arnaud.patard@rtp-net.org>
|
||||
Date: Tue Jul 26 16:54:27 2011 +0200
|
||||
|
||||
imx: efika: Enable pata.
|
||||
|
||||
Enable pata support on efika mx/sb platforms.
|
||||
|
||||
Signed-off-by: Arnaud Patard <arnaud.patard@rtp-net.org>
|
||||
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
|
||||
diff --git a/arch/arm/mach-mx5/Kconfig b/arch/arm/mach-mx5/Kconfig
|
||||
index b4e7c58..28b94e0 100644
|
||||
--- a/arch/arm/mach-mx5/Kconfig
|
||||
+++ b/arch/arm/mach-mx5/Kconfig
|
||||
@@ -147,6 +147,7 @@ config MX51_EFIKA_COMMON
|
||||
bool
|
||||
select SOC_IMX51
|
||||
select IMX_HAVE_PLATFORM_IMX_UART
|
||||
+ select IMX_HAVE_PLATFORM_PATA_IMX
|
||||
select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
|
||||
select IMX_HAVE_PLATFORM_SPI_IMX
|
||||
select MXC_ULPI if USB_ULPI
|
||||
diff --git a/arch/arm/mach-mx5/mx51_efika.c b/arch/arm/mach-mx5/mx51_efika.c
|
||||
index 4435e03..31c152e 100644
|
||||
--- a/arch/arm/mach-mx5/mx51_efika.c
|
||||
+++ b/arch/arm/mach-mx5/mx51_efika.c
|
||||
@@ -627,6 +627,8 @@ void __init efika_board_common_init(void)
|
||||
ARRAY_SIZE(mx51_efika_spi_board_info));
|
||||
imx51_add_ecspi(0, &mx51_efika_spi_pdata);
|
||||
|
||||
+ imx51_add_pata_imx();
|
||||
+
|
||||
#if defined(CONFIG_CPU_FREQ_IMX)
|
||||
get_cpu_op = mx51_get_cpu_op;
|
||||
#endif
|
|
@ -1,258 +0,0 @@
|
|||
commit 97915bdf3c1833e7855272788a24b191a17c67f4
|
||||
Author: Richard Zhu <richard.zhu@linaro.org>
|
||||
Date: Wed Sep 28 15:41:53 2011 +0800
|
||||
|
||||
AHCI Add the AHCI SATA feature on the MX53 platforms
|
||||
|
||||
Signed-off-by: Richard Zhu <richard.zhu@linaro.org>
|
||||
Tested-by: Hector Oron Martinez <hector.oron@gmail.com>
|
||||
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
|
||||
diff --git a/arch/arm/mach-mx5/clock-mx51-mx53.c b/arch/arm/mach-mx5/clock-mx51-mx53.c
|
||||
index f7bf996..1ef7e97 100644
|
||||
--- a/arch/arm/mach-mx5/clock-mx51-mx53.c
|
||||
+++ b/arch/arm/mach-mx5/clock-mx51-mx53.c
|
||||
@@ -1401,6 +1401,22 @@ static struct clk esdhc4_mx53_clk = {
|
||||
.secondary = &esdhc4_ipg_clk,
|
||||
};
|
||||
|
||||
+static struct clk sata_clk = {
|
||||
+ .parent = &ipg_clk,
|
||||
+ .enable = _clk_max_enable,
|
||||
+ .enable_reg = MXC_CCM_CCGR4,
|
||||
+ .enable_shift = MXC_CCM_CCGRx_CG1_OFFSET,
|
||||
+ .disable = _clk_max_disable,
|
||||
+};
|
||||
+
|
||||
+static struct clk ahci_phy_clk = {
|
||||
+ .parent = &usb_phy1_clk,
|
||||
+};
|
||||
+
|
||||
+static struct clk ahci_dma_clk = {
|
||||
+ .parent = &ahb_clk,
|
||||
+};
|
||||
+
|
||||
DEFINE_CLOCK(mipi_esc_clk, 0, MXC_CCM_CCGR4, MXC_CCM_CCGRx_CG5_OFFSET, NULL, NULL, NULL, &pll2_sw_clk);
|
||||
DEFINE_CLOCK(mipi_hsc2_clk, 0, MXC_CCM_CCGR4, MXC_CCM_CCGRx_CG4_OFFSET, NULL, NULL, &mipi_esc_clk, &pll2_sw_clk);
|
||||
DEFINE_CLOCK(mipi_hsc1_clk, 0, MXC_CCM_CCGR4, MXC_CCM_CCGRx_CG3_OFFSET, NULL, NULL, &mipi_hsc2_clk, &pll2_sw_clk);
|
||||
@@ -1507,6 +1523,9 @@ static struct clk_lookup mx53_lookups[] = {
|
||||
_REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk)
|
||||
_REGISTER_CLOCK("imx-ssi.2", NULL, ssi3_clk)
|
||||
_REGISTER_CLOCK("imx-keypad", NULL, dummy_clk)
|
||||
+ _REGISTER_CLOCK("imx53-ahci.0", "ahci", sata_clk)
|
||||
+ _REGISTER_CLOCK("imx53-ahci.0", "ahci_phy", ahci_phy_clk)
|
||||
+ _REGISTER_CLOCK("imx53-ahci.0", "ahci_dma", ahci_dma_clk)
|
||||
};
|
||||
|
||||
static void clk_tree_init(void)
|
||||
diff --git a/arch/arm/mach-mx5/devices-imx53.h b/arch/arm/mach-mx5/devices-imx53.h
|
||||
index c27fe8b..1ab399e 100644
|
||||
--- a/arch/arm/mach-mx5/devices-imx53.h
|
||||
+++ b/arch/arm/mach-mx5/devices-imx53.h
|
||||
@@ -40,3 +40,5 @@ extern const struct imx_imx_ssi_data imx53_imx_ssi_data[];
|
||||
extern const struct imx_imx_keypad_data imx53_imx_keypad_data;
|
||||
#define imx53_add_imx_keypad(pdata) \
|
||||
imx_add_imx_keypad(&imx53_imx_keypad_data, pdata)
|
||||
+
|
||||
+extern struct platform_device *__init imx53_add_ahci_imx(void);
|
||||
diff --git a/arch/arm/plat-mxc/devices/Kconfig b/arch/arm/plat-mxc/devices/Kconfig
|
||||
index bd294ad..f63887b 100644
|
||||
--- a/arch/arm/plat-mxc/devices/Kconfig
|
||||
+++ b/arch/arm/plat-mxc/devices/Kconfig
|
||||
@@ -76,3 +76,7 @@ config IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
|
||||
|
||||
config IMX_HAVE_PLATFORM_SPI_IMX
|
||||
bool
|
||||
+
|
||||
+config IMX_HAVE_PLATFORM_AHCI
|
||||
+ bool
|
||||
+ default y if ARCH_MX53
|
||||
diff --git a/arch/arm/plat-mxc/devices/Makefile b/arch/arm/plat-mxc/devices/Makefile
|
||||
index b41bf97..e858ad9 100644
|
||||
--- a/arch/arm/plat-mxc/devices/Makefile
|
||||
+++ b/arch/arm/plat-mxc/devices/Makefile
|
||||
@@ -25,3 +25,4 @@ obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_RTC) += platform-mxc_rtc.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_W1) += platform-mxc_w1.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX) += platform-sdhci-esdhc-imx.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_SPI_IMX) += platform-spi_imx.o
|
||||
+obj-$(CONFIG_IMX_HAVE_PLATFORM_AHCI) += platform-ahci-imx.o
|
||||
diff --git a/arch/arm/plat-mxc/devices/platform-ahci-imx.c b/arch/arm/plat-mxc/devices/platform-ahci-imx.c
|
||||
new file mode 100644
|
||||
index 0000000..d8a56ae
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/plat-mxc/devices/platform-ahci-imx.c
|
||||
@@ -0,0 +1,156 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2011 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
+ */
|
||||
+
|
||||
+/*
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 2 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+
|
||||
+ * This program is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+
|
||||
+ * You should have received a copy of the GNU General Public License along
|
||||
+ * with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/io.h>
|
||||
+#include <linux/clk.h>
|
||||
+#include <linux/err.h>
|
||||
+#include <linux/device.h>
|
||||
+#include <linux/dma-mapping.h>
|
||||
+#include <asm/sizes.h>
|
||||
+#include <mach/hardware.h>
|
||||
+#include <mach/devices-common.h>
|
||||
+
|
||||
+#define imx_ahci_imx_data_entry_single(soc, _devid) \
|
||||
+ { \
|
||||
+ .devid = _devid, \
|
||||
+ .iobase = soc ## _SATA_BASE_ADDR, \
|
||||
+ .irq = soc ## _INT_SATA, \
|
||||
+ }
|
||||
+
|
||||
+#ifdef CONFIG_SOC_IMX53
|
||||
+const struct imx_ahci_imx_data imx53_ahci_imx_data __initconst =
|
||||
+ imx_ahci_imx_data_entry_single(MX53, "imx53-ahci");
|
||||
+#endif
|
||||
+
|
||||
+enum {
|
||||
+ HOST_CAP = 0x00,
|
||||
+ HOST_CAP_SSS = (1 << 27), /* Staggered Spin-up */
|
||||
+ HOST_PORTS_IMPL = 0x0c,
|
||||
+ HOST_TIMER1MS = 0xe0, /* Timer 1-ms */
|
||||
+};
|
||||
+
|
||||
+static struct clk *sata_clk, *sata_ref_clk;
|
||||
+
|
||||
+/* AHCI module Initialization, if return 0, initialization is successful. */
|
||||
+static int imx_sata_init(struct device *dev, void __iomem *addr)
|
||||
+{
|
||||
+ u32 tmpdata;
|
||||
+ int ret = 0;
|
||||
+ struct clk *clk;
|
||||
+
|
||||
+ sata_clk = clk_get(dev, "ahci");
|
||||
+ if (IS_ERR(sata_clk)) {
|
||||
+ dev_err(dev, "no sata clock.\n");
|
||||
+ return PTR_ERR(sata_clk);
|
||||
+ }
|
||||
+ ret = clk_enable(sata_clk);
|
||||
+ if (ret) {
|
||||
+ dev_err(dev, "can't enable sata clock.\n");
|
||||
+ goto put_sata_clk;
|
||||
+ }
|
||||
+
|
||||
+ /* Get the AHCI SATA PHY CLK */
|
||||
+ sata_ref_clk = clk_get(dev, "ahci_phy");
|
||||
+ if (IS_ERR(sata_ref_clk)) {
|
||||
+ dev_err(dev, "no sata ref clock.\n");
|
||||
+ ret = PTR_ERR(sata_ref_clk);
|
||||
+ goto release_sata_clk;
|
||||
+ }
|
||||
+ ret = clk_enable(sata_ref_clk);
|
||||
+ if (ret) {
|
||||
+ dev_err(dev, "can't enable sata ref clock.\n");
|
||||
+ goto put_sata_ref_clk;
|
||||
+ }
|
||||
+
|
||||
+ /* Get the AHB clock rate, and configure the TIMER1MS reg later */
|
||||
+ clk = clk_get(dev, "ahci_dma");
|
||||
+ if (IS_ERR(clk)) {
|
||||
+ dev_err(dev, "no dma clock.\n");
|
||||
+ ret = PTR_ERR(clk);
|
||||
+ goto release_sata_ref_clk;
|
||||
+ }
|
||||
+ tmpdata = clk_get_rate(clk) / 1000;
|
||||
+ clk_put(clk);
|
||||
+
|
||||
+ writel(tmpdata, addr + HOST_TIMER1MS);
|
||||
+
|
||||
+ tmpdata = readl(addr + HOST_CAP);
|
||||
+ if (!(tmpdata & HOST_CAP_SSS)) {
|
||||
+ tmpdata |= HOST_CAP_SSS;
|
||||
+ writel(tmpdata, addr + HOST_CAP);
|
||||
+ }
|
||||
+
|
||||
+ if (!(readl(addr + HOST_PORTS_IMPL) & 0x1))
|
||||
+ writel((readl(addr + HOST_PORTS_IMPL) | 0x1),
|
||||
+ addr + HOST_PORTS_IMPL);
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+release_sata_ref_clk:
|
||||
+ clk_disable(sata_ref_clk);
|
||||
+put_sata_ref_clk:
|
||||
+ clk_put(sata_ref_clk);
|
||||
+release_sata_clk:
|
||||
+ clk_disable(sata_clk);
|
||||
+put_sata_clk:
|
||||
+ clk_put(sata_clk);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static void imx_sata_exit(struct device *dev)
|
||||
+{
|
||||
+ clk_disable(sata_ref_clk);
|
||||
+ clk_put(sata_ref_clk);
|
||||
+
|
||||
+ clk_disable(sata_clk);
|
||||
+ clk_put(sata_clk);
|
||||
+
|
||||
+}
|
||||
+struct platform_device *__init imx_add_ahci_imx(
|
||||
+ const struct imx_ahci_imx_data *data,
|
||||
+ const struct ahci_platform_data *pdata)
|
||||
+{
|
||||
+ struct resource res[] = {
|
||||
+ {
|
||||
+ .start = data->iobase,
|
||||
+ .end = data->iobase + SZ_4K - 1,
|
||||
+ .flags = IORESOURCE_MEM,
|
||||
+ }, {
|
||||
+ .start = data->irq,
|
||||
+ .end = data->irq,
|
||||
+ .flags = IORESOURCE_IRQ,
|
||||
+ },
|
||||
+ };
|
||||
+
|
||||
+ return imx_add_platform_device_dmamask(data->devid, 0,
|
||||
+ res, ARRAY_SIZE(res),
|
||||
+ pdata, sizeof(*pdata), DMA_BIT_MASK(32));
|
||||
+}
|
||||
+
|
||||
+struct platform_device *__init imx53_add_ahci_imx(void)
|
||||
+{
|
||||
+ struct ahci_platform_data pdata = {
|
||||
+ .init = imx_sata_init,
|
||||
+ .exit = imx_sata_exit,
|
||||
+ };
|
||||
+
|
||||
+ return imx_add_ahci_imx(&imx53_ahci_imx_data, &pdata);
|
||||
+}
|
||||
diff --git a/arch/arm/plat-mxc/include/mach/devices-common.h b/arch/arm/plat-mxc/include/mach/devices-common.h
|
||||
index 524538a..f04e063 100644
|
||||
--- a/arch/arm/plat-mxc/include/mach/devices-common.h
|
||||
+++ b/arch/arm/plat-mxc/include/mach/devices-common.h
|
||||
@@ -301,3 +301,13 @@ struct platform_device *__init imx_add_spi_imx(
|
||||
struct platform_device *imx_add_imx_dma(void);
|
||||
struct platform_device *imx_add_imx_sdma(char *name,
|
||||
resource_size_t iobase, int irq, struct sdma_platform_data *pdata);
|
||||
+
|
||||
+#include <linux/ahci_platform.h>
|
||||
+struct imx_ahci_imx_data {
|
||||
+ const char *devid;
|
||||
+ resource_size_t iobase;
|
||||
+ resource_size_t irq;
|
||||
+};
|
||||
+struct platform_device *__init imx_add_ahci_imx(
|
||||
+ const struct imx_ahci_imx_data *data,
|
||||
+ const struct ahci_platform_data *pdata);
|
|
@ -1,85 +0,0 @@
|
|||
commit 904c04feaf13ed58790a34a0b11cd7b885b94b4b
|
||||
Author: Richard Zhu <richard.zhu@linaro.org>
|
||||
Date: Wed Sep 28 15:41:54 2011 +0800
|
||||
|
||||
[libata] ahci_platform: Add the board_ids and pi refer to different features
|
||||
|
||||
On imx53 AHCI, soft reset fails with IPMS set when PMP
|
||||
is enabled but SATA HDD/ODD is connected to SATA port,
|
||||
do soft reset again to port 0.
|
||||
So the 'ahci_pmp_retry_srst_ops' is required when imx53
|
||||
ahci is present.
|
||||
|
||||
Signed-off-by: Richard Zhu <richard.zhu@linaro.org>
|
||||
Acked-by: Eric Miao <eric.miao@linaro.org>
|
||||
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
|
||||
|
||||
diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c
|
||||
index 6fef1fa..c03277d 100644
|
||||
--- a/drivers/ata/ahci_platform.c
|
||||
+++ b/drivers/ata/ahci_platform.c
|
||||
@@ -23,6 +23,41 @@
|
||||
#include <linux/ahci_platform.h>
|
||||
#include "ahci.h"
|
||||
|
||||
+enum ahci_type {
|
||||
+ AHCI, /* standard platform ahci */
|
||||
+ IMX53_AHCI, /* ahci on i.mx53 */
|
||||
+};
|
||||
+
|
||||
+static struct platform_device_id ahci_devtype[] = {
|
||||
+ {
|
||||
+ .name = "ahci",
|
||||
+ .driver_data = AHCI,
|
||||
+ }, {
|
||||
+ .name = "imx53-ahci",
|
||||
+ .driver_data = IMX53_AHCI,
|
||||
+ }, {
|
||||
+ /* sentinel */
|
||||
+ }
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(platform, ahci_devtype);
|
||||
+
|
||||
+
|
||||
+static const struct ata_port_info ahci_port_info[] = {
|
||||
+ /* by features */
|
||||
+ [AHCI] = {
|
||||
+ .flags = AHCI_FLAG_COMMON,
|
||||
+ .pio_mask = ATA_PIO4,
|
||||
+ .udma_mask = ATA_UDMA6,
|
||||
+ .port_ops = &ahci_ops,
|
||||
+ },
|
||||
+ [IMX53_AHCI] = {
|
||||
+ .flags = AHCI_FLAG_COMMON,
|
||||
+ .pio_mask = ATA_PIO4,
|
||||
+ .udma_mask = ATA_UDMA6,
|
||||
+ .port_ops = &ahci_pmp_retry_srst_ops,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
static struct scsi_host_template ahci_platform_sht = {
|
||||
AHCI_SHT("ahci_platform"),
|
||||
};
|
||||
@@ -31,12 +66,8 @@ static int __init ahci_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
struct ahci_platform_data *pdata = dev->platform_data;
|
||||
- struct ata_port_info pi = {
|
||||
- .flags = AHCI_FLAG_COMMON,
|
||||
- .pio_mask = ATA_PIO4,
|
||||
- .udma_mask = ATA_UDMA6,
|
||||
- .port_ops = &ahci_ops,
|
||||
- };
|
||||
+ const struct platform_device_id *id = platform_get_device_id(pdev);
|
||||
+ struct ata_port_info pi = ahci_port_info[id->driver_data];
|
||||
const struct ata_port_info *ppi[] = { &pi, NULL };
|
||||
struct ahci_host_priv *hpriv;
|
||||
struct ata_host *host;
|
||||
@@ -177,6 +208,7 @@ static struct platform_driver ahci_driver = {
|
||||
.name = "ahci",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
+ .id_table = ahci_devtype,
|
||||
};
|
||||
|
||||
static int __init ahci_init(void)
|
|
@ -1,21 +0,0 @@
|
|||
commit e97e303d801f9ab74590ff5d56e614e811efe98b
|
||||
Author: Richard Zhu <richard.zhu@linaro.org>
|
||||
Date: Wed Sep 28 15:41:55 2011 +0800
|
||||
|
||||
MX53 Enable the AHCI SATA on MX53 ARD board
|
||||
|
||||
Signed-off-by: Richard Zhu <richard.zhu@linaro.org>
|
||||
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
|
||||
diff --git a/arch/arm/mach-mx5/board-mx53_ard.c b/arch/arm/mach-mx5/board-mx53_ard.c
|
||||
index 76a67c4..ef2039e 100644
|
||||
--- a/arch/arm/mach-mx5/board-mx53_ard.c
|
||||
+++ b/arch/arm/mach-mx5/board-mx53_ard.c
|
||||
@@ -234,6 +234,7 @@ static void __init mx53_ard_board_init(void)
|
||||
imx53_add_imx_i2c(1, &mx53_ard_i2c2_data);
|
||||
imx53_add_imx_i2c(2, &mx53_ard_i2c3_data);
|
||||
imx_add_gpio_keys(&ard_button_data);
|
||||
+ imx53_add_ahci_imx();
|
||||
}
|
||||
|
||||
static void __init mx53_ard_timer_init(void)
|
|
@ -1,21 +0,0 @@
|
|||
commit 0661b82c94925fb47708165eaf78cf380b31ffb3
|
||||
Author: Richard Zhu <richard.zhu@linaro.org>
|
||||
Date: Wed Sep 28 15:41:56 2011 +0800
|
||||
|
||||
MX53 Enable the AHCI SATA on MX53 LOCO board
|
||||
|
||||
Signed-off-by: Richard Zhu <richard.zhu@linaro.org>
|
||||
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
|
||||
diff --git a/arch/arm/mach-mx5/board-mx53_loco.c b/arch/arm/mach-mx5/board-mx53_loco.c
|
||||
index 4e1d51d..940aac9 100644
|
||||
--- a/arch/arm/mach-mx5/board-mx53_loco.c
|
||||
+++ b/arch/arm/mach-mx5/board-mx53_loco.c
|
||||
@@ -273,6 +273,7 @@ static void __init mx53_loco_board_init(void)
|
||||
imx53_add_sdhci_esdhc_imx(2, &mx53_loco_sd3_data);
|
||||
imx_add_gpio_keys(&loco_button_data);
|
||||
gpio_led_register_device(-1, &mx53loco_leds_data);
|
||||
+ imx53_add_ahci_imx();
|
||||
}
|
||||
|
||||
static void __init mx53_loco_timer_init(void)
|
|
@ -1,50 +0,0 @@
|
|||
commit d870ea1d6bc5057f2599416655b42ab192dae6d0
|
||||
Author: Richard Zhu <richard.zhu@linaro.org>
|
||||
Date: Wed Sep 28 15:41:57 2011 +0800
|
||||
|
||||
MX53 Enable the AHCI SATA on MX53 SMD board
|
||||
|
||||
Signed-off-by: Richard Zhu <richard.zhu@linaro.org>
|
||||
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
|
||||
diff --git a/arch/arm/mach-mx5/board-mx53_smd.c b/arch/arm/mach-mx5/board-mx53_smd.c
|
||||
index bc02894..efcab68 100644
|
||||
--- a/arch/arm/mach-mx5/board-mx53_smd.c
|
||||
+++ b/arch/arm/mach-mx5/board-mx53_smd.c
|
||||
@@ -35,6 +35,7 @@
|
||||
#include "devices-imx53.h"
|
||||
|
||||
#define SMD_FEC_PHY_RST IMX_GPIO_NR(7, 6)
|
||||
+#define MX53_SMD_SATA_PWR_EN IMX_GPIO_NR(3, 3)
|
||||
|
||||
static iomux_v3_cfg_t mx53_smd_pads[] = {
|
||||
MX53_PAD_CSI0_DAT10__UART1_TXD_MUX,
|
||||
@@ -111,6 +112,19 @@ static const struct imxi2c_platform_data mx53_smd_i2c_data __initconst = {
|
||||
.bitrate = 100000,
|
||||
};
|
||||
|
||||
+static inline void mx53_smd_ahci_pwr_on(void)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ /* Enable SATA PWR */
|
||||
+ ret = gpio_request_one(MX53_SMD_SATA_PWR_EN,
|
||||
+ GPIOF_DIR_OUT | GPIOF_INIT_HIGH, "ahci-sata-pwr");
|
||||
+ if (ret) {
|
||||
+ pr_err("failed to enable SATA_PWR_EN: %d\n", ret);
|
||||
+ return;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void __init mx53_smd_board_init(void)
|
||||
{
|
||||
imx53_soc_init();
|
||||
@@ -125,6 +139,8 @@ static void __init mx53_smd_board_init(void)
|
||||
imx53_add_sdhci_esdhc_imx(0, NULL);
|
||||
imx53_add_sdhci_esdhc_imx(1, NULL);
|
||||
imx53_add_sdhci_esdhc_imx(2, NULL);
|
||||
+ mx53_smd_ahci_pwr_on();
|
||||
+ imx53_add_ahci_imx();
|
||||
}
|
||||
|
||||
static void __init mx53_smd_timer_init(void)
|
|
@ -1,56 +0,0 @@
|
|||
Subject: [v2] libertas: prioritize usb8388_olpc.bin firmware on OLPC machines
|
||||
Date: Thu, 04 Aug 2011 23:06:52 -0000
|
||||
From: Andres Salomon <dilinger@queued.net>
|
||||
|
||||
Normally, the v9 firmware will be loaded if it's available. However, on
|
||||
OLPC XO-1 machines, the olpc-specific firmware supports extra functionality.
|
||||
This makes the libertas driver attempt to load the custom firmware first
|
||||
if the machine is an OLPC machine; if that fails (or it's not an OLPC
|
||||
machine), fall back to attempting to load the other firmwares.
|
||||
|
||||
Signed-off-by: Andres Salomon <dilinger@queued.net>
|
||||
Signed-off-by: Dan Williams <dcbw@redhat.com>
|
||||
[bwh: Add "libertas/" to path]
|
||||
---
|
||||
drivers/net/wireless/libertas/if_usb.c | 21 +++++++++++++++++++++
|
||||
1 files changed, 21 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c
|
||||
index b5acc39..527cb11 100644
|
||||
--- a/drivers/net/wireless/libertas/if_usb.c
|
||||
+++ b/drivers/net/wireless/libertas/if_usb.c
|
||||
@@ -973,6 +973,23 @@ static const struct {
|
||||
{ MODEL_8682, "libertas/usb8682.bin" }
|
||||
};
|
||||
|
||||
+#ifdef CONFIG_OLPC
|
||||
+
|
||||
+static int try_olpc_fw(struct if_usb_card *cardp)
|
||||
+{
|
||||
+ int retval = -ENOENT;
|
||||
+
|
||||
+ /* try the OLPC firmware first; fall back to fw_table list */
|
||||
+ if (machine_is_olpc() && cardp->model == MODEL_8388)
|
||||
+ retval = request_firmware(&cardp->fw, "libertas/usb8388_olpc.bin",
|
||||
+ &cardp->udev->dev);
|
||||
+ return retval;
|
||||
+}
|
||||
+
|
||||
+#else
|
||||
+static int try_olpc_fw(struct if_usb_card *cardp) { return -ENOENT; }
|
||||
+#endif /* !CONFIG_OLPC */
|
||||
+
|
||||
static int get_fw(struct if_usb_card *cardp, const char *fwname)
|
||||
{
|
||||
int i;
|
||||
@@ -981,6 +998,10 @@ static int get_fw(struct if_usb_card *cardp, const char *fwname)
|
||||
if (fwname)
|
||||
return request_firmware(&cardp->fw, fwname, &cardp->udev->dev);
|
||||
|
||||
+ /* Handle OLPC firmware */
|
||||
+ if (try_olpc_fw(cardp) == 0)
|
||||
+ return 0;
|
||||
+
|
||||
/* Otherwise search for firmware to use */
|
||||
for (i = 0; i < ARRAY_SIZE(fw_table); i++) {
|
||||
if (fw_table[i].model != cardp->model)
|
|
@ -22,7 +22,6 @@
|
|||
+ bugfix/powerpc/lpar-console.patch
|
||||
|
||||
+ debian/sysrq-mask.patch
|
||||
+ debian/module-bug-Add-TAINT_OOT_MODULE-flag.patch
|
||||
|
||||
+ debian/arch-sh4-fix-uimage-build.patch
|
||||
|
||||
|
@ -40,36 +39,13 @@
|
|||
+ features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch
|
||||
+ debian/cgroups-Document-the-Debian-memory-resource-controll.patch
|
||||
+ bugfix/ia64/nouveau-ACPI-support-is-dependent-on-X86.patch
|
||||
+ bugfix/ia64/ia64-gpio-GENERIC_GPIO-default-must-be-n.patch
|
||||
+ features/x86/libertas-prioritize-usb8388_olpc.bin-firmware-on-OLPC-machines.patch
|
||||
+ bugfix/arm/ARM-ixp4xx-gpiolib-support.patch
|
||||
+ bugfix/all/ark3116-initialisation-fix.patch
|
||||
+ bugfix/all/xfs-fix-memory-corruption-in-xfs_readlink.patch
|
||||
+ bugfix/all/xfs-fix-memory-corruption-in-xfs_readlink-2.patch
|
||||
+ bugfix/all/oom-fix-integer-overflow-of-points-in-oom_badness.patch
|
||||
+ bugfix/alpha/alpha-wire-up-accept4-syscall.patch
|
||||
+ bugfix/all/iwlagn-fix-modinfo-display-for-135-ucode.patch
|
||||
+ bugfix/powerpc/powerpc-ptrace-Fix-build-with-gcc-4.6.patch
|
||||
+ bugfix/arm/ARM-add-io-read-write-16-32-be-functions.patch
|
||||
+ bugfix/all/cifs-freezer-add-wait_event_freezekillable-and-have-.patch
|
||||
+ bugfix/all/CIFS-Fixup-trivial-checkpatch-warning.patch
|
||||
+ bugfix/all/Fix-build-break-when-freezer-not-configured.patch
|
||||
+ bugfix/all/PM-Freezer-Reimplement-wait_event_freezekillable-usi.patch
|
||||
+ bugfix/all/hfs-fix-hfs_find_init-sb-ext_tree-NULL-ptr-oops.patch
|
||||
+ bugfix/all/vmscan-fix-shrinker-callback-bug-in-fs-super.c.patch
|
||||
+ bugfix/all/block-Always-check-length-of-all-iov-entries-in-blk_.patch
|
||||
+ features/x86/x86-Add-amilo-rfkill-driver-for-some-Fujitsu-Siemens.patch
|
||||
|
||||
# Defer until we're sure about the system call number
|
||||
#+ bugfix/ia64/ia64-Add-accept4-syscall.patch
|
||||
+ bugfix/arm/ixp4xx_iobe.patch
|
||||
+ features/arm/allow_imx5x_build.patch
|
||||
+ features/arm/imx51_pata1.patch
|
||||
+ features/arm/imx51_pata2.patch
|
||||
+ features/arm/imx51_pata3.patch
|
||||
+ features/arm/imx53_ahci1.patch
|
||||
+ features/arm/imx53_ahci2.patch
|
||||
+ features/arm/imx53_ahci3.patch
|
||||
+ features/arm/imx53_ahci4.patch
|
||||
+ features/arm/imx53_ahci5.patch
|
||||
|
||||
|
|
Loading…
Reference in New Issue