aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAjay Kumar Gupta <ajay.gupta@ti.com>2009-12-28 06:40:34 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2010-03-02 17:53:41 -0500
commit3b151526eda87901532390e11bba0dd59119f667 (patch)
tree0f24c4907a6f6b289f7790a489f87b33f75152da /drivers
parent8f20960cd772fe42a9cdd36312b2247bc2800ffb (diff)
USB: musb: Add new fifo table for a OMAP3 errata
We have observed MSC data read corruption when USB LAN device is also connected and it's interface is up. Silicon team has confirmed an errata where in all the active transfers should use FIFO space either in first 8K or next 8K. So far we have observed the issue in above use case scenario. As a workaround to it, adding a new FIFO config (5) fitting well within first 8K which can be used for such use cases. Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com> Acked-by: Anand Gadiyar <gadiyar@ti.com> Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/musb/musb_core.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index b7e2d1b09ac1..c4893267b4e2 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -1095,6 +1095,36 @@ static struct fifo_cfg __initdata mode_4_cfg[] = {
1095{ .hw_ep_num = 15, .style = FIFO_RXTX, .maxpacket = 1024, }, 1095{ .hw_ep_num = 15, .style = FIFO_RXTX, .maxpacket = 1024, },
1096}; 1096};
1097 1097
1098/* mode 5 - fits in 8KB */
1099static struct fifo_cfg __initdata mode_5_cfg[] = {
1100{ .hw_ep_num = 1, .style = FIFO_TX, .maxpacket = 512, },
1101{ .hw_ep_num = 1, .style = FIFO_RX, .maxpacket = 512, },
1102{ .hw_ep_num = 2, .style = FIFO_TX, .maxpacket = 512, },
1103{ .hw_ep_num = 2, .style = FIFO_RX, .maxpacket = 512, },
1104{ .hw_ep_num = 3, .style = FIFO_TX, .maxpacket = 512, },
1105{ .hw_ep_num = 3, .style = FIFO_RX, .maxpacket = 512, },
1106{ .hw_ep_num = 4, .style = FIFO_TX, .maxpacket = 512, },
1107{ .hw_ep_num = 4, .style = FIFO_RX, .maxpacket = 512, },
1108{ .hw_ep_num = 5, .style = FIFO_TX, .maxpacket = 512, },
1109{ .hw_ep_num = 5, .style = FIFO_RX, .maxpacket = 512, },
1110{ .hw_ep_num = 6, .style = FIFO_TX, .maxpacket = 32, },
1111{ .hw_ep_num = 6, .style = FIFO_RX, .maxpacket = 32, },
1112{ .hw_ep_num = 7, .style = FIFO_TX, .maxpacket = 32, },
1113{ .hw_ep_num = 7, .style = FIFO_RX, .maxpacket = 32, },
1114{ .hw_ep_num = 8, .style = FIFO_TX, .maxpacket = 32, },
1115{ .hw_ep_num = 8, .style = FIFO_RX, .maxpacket = 32, },
1116{ .hw_ep_num = 9, .style = FIFO_TX, .maxpacket = 32, },
1117{ .hw_ep_num = 9, .style = FIFO_RX, .maxpacket = 32, },
1118{ .hw_ep_num = 10, .style = FIFO_TX, .maxpacket = 32, },
1119{ .hw_ep_num = 10, .style = FIFO_RX, .maxpacket = 32, },
1120{ .hw_ep_num = 11, .style = FIFO_TX, .maxpacket = 32, },
1121{ .hw_ep_num = 11, .style = FIFO_RX, .maxpacket = 32, },
1122{ .hw_ep_num = 12, .style = FIFO_TX, .maxpacket = 32, },
1123{ .hw_ep_num = 12, .style = FIFO_RX, .maxpacket = 32, },
1124{ .hw_ep_num = 13, .style = FIFO_RXTX, .maxpacket = 512, },
1125{ .hw_ep_num = 14, .style = FIFO_RXTX, .maxpacket = 1024, },
1126{ .hw_ep_num = 15, .style = FIFO_RXTX, .maxpacket = 1024, },
1127};
1098 1128
1099/* 1129/*
1100 * configure a fifo; for non-shared endpoints, this may be called 1130 * configure a fifo; for non-shared endpoints, this may be called
@@ -1210,6 +1240,10 @@ static int __init ep_config_from_table(struct musb *musb)
1210 cfg = mode_4_cfg; 1240 cfg = mode_4_cfg;
1211 n = ARRAY_SIZE(mode_4_cfg); 1241 n = ARRAY_SIZE(mode_4_cfg);
1212 break; 1242 break;
1243 case 5:
1244 cfg = mode_5_cfg;
1245 n = ARRAY_SIZE(mode_5_cfg);
1246 break;
1213 } 1247 }
1214 1248
1215 printk(KERN_DEBUG "%s: setup fifo_mode %d\n", 1249 printk(KERN_DEBUG "%s: setup fifo_mode %d\n",