summaryrefslogtreecommitdiffstats
path: root/meta/packages/linux/linux-openzaurus-2.6.16/rmk-mmc1.patch
diff options
context:
space:
mode:
authorRichard Purdie <richard@openedhand.com>2006-07-21 10:10:31 +0000
committerRichard Purdie <richard@openedhand.com>2006-07-21 10:10:31 +0000
commitb2f192faabe412adce79534e22efe9fb69ee40e2 (patch)
tree7076c49d4286f8a1733650bd8fbc7161af200d57 /meta/packages/linux/linux-openzaurus-2.6.16/rmk-mmc1.patch
parent2cf0eadf9f730027833af802d7e6c90b44248f80 (diff)
downloadpoky-b2f192faabe412adce79534e22efe9fb69ee40e2.tar.gz
Rename /openembedded/ -> /meta/
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@530 311d38ba-8fff-0310-9ca6-ca027cbcb966
Diffstat (limited to 'meta/packages/linux/linux-openzaurus-2.6.16/rmk-mmc1.patch')
-rw-r--r--meta/packages/linux/linux-openzaurus-2.6.16/rmk-mmc1.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/meta/packages/linux/linux-openzaurus-2.6.16/rmk-mmc1.patch b/meta/packages/linux/linux-openzaurus-2.6.16/rmk-mmc1.patch
new file mode 100644
index 0000000000..054b48d28d
--- /dev/null
+++ b/meta/packages/linux/linux-openzaurus-2.6.16/rmk-mmc1.patch
@@ -0,0 +1,61 @@
1
2The CSD contains a "read2write factor" which determines the multiplier to
3be applied to the read timeout to obtain the write timeout. We were
4ignoring this parameter, resulting in the possibility for writes being
5timed out too early.
6
7Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
8
9diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
10--- a/drivers/mmc/mmc.c
11+++ b/drivers/mmc/mmc.c
12@@ -549,6 +549,7 @@ static void mmc_decode_csd(struct mmc_ca
13 csd->read_partial = UNSTUFF_BITS(resp, 79, 1);
14 csd->write_misalign = UNSTUFF_BITS(resp, 78, 1);
15 csd->read_misalign = UNSTUFF_BITS(resp, 77, 1);
16+ csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
17 csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
18 csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
19 } else {
20@@ -583,6 +584,7 @@ static void mmc_decode_csd(struct mmc_ca
21 csd->read_partial = UNSTUFF_BITS(resp, 79, 1);
22 csd->write_misalign = UNSTUFF_BITS(resp, 78, 1);
23 csd->read_misalign = UNSTUFF_BITS(resp, 77, 1);
24+ csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
25 csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
26 csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
27 }
28diff --git a/drivers/mmc/mmc_block.c b/drivers/mmc/mmc_block.c
29--- a/drivers/mmc/mmc_block.c
30+++ b/drivers/mmc/mmc_block.c
31@@ -187,6 +187,12 @@ static int mmc_blk_issue_rq(struct mmc_q
32 brq.cmd.opcode = MMC_WRITE_BLOCK;
33 brq.data.flags |= MMC_DATA_WRITE;
34 brq.data.blocks = 1;
35+
36+ /*
37+ * Scale up the timeout by the r2w factor
38+ */
39+ brq.data.timeout_ns <<= card->csd.r2w_factor;
40+ brq.data.timeout_clks <<= card->csd.r2w_factor;
41 }
42
43 if (brq.data.blocks > 1) {
44diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
45--- a/include/linux/mmc/card.h
46+++ b/include/linux/mmc/card.h
47@@ -28,6 +28,7 @@ struct mmc_csd {
48 unsigned short cmdclass;
49 unsigned short tacc_clks;
50 unsigned int tacc_ns;
51+ unsigned int r2w_factor;
52 unsigned int max_dtr;
53 unsigned int read_blkbits;
54 unsigned int write_blkbits;
55
56
57-------------------------------------------------------------------
58List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel
59FAQ: http://www.arm.linux.org.uk/mailinglists/faq.php
60Etiquette: http://www.arm.linux.org.uk/mailinglists/etiquette.php
61