Advertisement
Guest User

SDHC zero buffer

a guest
Apr 15th, 2019
301
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 379.34 KB | None | 0 0
  1. | | | | | |
  2. /* kill-sd started */
  3. sdhci_irq() {
  4. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x40 */
  5. /* sdhci_irq: mmc0: CARD_INSERT */
  6. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x0 */
  7. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0xf0000 */
  8. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0xff1083 */
  9. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0xff1083 */
  10. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x40 */
  11. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  12. }
  13. sdhci_thread_irq() {
  14. sdhci_card_event() {
  15. sdhci_get_cd() {
  16. mmc_gpio_get_cd();
  17. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0xf0000 */
  18. }
  19. }
  20. mmc_detect_change() {
  21. _mmc_detect_change() {
  22. mmc_schedule_delayed_work();
  23. }
  24. }
  25. }
  26. mmc_rescan() {
  27. __mmc_claim_host();
  28. sdhci_get_cd() {
  29. mmc_gpio_get_cd();
  30. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0xf0000 */
  31. }
  32. mmc_power_up() {
  33. mmc_pwrseq_pre_power_on();
  34. mmc_set_initial_state() {
  35. mmc_retune_disable() {
  36. mmc_retune_unpause();
  37. }
  38. sdhci_set_ios() {
  39. sdhci_enable_preset_value();
  40. sdhci_set_clock() {
  41. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x0 */
  42. }
  43. sdhci_set_power() {
  44. sdhci_set_power_noreg() {
  45. /* sdhci_writeb: mmc0: 0x29 [HOST_CONTROL] <= 0x0 */
  46. /* sdhci_writeb: mmc0: 0x29 [HOST_CONTROL] <= 0xf */
  47. }
  48. }
  49. sdhci_set_bus_width() {
  50. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  51. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  52. }
  53. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  54. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  55. /* sdhci_readw: mmc0: 0x3e [ACMD12_ERR] => 0x0 */
  56. /* sdhci_writew: mmc0: 0x3e [ACMD12_ERR] <= 0x0 */
  57. /* sdhci_readw: mmc0: 0x2c [CLOCK_CONTROL] => 0x0 */
  58. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x0 */
  59. sdhci_set_uhs_signaling() {
  60. /* sdhci_readw: mmc0: 0x3e [ACMD12_ERR] => 0x0 */
  61. /* sdhci_writew: mmc0: 0x3e [ACMD12_ERR] <= 0x0 */
  62. }
  63. sdhci_set_clock() {
  64. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x0 */
  65. }
  66. }
  67. }
  68. mmc_set_signal_voltage() {
  69. sdhci_start_signal_voltage_switch() {
  70. /* sdhci_readw: mmc0: 0x3e [ACMD12_ERR] => 0x0 */
  71. /* sdhci_writew: mmc0: 0x3e [ACMD12_ERR] <= 0x0 */
  72. /* sdhci_readw: mmc0: 0x3e [ACMD12_ERR] => 0x0 */
  73. }
  74. }
  75. mmc_runtime_suspend() {
  76. mmc_runtime_suspend();
  77. }
  78. mmc_pwrseq_post_power_on();
  79. sdhci_set_ios() {
  80. sdhci_set_clock() {
  81. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x0 */
  82. sdhci_calc_clk();
  83. sdhci_enable_clk() {
  84. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0xfa01 */
  85. /* sdhci_readw: mmc0: 0x2c [CLOCK_CONTROL] => 0xfa03 */
  86. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0xfa07 */
  87. }
  88. }
  89. sdhci_set_power() {
  90. sdhci_set_power_noreg();
  91. }
  92. sdhci_set_bus_width() {
  93. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  94. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  95. }
  96. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  97. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  98. /* sdhci_readw: mmc0: 0x3e [ACMD12_ERR] => 0x0 */
  99. /* sdhci_writew: mmc0: 0x3e [ACMD12_ERR] <= 0x0 */
  100. /* sdhci_readw: mmc0: 0x2c [CLOCK_CONTROL] => 0xfa07 */
  101. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0xfa03 */
  102. sdhci_set_uhs_signaling() {
  103. /* sdhci_readw: mmc0: 0x3e [ACMD12_ERR] => 0x0 */
  104. /* sdhci_writew: mmc0: 0x3e [ACMD12_ERR] <= 0x0 */
  105. }
  106. sdhci_set_clock() {
  107. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x0 */
  108. sdhci_calc_clk();
  109. sdhci_enable_clk() {
  110. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0xfa01 */
  111. /* sdhci_readw: mmc0: 0x2c [CLOCK_CONTROL] => 0xfa03 */
  112. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0xfa07 */
  113. }
  114. }
  115. }
  116. } /* mmc_power_up */
  117. mmc_pwrseq_reset();
  118. mmc_io_rw_direct_host() {
  119. mmc_wait_for_cmd() {
  120. mmc_wait_for_req() {
  121. mmc_start_request() {
  122. mmc_retune_hold();
  123. sdhci_led_control() {
  124. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  125. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  126. }
  127. __mmc_start_request() {
  128. mmc_retune();
  129. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=52 cmd_arg=0xc00 cmd_flags=0x195 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  130. sdhci_request() {
  131. sdhci_get_cd() {
  132. mmc_gpio_get_cd();
  133. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  134. }
  135. sdhci_send_command() {
  136. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  137. sdhci_prepare_data();
  138. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xc00 */
  139. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  140. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x341a */
  141. }
  142. }
  143. }
  144. }
  145. mmc_wait_for_req_done() {
  146. sdhci_irq() {
  147. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x18000 */
  148. /* sdhci_irq: mmc0: ERROR | TIMEOUT */
  149. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x10000 */
  150. sdhci_finish_mrq() {
  151. sdhci_needs_reset();
  152. }
  153. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  154. }
  155. sdhci_tasklet_finish() {
  156. sdhci_del_timer();
  157. sdhci_needs_reset();
  158. sdhci_do_reset() {
  159. sdhci_reset() {
  160. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  161. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x2 */
  162. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  163. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  164. }
  165. }
  166. sdhci_do_reset() {
  167. sdhci_reset() {
  168. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  169. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x4 */
  170. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  171. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  172. }
  173. }
  174. mmc_request_done() {
  175. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=52 cmd_err=-110 cmd_resp=0x0 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  176. sdhci_led_control() {
  177. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  178. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  179. }
  180. mmc_wait_done();
  181. }
  182. }
  183. mmc_retune_release();
  184. }
  185. }
  186. }
  187. }
  188. mmc_io_rw_direct_host() {
  189. mmc_wait_for_cmd() {
  190. mmc_wait_for_req() {
  191. mmc_start_request() {
  192. mmc_retune_hold();
  193. sdhci_led_control() {
  194. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  195. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  196. }
  197. __mmc_start_request() {
  198. mmc_retune();
  199. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=52 cmd_arg=0x80000c08 cmd_flags=0x195 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  200. sdhci_request() {
  201. sdhci_get_cd() {
  202. mmc_gpio_get_cd();
  203. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  204. }
  205. sdhci_send_command() {
  206. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  207. sdhci_prepare_data();
  208. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x80000c08 */
  209. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  210. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x341a */
  211. }
  212. }
  213. }
  214. }
  215. mmc_wait_for_req_done() {
  216. sdhci_irq() {
  217. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x18000 */
  218. /* sdhci_irq: mmc0: ERROR | TIMEOUT */
  219. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x10000 */
  220. sdhci_finish_mrq() {
  221. sdhci_needs_reset();
  222. }
  223. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  224. }
  225. sdhci_tasklet_finish() {
  226. sdhci_del_timer();
  227. sdhci_needs_reset();
  228. sdhci_do_reset() {
  229. sdhci_reset() {
  230. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  231. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x2 */
  232. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  233. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  234. }
  235. }
  236. sdhci_do_reset() {
  237. sdhci_reset() {
  238. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  239. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x4 */
  240. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  241. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  242. }
  243. }
  244. mmc_request_done() {
  245. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=52 cmd_err=-110 cmd_resp=0x0 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  246. sdhci_led_control() {
  247. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  248. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  249. }
  250. mmc_wait_done();
  251. }
  252. }
  253. mmc_retune_release();
  254. }
  255. }
  256. } /* mmc_wait_for_cmd */
  257. } /* mmc_io_rw_direct_host */
  258. mmc_go_idle() {
  259. mmc_set_chip_select() {
  260. sdhci_set_ios() {
  261. sdhci_set_power() {
  262. sdhci_set_power_noreg();
  263. }
  264. sdhci_set_bus_width() {
  265. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  266. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  267. }
  268. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  269. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  270. /* sdhci_readw: mmc0: 0x3e [ACMD12_ERR] => 0x0 */
  271. /* sdhci_writew: mmc0: 0x3e [ACMD12_ERR] <= 0x0 */
  272. /* sdhci_readw: mmc0: 0x2c [CLOCK_CONTROL] => 0xfa07 */
  273. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0xfa03 */
  274. sdhci_set_uhs_signaling() {
  275. /* sdhci_readw: mmc0: 0x3e [ACMD12_ERR] => 0x0 */
  276. /* sdhci_writew: mmc0: 0x3e [ACMD12_ERR] <= 0x0 */
  277. }
  278. sdhci_set_clock() {
  279. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x0 */
  280. sdhci_calc_clk();
  281. sdhci_enable_clk() {
  282. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0xfa01 */
  283. /* sdhci_readw: mmc0: 0x2c [CLOCK_CONTROL] => 0xfa03 */
  284. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0xfa07 */
  285. }
  286. }
  287. }
  288. }
  289. mmc_wait_for_cmd() {
  290. mmc_wait_for_req() {
  291. mmc_start_request() {
  292. mmc_retune_hold();
  293. sdhci_led_control() {
  294. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  295. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  296. }
  297. __mmc_start_request() {
  298. mmc_retune();
  299. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=0 cmd_arg=0x0 cmd_flags=0xc0 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  300. sdhci_request() {
  301. sdhci_get_cd() {
  302. mmc_gpio_get_cd();
  303. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  304. }
  305. sdhci_send_command() {
  306. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  307. sdhci_prepare_data();
  308. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  309. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  310. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x0 */
  311. }
  312. }
  313. }
  314. }
  315. mmc_wait_for_req_done() {
  316. sdhci_irq() {
  317. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  318. /* sdhci_irq: mmc0: RESPONSE */
  319. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  320. sdhci_finish_command() {
  321. sdhci_finish_mrq() {
  322. sdhci_needs_reset();
  323. }
  324. }
  325. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  326. }
  327. sdhci_tasklet_finish() {
  328. sdhci_del_timer();
  329. sdhci_needs_reset();
  330. mmc_request_done() {
  331. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=0 cmd_err=0 cmd_resp=0x0 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  332. sdhci_led_control() {
  333. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  334. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  335. }
  336. mmc_wait_done();
  337. }
  338. }
  339. mmc_retune_release();
  340. }
  341. }
  342. }
  343. mmc_set_chip_select() {
  344. sdhci_set_ios() {
  345. sdhci_set_power() {
  346. sdhci_set_power_noreg();
  347. }
  348. sdhci_set_bus_width() {
  349. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  350. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  351. }
  352. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  353. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  354. /* sdhci_readw: mmc0: 0x3e [ACMD12_ERR] => 0x0 */
  355. /* sdhci_writew: mmc0: 0x3e [ACMD12_ERR] <= 0x0 */
  356. /* sdhci_readw: mmc0: 0x2c [CLOCK_CONTROL] => 0xfa07 */
  357. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0xfa03 */
  358. sdhci_set_uhs_signaling() {
  359. /* sdhci_readw: mmc0: 0x3e [ACMD12_ERR] => 0x0 */
  360. /* sdhci_writew: mmc0: 0x3e [ACMD12_ERR] <= 0x0 */
  361. }
  362. sdhci_set_clock() {
  363. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x0 */
  364. sdhci_calc_clk();
  365. sdhci_enable_clk() {
  366. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0xfa01 */
  367. /* sdhci_readw: mmc0: 0x2c [CLOCK_CONTROL] => 0xfa03 */
  368. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0xfa07 */
  369. }
  370. }
  371. }
  372. }
  373. }
  374. mmc_send_if_cond() {
  375. mmc_wait_for_cmd() {
  376. mmc_wait_for_req() {
  377. mmc_start_request() {
  378. mmc_retune_hold();
  379. sdhci_led_control() {
  380. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  381. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  382. }
  383. __mmc_start_request() {
  384. mmc_retune();
  385. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=8 cmd_arg=0x1aa cmd_flags=0x2f5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  386. sdhci_request() {
  387. sdhci_get_cd() {
  388. mmc_gpio_get_cd();
  389. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  390. }
  391. sdhci_send_command() {
  392. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  393. sdhci_prepare_data();
  394. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x1aa */
  395. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  396. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x81a */
  397. }
  398. }
  399. }
  400. }
  401. mmc_wait_for_req_done() {
  402. sdhci_irq() {
  403. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  404. /* sdhci_irq: mmc0: RESPONSE */
  405. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  406. sdhci_finish_command() {
  407. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x1aa */
  408. sdhci_finish_mrq() {
  409. sdhci_needs_reset();
  410. }
  411. }
  412. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  413. }
  414. sdhci_tasklet_finish() {
  415. sdhci_del_timer();
  416. sdhci_needs_reset();
  417. mmc_request_done() {
  418. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=8 cmd_err=0 cmd_resp=0x1aa 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  419. sdhci_led_control() {
  420. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  421. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  422. }
  423. mmc_wait_done();
  424. mmc_retune_release();
  425. }
  426. }
  427. }
  428. }
  429. mmc_attach_sdio() {
  430. }
  431. mmc_send_io_op_cond() {
  432. mmc_wait_for_cmd() {
  433. }
  434. mmc_wait_for_req() {
  435. mmc_start_request() {
  436. mmc_retune_hold();
  437. sdhci_led_control() {
  438. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  439. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  440. }
  441. __mmc_start_request() {
  442. mmc_retune();
  443. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=5 cmd_arg=0x0 cmd_flags=0x2e1 cmd_retries=3 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  444. sdhci_request() {
  445. sdhci_get_cd() {
  446. mmc_gpio_get_cd();
  447. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  448. }
  449. sdhci_send_command() {
  450. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  451. sdhci_prepare_data();
  452. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  453. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  454. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x502 */
  455. }
  456. }
  457. }
  458. }
  459. mmc_wait_for_req_done() {
  460. sdhci_irq() {
  461. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x18000 */
  462. /* sdhci_irq: mmc0: ERROR | TIMEOUT */
  463. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x10000 */
  464. sdhci_finish_mrq() {
  465. sdhci_needs_reset();
  466. }
  467. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  468. }
  469. sdhci_tasklet_finish() {
  470. sdhci_del_timer();
  471. sdhci_needs_reset();
  472. sdhci_do_reset() {
  473. sdhci_reset() {
  474. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  475. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x2 */
  476. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  477. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  478. }
  479. }
  480. sdhci_do_reset() {
  481. sdhci_reset() {
  482. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  483. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x4 */
  484. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  485. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  486. }
  487. }
  488. mmc_request_done() {
  489. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=5 cmd_err=-110 cmd_resp=0x0 0x0 0x0 0x0 cmd_retries=3 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  490. mmc_wait_done();
  491. }
  492. }
  493. __mmc_start_request() {
  494. mmc_retune();
  495. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=5 cmd_arg=0x0 cmd_flags=0x2e1 cmd_retries=2 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  496. sdhci_request() {
  497. sdhci_get_cd() {
  498. mmc_gpio_get_cd();
  499. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  500. }
  501. sdhci_send_command() {
  502. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  503. sdhci_prepare_data();
  504. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  505. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  506. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x502 */
  507. }
  508. }
  509. }
  510. sdhci_irq() {
  511. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x18000 */
  512. /* sdhci_irq: mmc0: ERROR | TIMEOUT */
  513. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x10000 */
  514. sdhci_finish_mrq() {
  515. sdhci_needs_reset();
  516. }
  517. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  518. }
  519. sdhci_tasklet_finish() {
  520. sdhci_del_timer();
  521. sdhci_needs_reset();
  522. sdhci_do_reset() {
  523. sdhci_reset() {
  524. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  525. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x2 */
  526. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  527. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  528. }
  529. }
  530. sdhci_do_reset() {
  531. sdhci_reset() {
  532. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  533. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x4 */
  534. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  535. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  536. }
  537. }
  538. mmc_request_done() {
  539. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=5 cmd_err=-110 cmd_resp=0x0 0x0 0x0 0x0 cmd_retries=2 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  540. mmc_wait_done();
  541. }
  542. }
  543. __mmc_start_request() {
  544. mmc_retune();
  545. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=5 cmd_arg=0x0 cmd_flags=0x2e1 cmd_retries=1 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  546. sdhci_request() {
  547. sdhci_get_cd() {
  548. mmc_gpio_get_cd();
  549. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  550. }
  551. sdhci_send_command() {
  552. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  553. sdhci_prepare_data();
  554. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  555. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  556. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x502 */
  557. }
  558. }
  559. }
  560. sdhci_irq() {
  561. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x18000 */
  562. /* sdhci_irq: mmc0: ERROR | TIMEOUT */
  563. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x10000 */
  564. sdhci_finish_mrq() {
  565. sdhci_needs_reset();
  566. }
  567. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  568. }
  569. sdhci_tasklet_finish() {
  570. sdhci_del_timer();
  571. sdhci_needs_reset();
  572. sdhci_do_reset() {
  573. sdhci_reset() {
  574. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  575. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x2 */
  576. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  577. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  578. }
  579. }
  580. sdhci_do_reset() {
  581. sdhci_reset() {
  582. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  583. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x4 */
  584. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  585. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  586. }
  587. }
  588. mmc_request_done() {
  589. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=5 cmd_err=-110 cmd_resp=0x0 0x0 0x0 0x0 cmd_retries=1 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  590. mmc_wait_done();
  591. }
  592. }
  593. __mmc_start_request() {
  594. mmc_retune();
  595. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=5 cmd_arg=0x0 cmd_flags=0x2e1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  596. sdhci_request() {
  597. sdhci_get_cd() {
  598. mmc_gpio_get_cd();
  599. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  600. }
  601. sdhci_send_command() {
  602. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  603. sdhci_prepare_data();
  604. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  605. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  606. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x502 */
  607. }
  608. }
  609. }
  610. sdhci_irq() {
  611. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x18000 */
  612. /* sdhci_irq: mmc0: ERROR | TIMEOUT */
  613. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x10000 */
  614. sdhci_finish_mrq() {
  615. sdhci_needs_reset();
  616. }
  617. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  618. }
  619. sdhci_tasklet_finish() {
  620. sdhci_del_timer();
  621. sdhci_needs_reset();
  622. sdhci_do_reset() {
  623. sdhci_reset() {
  624. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  625. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x2 */
  626. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  627. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  628. }
  629. }
  630. sdhci_do_reset() {
  631. sdhci_reset() {
  632. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  633. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x4 */
  634. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  635. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xf01 */
  636. }
  637. }
  638. mmc_request_done() {
  639. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=5 cmd_err=-110 cmd_resp=0x0 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  640. sdhci_led_control() {
  641. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  642. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  643. }
  644. mmc_wait_done();
  645. }
  646. }
  647. mmc_retune_release();
  648. }
  649. }
  650. }
  651. } /* mmc_send_io_op_cond */
  652. } /* mmc_attach_sdio */
  653. mmc_attach_sd() {
  654. mmc_send_app_op_cond() {
  655. /* ocr_request: mmc0: */
  656. mmc_wait_for_app_cmd() {
  657. mmc_app_cmd() {
  658. mmc_wait_for_cmd() {
  659. mmc_wait_for_req() {
  660. mmc_start_request() {
  661. mmc_retune_hold();
  662. sdhci_led_control() {
  663. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  664. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  665. }
  666. __mmc_start_request() {
  667. mmc_retune();
  668. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x0 cmd_flags=0xf5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  669. sdhci_request() {
  670. sdhci_get_cd() {
  671. mmc_gpio_get_cd();
  672. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  673. }
  674. sdhci_send_command() {
  675. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  676. sdhci_prepare_data();
  677. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  678. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  679. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  680. }
  681. }
  682. }
  683. }
  684. mmc_wait_for_req_done() {
  685. sdhci_irq() {
  686. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  687. /* sdhci_irq: mmc0: RESPONSE */
  688. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  689. sdhci_finish_command() {
  690. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x400120 */
  691. sdhci_finish_mrq() {
  692. sdhci_needs_reset();
  693. }
  694. }
  695. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  696. }
  697. sdhci_tasklet_finish() {
  698. sdhci_del_timer();
  699. sdhci_needs_reset();
  700. mmc_request_done() {
  701. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x400120 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  702. sdhci_led_control() {
  703. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  704. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  705. }
  706. mmc_wait_done();
  707. }
  708. }
  709. mmc_retune_release();
  710. }
  711. }
  712. }
  713. }
  714. mmc_wait_for_req() {
  715. mmc_start_request() {
  716. mmc_retune_hold();
  717. sdhci_led_control() {
  718. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  719. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  720. }
  721. __mmc_start_request() {
  722. mmc_retune();
  723. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=41 cmd_arg=0x0 cmd_flags=0xe1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  724. sdhci_request() {
  725. sdhci_get_cd() {
  726. mmc_gpio_get_cd();
  727. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  728. }
  729. sdhci_send_command() {
  730. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  731. sdhci_prepare_data();
  732. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  733. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  734. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x2902 */
  735. }
  736. }
  737. }
  738. }
  739. mmc_wait_for_req_done() {
  740. sdhci_irq() {
  741. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  742. /* sdhci_irq: mmc0: RESPONSE */
  743. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  744. sdhci_finish_command() {
  745. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xff8000 */
  746. sdhci_finish_mrq() {
  747. sdhci_needs_reset();
  748. }
  749. }
  750. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  751. }
  752. sdhci_tasklet_finish() {
  753. sdhci_del_timer();
  754. sdhci_needs_reset();
  755. mmc_request_done() {
  756. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=41 cmd_err=0 cmd_resp=0xff8000 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  757. sdhci_led_control() {
  758. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  759. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  760. }
  761. mmc_wait_done();
  762. }
  763. }
  764. mmc_retune_release();
  765. }
  766. }
  767. /* ocr_response: mmc0: 2.7 ~ 2.8 | 2.8 ~ 2.9 | 2.9 ~ 3.0 | 3.0 ~ 3.1 | 3.1 ~ 3.2 | 3.2 ~ 3.3 | 3.3 ~ 3.4 | 3.4 ~ 3.5 | 3.5 ~ 3.6 */
  768. }
  769. }
  770. mmc_attach_bus();
  771. mmc_select_voltage();
  772. mmc_sd_init_card() {
  773. mmc_sd_get_cid() {
  774. mmc_go_idle() {
  775. mmc_set_chip_select() {
  776. sdhci_set_ios() {
  777. sdhci_set_power() {
  778. sdhci_set_power_noreg();
  779. }
  780. sdhci_set_bus_width() {
  781. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  782. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  783. }
  784. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  785. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  786. /* sdhci_readw: mmc0: 0x3e [ACMD12_ERR] => 0x0 */
  787. /* sdhci_writew: mmc0: 0x3e [ACMD12_ERR] <= 0x0 */
  788. /* sdhci_readw: mmc0: 0x2c [CLOCK_CONTROL] => 0xfa07 */
  789. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0xfa03 */
  790. sdhci_set_uhs_signaling() {
  791. /* sdhci_readw: mmc0: 0x3e [ACMD12_ERR] => 0x0 */
  792. /* sdhci_writew: mmc0: 0x3e [ACMD12_ERR] <= 0x0 */
  793. }
  794. sdhci_set_clock() {
  795. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x0 */
  796. sdhci_calc_clk();
  797. sdhci_enable_clk() {
  798. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0xfa01 */
  799. /* sdhci_readw: mmc0: 0x2c [CLOCK_CONTROL] => 0xfa03 */
  800. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0xfa07 */
  801. }
  802. }
  803. }
  804. }
  805. mmc_wait_for_cmd() {
  806. mmc_wait_for_req() {
  807. mmc_start_request() {
  808. mmc_retune_hold();
  809. sdhci_led_control() {
  810. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  811. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  812. }
  813. __mmc_start_request() {
  814. mmc_retune();
  815. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=0 cmd_arg=0x0 cmd_flags=0xc0 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  816. sdhci_request() {
  817. sdhci_get_cd() {
  818. mmc_gpio_get_cd();
  819. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  820. }
  821. sdhci_send_command() {
  822. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  823. sdhci_prepare_data();
  824. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  825. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  826. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x0 */
  827. }
  828. }
  829. }
  830. }
  831. mmc_wait_for_req_done() {
  832. sdhci_irq() {
  833. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  834. /* sdhci_irq: mmc0: RESPONSE */
  835. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  836. sdhci_finish_command() {
  837. sdhci_finish_mrq() {
  838. sdhci_needs_reset();
  839. }
  840. }
  841. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  842. }
  843. sdhci_tasklet_finish() {
  844. sdhci_del_timer();
  845. sdhci_needs_reset();
  846. mmc_request_done() {
  847. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=0 cmd_err=0 cmd_resp=0x0 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  848. sdhci_led_control() {
  849. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  850. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  851. }
  852. mmc_wait_done();
  853. }
  854. }
  855. mmc_retune_release();
  856. }
  857. }
  858. }
  859. mmc_set_chip_select() {
  860. sdhci_set_ios() {
  861. sdhci_set_power() {
  862. sdhci_set_power_noreg();
  863. }
  864. sdhci_set_bus_width() {
  865. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  866. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  867. }
  868. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  869. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  870. /* sdhci_readw: mmc0: 0x3e [ACMD12_ERR] => 0x0 */
  871. /* sdhci_writew: mmc0: 0x3e [ACMD12_ERR] <= 0x0 */
  872. /* sdhci_readw: mmc0: 0x2c [CLOCK_CONTROL] => 0xfa07 */
  873. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0xfa03 */
  874. sdhci_set_uhs_signaling() {
  875. /* sdhci_readw: mmc0: 0x3e [ACMD12_ERR] => 0x0 */
  876. /* sdhci_writew: mmc0: 0x3e [ACMD12_ERR] <= 0x0 */
  877. }
  878. sdhci_set_clock() {
  879. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x0 */
  880. sdhci_calc_clk();
  881. sdhci_enable_clk() {
  882. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0xfa01 */
  883. /* sdhci_readw: mmc0: 0x2c [CLOCK_CONTROL] => 0xfa03 */
  884. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0xfa07 */
  885. }
  886. }
  887. }
  888. }
  889. }
  890. mmc_send_if_cond() {
  891. mmc_wait_for_cmd() {
  892. mmc_wait_for_req() {
  893. mmc_start_request() {
  894. mmc_retune_hold();
  895. sdhci_led_control() {
  896. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  897. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  898. }
  899. __mmc_start_request() {
  900. mmc_retune();
  901. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=8 cmd_arg=0x1aa cmd_flags=0x2f5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  902. sdhci_request() {
  903. sdhci_get_cd() {
  904. mmc_gpio_get_cd();
  905. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  906. }
  907. sdhci_send_command() {
  908. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  909. sdhci_prepare_data();
  910. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x1aa */
  911. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  912. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x81a */
  913. }
  914. }
  915. }
  916. }
  917. mmc_wait_for_req_done() {
  918. sdhci_irq() {
  919. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  920. /* sdhci_irq: mmc0: RESPONSE */
  921. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  922. sdhci_finish_command() {
  923. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x1aa */
  924. sdhci_finish_mrq() {
  925. sdhci_needs_reset();
  926. }
  927. }
  928. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  929. }
  930. sdhci_tasklet_finish() {
  931. sdhci_del_timer();
  932. sdhci_needs_reset();
  933. mmc_request_done() {
  934. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=8 cmd_err=0 cmd_resp=0x1aa 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  935. sdhci_led_control() {
  936. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  937. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  938. }
  939. mmc_wait_done();
  940. }
  941. }
  942. mmc_retune_release();
  943. }
  944. }
  945. }
  946. }
  947. mmc_send_app_op_cond() {
  948. /* ocr_request: mmc0: SDHC or SDXC Supported (HCS) | Maximum Performance (XPC) | Switch to 1.8V (S18R) | 3.3 ~ 3.4 */
  949. mmc_wait_for_app_cmd() {
  950. mmc_app_cmd() {
  951. mmc_wait_for_cmd() {
  952. mmc_wait_for_req() {
  953. mmc_start_request() {
  954. mmc_retune_hold();
  955. sdhci_led_control() {
  956. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  957. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  958. }
  959. __mmc_start_request() {
  960. mmc_retune();
  961. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x0 cmd_flags=0xf5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  962. sdhci_request() {
  963. sdhci_get_cd() {
  964. mmc_gpio_get_cd();
  965. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  966. }
  967. sdhci_send_command() {
  968. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  969. sdhci_prepare_data();
  970. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  971. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  972. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  973. }
  974. }
  975. }
  976. }
  977. mmc_wait_for_req_done() {
  978. sdhci_irq() {
  979. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  980. /* sdhci_irq: mmc0: RESPONSE */
  981. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  982. sdhci_finish_command() {
  983. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x120 */
  984. sdhci_finish_mrq() {
  985. sdhci_needs_reset();
  986. }
  987. }
  988. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  989. }
  990. sdhci_tasklet_finish() {
  991. sdhci_del_timer();
  992. sdhci_needs_reset();
  993. mmc_request_done() {
  994. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x120 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  995. sdhci_led_control() {
  996. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  997. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  998. }
  999. mmc_wait_done();
  1000. }
  1001. }
  1002. mmc_retune_release();
  1003. }
  1004. }
  1005. }
  1006. }
  1007. mmc_wait_for_req() {
  1008. mmc_start_request() {
  1009. mmc_retune_hold();
  1010. sdhci_led_control() {
  1011. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  1012. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  1013. }
  1014. __mmc_start_request() {
  1015. mmc_retune();
  1016. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=41 cmd_arg=0x51200000 cmd_flags=0xe1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1017. sdhci_request() {
  1018. sdhci_get_cd() {
  1019. mmc_gpio_get_cd();
  1020. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1021. }
  1022. sdhci_send_command() {
  1023. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1024. sdhci_prepare_data();
  1025. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x51200000 */
  1026. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  1027. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x2902 */
  1028. }
  1029. }
  1030. }
  1031. }
  1032. mmc_wait_for_req_done() {
  1033. sdhci_irq() {
  1034. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  1035. /* sdhci_irq: mmc0: RESPONSE */
  1036. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  1037. sdhci_finish_command() {
  1038. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xff8000 */
  1039. sdhci_finish_mrq() {
  1040. sdhci_needs_reset();
  1041. }
  1042. }
  1043. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  1044. }
  1045. sdhci_tasklet_finish() {
  1046. sdhci_del_timer();
  1047. sdhci_needs_reset();
  1048. mmc_request_done() {
  1049. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=41 cmd_err=0 cmd_resp=0xff8000 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1050. sdhci_led_control() {
  1051. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  1052. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  1053. }
  1054. mmc_wait_done();
  1055. }
  1056. }
  1057. mmc_retune_release();
  1058. }
  1059. }
  1060. /* ocr_response: mmc0: 2.7 ~ 2.8 | 2.8 ~ 2.9 | 2.9 ~ 3.0 | 3.0 ~ 3.1 | 3.1 ~ 3.2 | 3.2 ~ 3.3 | 3.3 ~ 3.4 | 3.4 ~ 3.5 | 3.5 ~ 3.6 */
  1061. }
  1062. mmc_wait_for_app_cmd() {
  1063. mmc_app_cmd() {
  1064. mmc_wait_for_cmd() {
  1065. mmc_wait_for_req() {
  1066. mmc_start_request() {
  1067. mmc_retune_hold();
  1068. sdhci_led_control() {
  1069. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  1070. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  1071. }
  1072. __mmc_start_request() {
  1073. mmc_retune();
  1074. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x0 cmd_flags=0xf5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1075. sdhci_request() {
  1076. sdhci_get_cd() {
  1077. mmc_gpio_get_cd();
  1078. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1079. }
  1080. sdhci_send_command() {
  1081. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1082. sdhci_prepare_data();
  1083. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  1084. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  1085. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  1086. }
  1087. }
  1088. }
  1089. }
  1090. mmc_wait_for_req_done() {
  1091. sdhci_irq() {
  1092. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  1093. /* sdhci_irq: mmc0: RESPONSE */
  1094. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  1095. sdhci_finish_command() {
  1096. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x120 */
  1097. sdhci_finish_mrq() {
  1098. sdhci_needs_reset();
  1099. }
  1100. }
  1101. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  1102. }
  1103. sdhci_tasklet_finish() {
  1104. sdhci_del_timer();
  1105. sdhci_needs_reset();
  1106. mmc_request_done() {
  1107. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x120 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1108. sdhci_led_control() {
  1109. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  1110. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  1111. }
  1112. mmc_wait_done();
  1113. }
  1114. }
  1115. mmc_retune_release();
  1116. }
  1117. }
  1118. }
  1119. }
  1120. mmc_wait_for_req() {
  1121. mmc_start_request() {
  1122. mmc_retune_hold();
  1123. sdhci_led_control() {
  1124. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  1125. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  1126. }
  1127. __mmc_start_request() {
  1128. mmc_retune();
  1129. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=41 cmd_arg=0x51200000 cmd_flags=0xe1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1130. sdhci_request() {
  1131. sdhci_get_cd() {
  1132. mmc_gpio_get_cd();
  1133. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1134. }
  1135. sdhci_send_command() {
  1136. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1137. sdhci_prepare_data();
  1138. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x51200000 */
  1139. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  1140. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x2902 */
  1141. }
  1142. }
  1143. }
  1144. }
  1145. mmc_wait_for_req_done() {
  1146. sdhci_irq() {
  1147. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  1148. /* sdhci_irq: mmc0: RESPONSE */
  1149. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  1150. sdhci_finish_command() {
  1151. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xff8000 */
  1152. sdhci_finish_mrq() {
  1153. sdhci_needs_reset();
  1154. }
  1155. }
  1156. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  1157. }
  1158. sdhci_tasklet_finish() {
  1159. sdhci_del_timer();
  1160. sdhci_needs_reset();
  1161. mmc_request_done() {
  1162. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=41 cmd_err=0 cmd_resp=0xff8000 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1163. sdhci_led_control() {
  1164. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  1165. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  1166. }
  1167. mmc_wait_done();
  1168. }
  1169. }
  1170. mmc_retune_release();
  1171. }
  1172. }
  1173. /* ocr_response: mmc0: 2.7 ~ 2.8 | 2.8 ~ 2.9 | 2.9 ~ 3.0 | 3.0 ~ 3.1 | 3.1 ~ 3.2 | 3.2 ~ 3.3 | 3.3 ~ 3.4 | 3.4 ~ 3.5 | 3.5 ~ 3.6 */
  1174. }
  1175. mmc_wait_for_app_cmd() {
  1176. mmc_app_cmd() {
  1177. mmc_wait_for_cmd() {
  1178. mmc_wait_for_req() {
  1179. mmc_start_request() {
  1180. mmc_retune_hold();
  1181. sdhci_led_control() {
  1182. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  1183. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  1184. }
  1185. __mmc_start_request() {
  1186. mmc_retune();
  1187. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x0 cmd_flags=0xf5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1188. sdhci_request() {
  1189. sdhci_get_cd() {
  1190. mmc_gpio_get_cd();
  1191. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1192. }
  1193. sdhci_send_command() {
  1194. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1195. sdhci_prepare_data();
  1196. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  1197. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  1198. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  1199. }
  1200. }
  1201. }
  1202. }
  1203. mmc_wait_for_req_done() {
  1204. sdhci_irq() {
  1205. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  1206. /* sdhci_irq: mmc0: RESPONSE */
  1207. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  1208. sdhci_finish_command() {
  1209. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x120 */
  1210. sdhci_finish_mrq() {
  1211. sdhci_needs_reset();
  1212. }
  1213. }
  1214. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  1215. }
  1216. sdhci_tasklet_finish() {
  1217. sdhci_del_timer();
  1218. sdhci_needs_reset();
  1219. mmc_request_done() {
  1220. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x120 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1221. sdhci_led_control() {
  1222. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  1223. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  1224. }
  1225. mmc_wait_done();
  1226. }
  1227. }
  1228. mmc_retune_release();
  1229. }
  1230. }
  1231. }
  1232. }
  1233. mmc_wait_for_req() {
  1234. mmc_start_request() {
  1235. mmc_retune_hold();
  1236. sdhci_led_control() {
  1237. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  1238. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  1239. }
  1240. __mmc_start_request() {
  1241. mmc_retune();
  1242. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=41 cmd_arg=0x51200000 cmd_flags=0xe1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1243. sdhci_request() {
  1244. sdhci_get_cd() {
  1245. mmc_gpio_get_cd();
  1246. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1247. }
  1248. sdhci_send_command() {
  1249. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1250. sdhci_prepare_data();
  1251. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x51200000 */
  1252. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  1253. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x2902 */
  1254. }
  1255. }
  1256. }
  1257. }
  1258. mmc_wait_for_req_done() {
  1259. sdhci_irq() {
  1260. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  1261. /* sdhci_irq: mmc0: RESPONSE */
  1262. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  1263. sdhci_finish_command() {
  1264. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xff8000 */
  1265. sdhci_finish_mrq() {
  1266. sdhci_needs_reset();
  1267. }
  1268. }
  1269. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  1270. }
  1271. sdhci_tasklet_finish() {
  1272. sdhci_del_timer();
  1273. sdhci_needs_reset();
  1274. mmc_request_done() {
  1275. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=41 cmd_err=0 cmd_resp=0xff8000 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1276. sdhci_led_control() {
  1277. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  1278. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  1279. }
  1280. mmc_wait_done();
  1281. }
  1282. }
  1283. mmc_retune_release();
  1284. }
  1285. }
  1286. /* ocr_response: mmc0: 2.7 ~ 2.8 | 2.8 ~ 2.9 | 2.9 ~ 3.0 | 3.0 ~ 3.1 | 3.1 ~ 3.2 | 3.2 ~ 3.3 | 3.3 ~ 3.4 | 3.4 ~ 3.5 | 3.5 ~ 3.6 */
  1287. }
  1288. mmc_wait_for_app_cmd() {
  1289. mmc_app_cmd() {
  1290. mmc_wait_for_cmd() {
  1291. mmc_wait_for_req() {
  1292. mmc_start_request() {
  1293. mmc_retune_hold();
  1294. sdhci_led_control() {
  1295. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  1296. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  1297. }
  1298. __mmc_start_request() {
  1299. mmc_retune();
  1300. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x0 cmd_flags=0xf5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1301. sdhci_request() {
  1302. sdhci_get_cd() {
  1303. mmc_gpio_get_cd();
  1304. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1305. }
  1306. sdhci_send_command() {
  1307. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1308. sdhci_prepare_data();
  1309. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  1310. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  1311. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  1312. }
  1313. }
  1314. }
  1315. }
  1316. mmc_wait_for_req_done() {
  1317. sdhci_irq() {
  1318. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  1319. /* sdhci_irq: mmc0: RESPONSE */
  1320. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  1321. sdhci_finish_command() {
  1322. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x120 */
  1323. sdhci_finish_mrq() {
  1324. sdhci_needs_reset();
  1325. }
  1326. }
  1327. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  1328. }
  1329. sdhci_tasklet_finish() {
  1330. sdhci_del_timer();
  1331. sdhci_needs_reset();
  1332. mmc_request_done() {
  1333. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x120 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1334. sdhci_led_control() {
  1335. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  1336. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  1337. }
  1338. mmc_wait_done();
  1339. }
  1340. }
  1341. mmc_retune_release();
  1342. }
  1343. }
  1344. }
  1345. }
  1346. mmc_wait_for_req() {
  1347. mmc_start_request() {
  1348. mmc_retune_hold();
  1349. sdhci_led_control() {
  1350. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  1351. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  1352. }
  1353. __mmc_start_request() {
  1354. mmc_retune();
  1355. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=41 cmd_arg=0x51200000 cmd_flags=0xe1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1356. sdhci_request() {
  1357. sdhci_get_cd() {
  1358. mmc_gpio_get_cd();
  1359. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1360. }
  1361. sdhci_send_command() {
  1362. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1363. sdhci_prepare_data();
  1364. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x51200000 */
  1365. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  1366. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x2902 */
  1367. }
  1368. }
  1369. }
  1370. }
  1371. mmc_wait_for_req_done() {
  1372. sdhci_irq() {
  1373. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  1374. /* sdhci_irq: mmc0: RESPONSE */
  1375. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  1376. sdhci_finish_command() {
  1377. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xff8000 */
  1378. sdhci_finish_mrq() {
  1379. sdhci_needs_reset();
  1380. }
  1381. }
  1382. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  1383. }
  1384. sdhci_tasklet_finish() {
  1385. sdhci_del_timer();
  1386. sdhci_needs_reset();
  1387. mmc_request_done() {
  1388. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=41 cmd_err=0 cmd_resp=0xff8000 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1389. sdhci_led_control() {
  1390. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  1391. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  1392. }
  1393. mmc_wait_done();
  1394. }
  1395. }
  1396. mmc_retune_release();
  1397. }
  1398. }
  1399. /* ocr_response: mmc0: 2.7 ~ 2.8 | 2.8 ~ 2.9 | 2.9 ~ 3.0 | 3.0 ~ 3.1 | 3.1 ~ 3.2 | 3.2 ~ 3.3 | 3.3 ~ 3.4 | 3.4 ~ 3.5 | 3.5 ~ 3.6 */
  1400. }
  1401. mmc_wait_for_app_cmd() {
  1402. mmc_app_cmd() {
  1403. mmc_wait_for_cmd() {
  1404. mmc_wait_for_req() {
  1405. mmc_start_request() {
  1406. mmc_retune_hold();
  1407. sdhci_led_control() {
  1408. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  1409. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  1410. }
  1411. __mmc_start_request() {
  1412. mmc_retune();
  1413. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x0 cmd_flags=0xf5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1414. sdhci_request() {
  1415. sdhci_get_cd() {
  1416. mmc_gpio_get_cd();
  1417. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1418. }
  1419. sdhci_send_command() {
  1420. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1421. sdhci_prepare_data();
  1422. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  1423. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  1424. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  1425. }
  1426. }
  1427. }
  1428. }
  1429. mmc_wait_for_req_done() {
  1430. sdhci_irq() {
  1431. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  1432. /* sdhci_irq: mmc0: RESPONSE */
  1433. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  1434. sdhci_finish_command() {
  1435. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x120 */
  1436. sdhci_finish_mrq() {
  1437. sdhci_needs_reset();
  1438. }
  1439. }
  1440. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  1441. }
  1442. sdhci_tasklet_finish() {
  1443. sdhci_del_timer();
  1444. sdhci_needs_reset();
  1445. mmc_request_done() {
  1446. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x120 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1447. sdhci_led_control() {
  1448. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  1449. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  1450. }
  1451. mmc_wait_done();
  1452. }
  1453. }
  1454. mmc_retune_release();
  1455. }
  1456. }
  1457. }
  1458. }
  1459. mmc_wait_for_req() {
  1460. mmc_start_request() {
  1461. mmc_retune_hold();
  1462. sdhci_led_control() {
  1463. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  1464. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  1465. }
  1466. __mmc_start_request() {
  1467. mmc_retune();
  1468. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=41 cmd_arg=0x51200000 cmd_flags=0xe1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1469. sdhci_request() {
  1470. sdhci_get_cd() {
  1471. mmc_gpio_get_cd();
  1472. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1473. }
  1474. sdhci_send_command() {
  1475. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1476. sdhci_prepare_data();
  1477. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x51200000 */
  1478. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  1479. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x2902 */
  1480. }
  1481. }
  1482. }
  1483. }
  1484. mmc_wait_for_req_done() {
  1485. sdhci_irq() {
  1486. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  1487. /* sdhci_irq: mmc0: RESPONSE */
  1488. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  1489. sdhci_finish_command() {
  1490. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xff8000 */
  1491. sdhci_finish_mrq() {
  1492. sdhci_needs_reset();
  1493. }
  1494. }
  1495. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  1496. }
  1497. sdhci_tasklet_finish() {
  1498. sdhci_del_timer();
  1499. sdhci_needs_reset();
  1500. mmc_request_done() {
  1501. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=41 cmd_err=0 cmd_resp=0xff8000 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1502. sdhci_led_control() {
  1503. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  1504. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  1505. }
  1506. mmc_wait_done();
  1507. }
  1508. }
  1509. mmc_retune_release();
  1510. }
  1511. }
  1512. /* ocr_response: mmc0: 2.7 ~ 2.8 | 2.8 ~ 2.9 | 2.9 ~ 3.0 | 3.0 ~ 3.1 | 3.1 ~ 3.2 | 3.2 ~ 3.3 | 3.3 ~ 3.4 | 3.4 ~ 3.5 | 3.5 ~ 3.6 */
  1513. }
  1514. mmc_wait_for_app_cmd() {
  1515. mmc_app_cmd() {
  1516. mmc_wait_for_cmd() {
  1517. mmc_wait_for_req() {
  1518. mmc_start_request() {
  1519. mmc_retune_hold();
  1520. sdhci_led_control() {
  1521. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  1522. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  1523. }
  1524. __mmc_start_request() {
  1525. mmc_retune();
  1526. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x0 cmd_flags=0xf5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1527. sdhci_request() {
  1528. sdhci_get_cd() {
  1529. mmc_gpio_get_cd();
  1530. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1531. }
  1532. sdhci_send_command() {
  1533. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1534. sdhci_prepare_data();
  1535. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  1536. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  1537. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  1538. }
  1539. }
  1540. }
  1541. }
  1542. mmc_wait_for_req_done() {
  1543. sdhci_irq() {
  1544. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  1545. /* sdhci_irq: mmc0: RESPONSE */
  1546. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  1547. sdhci_finish_command() {
  1548. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x120 */
  1549. sdhci_finish_mrq() {
  1550. sdhci_needs_reset();
  1551. }
  1552. }
  1553. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  1554. }
  1555. sdhci_tasklet_finish() {
  1556. sdhci_del_timer();
  1557. sdhci_needs_reset();
  1558. mmc_request_done() {
  1559. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x120 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1560. sdhci_led_control() {
  1561. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  1562. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  1563. }
  1564. mmc_wait_done();
  1565. }
  1566. }
  1567. mmc_retune_release();
  1568. }
  1569. }
  1570. }
  1571. }
  1572. mmc_wait_for_req() {
  1573. mmc_start_request() {
  1574. mmc_retune_hold();
  1575. sdhci_led_control() {
  1576. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  1577. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  1578. }
  1579. __mmc_start_request() {
  1580. mmc_retune();
  1581. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=41 cmd_arg=0x51200000 cmd_flags=0xe1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1582. sdhci_request() {
  1583. sdhci_get_cd() {
  1584. mmc_gpio_get_cd();
  1585. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1586. }
  1587. sdhci_send_command() {
  1588. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1589. sdhci_prepare_data();
  1590. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x51200000 */
  1591. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  1592. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x2902 */
  1593. }
  1594. }
  1595. }
  1596. }
  1597. mmc_wait_for_req_done() {
  1598. sdhci_irq() {
  1599. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  1600. /* sdhci_irq: mmc0: RESPONSE */
  1601. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  1602. sdhci_finish_command() {
  1603. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xff8000 */
  1604. sdhci_finish_mrq() {
  1605. sdhci_needs_reset();
  1606. }
  1607. }
  1608. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  1609. }
  1610. sdhci_tasklet_finish() {
  1611. sdhci_del_timer();
  1612. sdhci_needs_reset();
  1613. mmc_request_done() {
  1614. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=41 cmd_err=0 cmd_resp=0xff8000 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1615. sdhci_led_control() {
  1616. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  1617. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  1618. }
  1619. mmc_wait_done();
  1620. }
  1621. }
  1622. mmc_retune_release();
  1623. }
  1624. }
  1625. /* ocr_response: mmc0: 2.7 ~ 2.8 | 2.8 ~ 2.9 | 2.9 ~ 3.0 | 3.0 ~ 3.1 | 3.1 ~ 3.2 | 3.2 ~ 3.3 | 3.3 ~ 3.4 | 3.4 ~ 3.5 | 3.5 ~ 3.6 */
  1626. }
  1627. mmc_wait_for_app_cmd() {
  1628. mmc_app_cmd() {
  1629. mmc_wait_for_cmd() {
  1630. mmc_wait_for_req() {
  1631. mmc_start_request() {
  1632. mmc_retune_hold();
  1633. sdhci_led_control() {
  1634. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  1635. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  1636. }
  1637. __mmc_start_request() {
  1638. mmc_retune();
  1639. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x0 cmd_flags=0xf5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1640. sdhci_request() {
  1641. sdhci_get_cd() {
  1642. mmc_gpio_get_cd();
  1643. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1644. }
  1645. sdhci_send_command() {
  1646. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1647. sdhci_prepare_data();
  1648. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  1649. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  1650. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  1651. }
  1652. }
  1653. }
  1654. }
  1655. mmc_wait_for_req_done() {
  1656. sdhci_irq() {
  1657. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  1658. /* sdhci_irq: mmc0: RESPONSE */
  1659. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  1660. sdhci_finish_command() {
  1661. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x120 */
  1662. sdhci_finish_mrq() {
  1663. sdhci_needs_reset();
  1664. }
  1665. }
  1666. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  1667. }
  1668. sdhci_tasklet_finish() {
  1669. sdhci_del_timer();
  1670. sdhci_needs_reset();
  1671. mmc_request_done() {
  1672. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x120 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1673. sdhci_led_control() {
  1674. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  1675. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  1676. }
  1677. mmc_wait_done();
  1678. mmc_retune_release();
  1679. }
  1680. }
  1681. }
  1682. }
  1683. mmc_wait_for_req() {
  1684. mmc_start_request() {
  1685. mmc_retune_hold();
  1686. }
  1687. }
  1688. sdhci_led_control() {
  1689. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  1690. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  1691. }
  1692. __mmc_start_request() {
  1693. mmc_retune();
  1694. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=41 cmd_arg=0x51200000 cmd_flags=0xe1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1695. sdhci_request() {
  1696. sdhci_get_cd() {
  1697. mmc_gpio_get_cd();
  1698. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1699. }
  1700. sdhci_send_command() {
  1701. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1702. sdhci_prepare_data();
  1703. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x51200000 */
  1704. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  1705. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x2902 */
  1706. }
  1707. }
  1708. }
  1709. }
  1710. mmc_wait_for_req_done() {
  1711. sdhci_irq() {
  1712. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  1713. /* sdhci_irq: mmc0: RESPONSE */
  1714. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  1715. sdhci_finish_command() {
  1716. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xff8000 */
  1717. sdhci_finish_mrq() {
  1718. sdhci_needs_reset();
  1719. }
  1720. }
  1721. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  1722. }
  1723. sdhci_tasklet_finish() {
  1724. sdhci_del_timer();
  1725. sdhci_needs_reset();
  1726. mmc_request_done() {
  1727. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=41 cmd_err=0 cmd_resp=0xff8000 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1728. sdhci_led_control() {
  1729. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  1730. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  1731. }
  1732. mmc_wait_done();
  1733. }
  1734. }
  1735. mmc_retune_release();
  1736. }
  1737. }
  1738. /* ocr_response: mmc0: 2.7 ~ 2.8 | 2.8 ~ 2.9 | 2.9 ~ 3.0 | 3.0 ~ 3.1 | 3.1 ~ 3.2 | 3.2 ~ 3.3 | 3.3 ~ 3.4 | 3.4 ~ 3.5 | 3.5 ~ 3.6 */
  1739. }
  1740. mmc_wait_for_app_cmd() {
  1741. mmc_app_cmd() {
  1742. mmc_wait_for_cmd() {
  1743. mmc_wait_for_req() {
  1744. mmc_start_request() {
  1745. mmc_retune_hold();
  1746. sdhci_led_control() {
  1747. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  1748. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  1749. }
  1750. __mmc_start_request() {
  1751. mmc_retune();
  1752. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x0 cmd_flags=0xf5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1753. sdhci_request() {
  1754. sdhci_get_cd() {
  1755. mmc_gpio_get_cd();
  1756. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1757. }
  1758. sdhci_send_command() {
  1759. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1760. sdhci_prepare_data();
  1761. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  1762. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  1763. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  1764. }
  1765. }
  1766. }
  1767. }
  1768. mmc_wait_for_req_done() {
  1769. sdhci_irq() {
  1770. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  1771. /* sdhci_irq: mmc0: RESPONSE */
  1772. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  1773. sdhci_finish_command() {
  1774. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x120 */
  1775. sdhci_finish_mrq() {
  1776. sdhci_needs_reset();
  1777. }
  1778. }
  1779. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  1780. }
  1781. sdhci_tasklet_finish() {
  1782. sdhci_del_timer();
  1783. sdhci_needs_reset();
  1784. mmc_request_done() {
  1785. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x120 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1786. sdhci_led_control() {
  1787. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  1788. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  1789. }
  1790. mmc_wait_done();
  1791. }
  1792. }
  1793. mmc_retune_release();
  1794. }
  1795. }
  1796. }
  1797. }
  1798. mmc_wait_for_req() {
  1799. mmc_start_request() {
  1800. mmc_retune_hold();
  1801. sdhci_led_control() {
  1802. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  1803. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  1804. }
  1805. __mmc_start_request() {
  1806. mmc_retune();
  1807. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=41 cmd_arg=0x51200000 cmd_flags=0xe1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1808. sdhci_request() {
  1809. sdhci_get_cd() {
  1810. mmc_gpio_get_cd();
  1811. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1812. }
  1813. sdhci_send_command() {
  1814. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1815. sdhci_prepare_data();
  1816. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x51200000 */
  1817. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  1818. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x2902 */
  1819. }
  1820. }
  1821. }
  1822. }
  1823. mmc_wait_for_req_done() {
  1824. sdhci_irq() {
  1825. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  1826. /* sdhci_irq: mmc0: RESPONSE */
  1827. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  1828. sdhci_finish_command() {
  1829. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xff8000 */
  1830. sdhci_finish_mrq() {
  1831. sdhci_needs_reset();
  1832. }
  1833. }
  1834. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  1835. }
  1836. sdhci_tasklet_finish() {
  1837. sdhci_del_timer();
  1838. sdhci_needs_reset();
  1839. mmc_request_done() {
  1840. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=41 cmd_err=0 cmd_resp=0xff8000 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1841. sdhci_led_control() {
  1842. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  1843. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  1844. }
  1845. mmc_wait_done();
  1846. }
  1847. }
  1848. mmc_retune_release();
  1849. }
  1850. }
  1851. /* ocr_response: mmc0: 2.7 ~ 2.8 | 2.8 ~ 2.9 | 2.9 ~ 3.0 | 3.0 ~ 3.1 | 3.1 ~ 3.2 | 3.2 ~ 3.3 | 3.3 ~ 3.4 | 3.4 ~ 3.5 | 3.5 ~ 3.6 */
  1852. }
  1853. mmc_wait_for_app_cmd() {
  1854. mmc_app_cmd() {
  1855. mmc_wait_for_cmd() {
  1856. mmc_wait_for_req() {
  1857. mmc_start_request() {
  1858. mmc_retune_hold();
  1859. sdhci_led_control() {
  1860. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  1861. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  1862. }
  1863. __mmc_start_request() {
  1864. mmc_retune();
  1865. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x0 cmd_flags=0xf5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1866. sdhci_request() {
  1867. sdhci_get_cd() {
  1868. mmc_gpio_get_cd();
  1869. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1870. }
  1871. sdhci_send_command() {
  1872. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1873. sdhci_prepare_data();
  1874. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  1875. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  1876. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  1877. }
  1878. }
  1879. }
  1880. }
  1881. mmc_wait_for_req_done() {
  1882. sdhci_irq() {
  1883. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  1884. /* sdhci_irq: mmc0: RESPONSE */
  1885. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  1886. sdhci_finish_command() {
  1887. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x120 */
  1888. sdhci_finish_mrq() {
  1889. sdhci_needs_reset();
  1890. }
  1891. }
  1892. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  1893. }
  1894. sdhci_tasklet_finish() {
  1895. sdhci_del_timer();
  1896. sdhci_needs_reset();
  1897. mmc_request_done() {
  1898. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x120 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1899. sdhci_led_control() {
  1900. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  1901. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  1902. }
  1903. mmc_wait_done();
  1904. }
  1905. }
  1906. mmc_retune_release();
  1907. }
  1908. }
  1909. }
  1910. }
  1911. mmc_wait_for_req() {
  1912. mmc_start_request() {
  1913. mmc_retune_hold();
  1914. sdhci_led_control() {
  1915. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  1916. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  1917. }
  1918. __mmc_start_request() {
  1919. mmc_retune();
  1920. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=41 cmd_arg=0x51200000 cmd_flags=0xe1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1921. sdhci_request() {
  1922. sdhci_get_cd() {
  1923. mmc_gpio_get_cd();
  1924. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1925. }
  1926. sdhci_send_command() {
  1927. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1928. sdhci_prepare_data();
  1929. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x51200000 */
  1930. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  1931. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x2902 */
  1932. }
  1933. }
  1934. }
  1935. }
  1936. mmc_wait_for_req_done() {
  1937. sdhci_irq() {
  1938. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  1939. /* sdhci_irq: mmc0: RESPONSE */
  1940. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  1941. sdhci_finish_command() {
  1942. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xff8000 */
  1943. sdhci_finish_mrq() {
  1944. sdhci_needs_reset();
  1945. }
  1946. }
  1947. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  1948. }
  1949. sdhci_tasklet_finish() {
  1950. sdhci_del_timer();
  1951. sdhci_needs_reset();
  1952. mmc_request_done() {
  1953. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=41 cmd_err=0 cmd_resp=0xff8000 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1954. sdhci_led_control() {
  1955. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  1956. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  1957. }
  1958. mmc_wait_done();
  1959. }
  1960. }
  1961. mmc_retune_release();
  1962. }
  1963. }
  1964. /* ocr_response: mmc0: 2.7 ~ 2.8 | 2.8 ~ 2.9 | 2.9 ~ 3.0 | 3.0 ~ 3.1 | 3.1 ~ 3.2 | 3.2 ~ 3.3 | 3.3 ~ 3.4 | 3.4 ~ 3.5 | 3.5 ~ 3.6 */
  1965. }
  1966. mmc_wait_for_app_cmd() {
  1967. mmc_app_cmd() {
  1968. mmc_wait_for_cmd() {
  1969. mmc_wait_for_req() {
  1970. mmc_start_request() {
  1971. mmc_retune_hold();
  1972. sdhci_led_control() {
  1973. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  1974. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  1975. }
  1976. __mmc_start_request() {
  1977. mmc_retune();
  1978. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x0 cmd_flags=0xf5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  1979. sdhci_request() {
  1980. sdhci_get_cd() {
  1981. mmc_gpio_get_cd();
  1982. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1983. }
  1984. sdhci_send_command() {
  1985. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  1986. sdhci_prepare_data();
  1987. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  1988. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  1989. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  1990. }
  1991. }
  1992. }
  1993. }
  1994. mmc_wait_for_req_done() {
  1995. sdhci_irq() {
  1996. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  1997. /* sdhci_irq: mmc0: RESPONSE */
  1998. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  1999. sdhci_finish_command() {
  2000. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x120 */
  2001. sdhci_finish_mrq() {
  2002. sdhci_needs_reset();
  2003. }
  2004. }
  2005. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  2006. }
  2007. sdhci_tasklet_finish() {
  2008. sdhci_del_timer();
  2009. sdhci_needs_reset();
  2010. mmc_request_done() {
  2011. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x120 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2012. sdhci_led_control() {
  2013. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  2014. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  2015. }
  2016. mmc_wait_done();
  2017. }
  2018. }
  2019. mmc_retune_release();
  2020. }
  2021. }
  2022. }
  2023. }
  2024. mmc_wait_for_req() {
  2025. mmc_start_request() {
  2026. mmc_retune_hold();
  2027. sdhci_led_control() {
  2028. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  2029. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  2030. }
  2031. __mmc_start_request() {
  2032. mmc_retune();
  2033. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=41 cmd_arg=0x51200000 cmd_flags=0xe1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2034. sdhci_request() {
  2035. sdhci_get_cd() {
  2036. mmc_gpio_get_cd();
  2037. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2038. }
  2039. sdhci_send_command() {
  2040. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2041. sdhci_prepare_data();
  2042. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x51200000 */
  2043. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  2044. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x2902 */
  2045. }
  2046. }
  2047. }
  2048. }
  2049. mmc_wait_for_req_done() {
  2050. sdhci_irq() {
  2051. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  2052. /* sdhci_irq: mmc0: RESPONSE */
  2053. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  2054. sdhci_finish_command() {
  2055. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xff8000 */
  2056. sdhci_finish_mrq() {
  2057. sdhci_needs_reset();
  2058. }
  2059. }
  2060. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  2061. }
  2062. sdhci_tasklet_finish() {
  2063. sdhci_del_timer();
  2064. sdhci_needs_reset();
  2065. mmc_request_done() {
  2066. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=41 cmd_err=0 cmd_resp=0xff8000 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2067. sdhci_led_control() {
  2068. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  2069. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  2070. }
  2071. mmc_wait_done();
  2072. }
  2073. }
  2074. mmc_retune_release();
  2075. }
  2076. }
  2077. /* ocr_response: mmc0: 2.7 ~ 2.8 | 2.8 ~ 2.9 | 2.9 ~ 3.0 | 3.0 ~ 3.1 | 3.1 ~ 3.2 | 3.2 ~ 3.3 | 3.3 ~ 3.4 | 3.4 ~ 3.5 | 3.5 ~ 3.6 */
  2078. }
  2079. mmc_wait_for_app_cmd() {
  2080. mmc_app_cmd() {
  2081. mmc_wait_for_cmd() {
  2082. mmc_wait_for_req() {
  2083. mmc_start_request() {
  2084. mmc_retune_hold();
  2085. sdhci_led_control() {
  2086. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  2087. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  2088. }
  2089. __mmc_start_request() {
  2090. mmc_retune();
  2091. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x0 cmd_flags=0xf5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2092. sdhci_request() {
  2093. sdhci_get_cd() {
  2094. mmc_gpio_get_cd();
  2095. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2096. }
  2097. sdhci_send_command() {
  2098. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2099. sdhci_prepare_data();
  2100. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  2101. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  2102. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  2103. }
  2104. }
  2105. }
  2106. }
  2107. mmc_wait_for_req_done() {
  2108. sdhci_irq() {
  2109. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  2110. /* sdhci_irq: mmc0: RESPONSE */
  2111. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  2112. sdhci_finish_command() {
  2113. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x120 */
  2114. sdhci_finish_mrq() {
  2115. sdhci_needs_reset();
  2116. }
  2117. }
  2118. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  2119. }
  2120. sdhci_tasklet_finish() {
  2121. sdhci_del_timer();
  2122. sdhci_needs_reset();
  2123. mmc_request_done() {
  2124. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x120 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2125. sdhci_led_control() {
  2126. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  2127. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  2128. }
  2129. mmc_wait_done();
  2130. }
  2131. }
  2132. mmc_retune_release();
  2133. }
  2134. }
  2135. }
  2136. }
  2137. mmc_wait_for_req() {
  2138. mmc_start_request() {
  2139. mmc_retune_hold();
  2140. sdhci_led_control() {
  2141. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  2142. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  2143. }
  2144. __mmc_start_request() {
  2145. mmc_retune();
  2146. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=41 cmd_arg=0x51200000 cmd_flags=0xe1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2147. sdhci_request() {
  2148. sdhci_get_cd() {
  2149. mmc_gpio_get_cd();
  2150. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2151. }
  2152. sdhci_send_command() {
  2153. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2154. sdhci_prepare_data();
  2155. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x51200000 */
  2156. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  2157. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x2902 */
  2158. }
  2159. }
  2160. }
  2161. }
  2162. mmc_wait_for_req_done() {
  2163. sdhci_irq() {
  2164. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  2165. /* sdhci_irq: mmc0: RESPONSE */
  2166. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  2167. sdhci_finish_command() {
  2168. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xff8000 */
  2169. sdhci_finish_mrq() {
  2170. sdhci_needs_reset();
  2171. }
  2172. }
  2173. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  2174. }
  2175. sdhci_tasklet_finish() {
  2176. sdhci_del_timer();
  2177. sdhci_needs_reset();
  2178. mmc_request_done() {
  2179. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=41 cmd_err=0 cmd_resp=0xff8000 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2180. sdhci_led_control() {
  2181. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  2182. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  2183. }
  2184. mmc_wait_done();
  2185. }
  2186. }
  2187. mmc_retune_release();
  2188. }
  2189. }
  2190. /* ocr_response: mmc0: 2.7 ~ 2.8 | 2.8 ~ 2.9 | 2.9 ~ 3.0 | 3.0 ~ 3.1 | 3.1 ~ 3.2 | 3.2 ~ 3.3 | 3.3 ~ 3.4 | 3.4 ~ 3.5 | 3.5 ~ 3.6 */
  2191. }
  2192. mmc_wait_for_app_cmd() {
  2193. mmc_app_cmd() {
  2194. mmc_wait_for_cmd() {
  2195. mmc_wait_for_req() {
  2196. mmc_start_request() {
  2197. mmc_retune_hold();
  2198. sdhci_led_control() {
  2199. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  2200. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  2201. }
  2202. __mmc_start_request() {
  2203. mmc_retune();
  2204. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x0 cmd_flags=0xf5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2205. sdhci_request() {
  2206. sdhci_get_cd() {
  2207. mmc_gpio_get_cd();
  2208. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2209. }
  2210. sdhci_send_command() {
  2211. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2212. sdhci_prepare_data();
  2213. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  2214. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  2215. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  2216. }
  2217. }
  2218. }
  2219. }
  2220. mmc_wait_for_req_done() {
  2221. sdhci_irq() {
  2222. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  2223. /* sdhci_irq: mmc0: RESPONSE */
  2224. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  2225. sdhci_finish_command() {
  2226. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x120 */
  2227. sdhci_finish_mrq() {
  2228. sdhci_needs_reset();
  2229. }
  2230. }
  2231. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  2232. }
  2233. sdhci_tasklet_finish() {
  2234. sdhci_del_timer();
  2235. sdhci_needs_reset();
  2236. mmc_request_done() {
  2237. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x120 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2238. sdhci_led_control() {
  2239. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  2240. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  2241. }
  2242. mmc_wait_done();
  2243. }
  2244. }
  2245. mmc_retune_release();
  2246. }
  2247. }
  2248. }
  2249. }
  2250. mmc_wait_for_req() {
  2251. mmc_start_request() {
  2252. mmc_retune_hold();
  2253. sdhci_led_control() {
  2254. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  2255. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  2256. }
  2257. __mmc_start_request() {
  2258. mmc_retune();
  2259. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=41 cmd_arg=0x51200000 cmd_flags=0xe1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2260. sdhci_request() {
  2261. sdhci_get_cd() {
  2262. mmc_gpio_get_cd();
  2263. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2264. }
  2265. sdhci_send_command() {
  2266. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2267. sdhci_prepare_data();
  2268. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x51200000 */
  2269. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  2270. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x2902 */
  2271. }
  2272. }
  2273. }
  2274. }
  2275. mmc_wait_for_req_done() {
  2276. sdhci_irq() {
  2277. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  2278. /* sdhci_irq: mmc0: RESPONSE */
  2279. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  2280. sdhci_finish_command() {
  2281. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xff8000 */
  2282. sdhci_finish_mrq() {
  2283. sdhci_needs_reset();
  2284. }
  2285. }
  2286. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  2287. }
  2288. sdhci_tasklet_finish() {
  2289. sdhci_del_timer();
  2290. sdhci_needs_reset();
  2291. mmc_request_done() {
  2292. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=41 cmd_err=0 cmd_resp=0xff8000 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2293. sdhci_led_control() {
  2294. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  2295. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  2296. }
  2297. mmc_wait_done();
  2298. }
  2299. }
  2300. mmc_retune_release();
  2301. }
  2302. }
  2303. /* ocr_response: mmc0: 2.7 ~ 2.8 | 2.8 ~ 2.9 | 2.9 ~ 3.0 | 3.0 ~ 3.1 | 3.1 ~ 3.2 | 3.2 ~ 3.3 | 3.3 ~ 3.4 | 3.4 ~ 3.5 | 3.5 ~ 3.6 */
  2304. }
  2305. mmc_wait_for_app_cmd() {
  2306. mmc_app_cmd() {
  2307. mmc_wait_for_cmd() {
  2308. mmc_wait_for_req() {
  2309. mmc_start_request() {
  2310. mmc_retune_hold();
  2311. sdhci_led_control() {
  2312. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  2313. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  2314. }
  2315. __mmc_start_request() {
  2316. mmc_retune();
  2317. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x0 cmd_flags=0xf5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2318. sdhci_request() {
  2319. sdhci_get_cd() {
  2320. mmc_gpio_get_cd();
  2321. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2322. }
  2323. sdhci_send_command() {
  2324. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2325. sdhci_prepare_data();
  2326. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  2327. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  2328. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  2329. }
  2330. }
  2331. }
  2332. }
  2333. mmc_wait_for_req_done() {
  2334. sdhci_irq() {
  2335. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  2336. /* sdhci_irq: mmc0: RESPONSE */
  2337. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  2338. sdhci_finish_command() {
  2339. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x120 */
  2340. sdhci_finish_mrq() {
  2341. sdhci_needs_reset();
  2342. }
  2343. }
  2344. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  2345. }
  2346. sdhci_tasklet_finish() {
  2347. sdhci_del_timer();
  2348. sdhci_needs_reset();
  2349. mmc_request_done() {
  2350. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x120 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2351. sdhci_led_control() {
  2352. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  2353. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  2354. }
  2355. mmc_wait_done();
  2356. }
  2357. }
  2358. mmc_retune_release();
  2359. }
  2360. }
  2361. }
  2362. }
  2363. mmc_wait_for_req() {
  2364. mmc_start_request() {
  2365. mmc_retune_hold();
  2366. sdhci_led_control() {
  2367. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  2368. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  2369. }
  2370. __mmc_start_request() {
  2371. mmc_retune();
  2372. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=41 cmd_arg=0x51200000 cmd_flags=0xe1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2373. sdhci_request() {
  2374. sdhci_get_cd() {
  2375. mmc_gpio_get_cd();
  2376. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2377. }
  2378. sdhci_send_command() {
  2379. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2380. sdhci_prepare_data();
  2381. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x51200000 */
  2382. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  2383. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x2902 */
  2384. }
  2385. }
  2386. }
  2387. }
  2388. mmc_wait_for_req_done() {
  2389. sdhci_irq() {
  2390. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  2391. /* sdhci_irq: mmc0: RESPONSE */
  2392. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  2393. sdhci_finish_command() {
  2394. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xff8000 */
  2395. sdhci_finish_mrq() {
  2396. sdhci_needs_reset();
  2397. }
  2398. }
  2399. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  2400. }
  2401. sdhci_tasklet_finish() {
  2402. sdhci_del_timer();
  2403. sdhci_needs_reset();
  2404. mmc_request_done() {
  2405. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=41 cmd_err=0 cmd_resp=0xff8000 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2406. sdhci_led_control() {
  2407. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  2408. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  2409. }
  2410. mmc_wait_done();
  2411. }
  2412. }
  2413. mmc_retune_release();
  2414. }
  2415. }
  2416. /* ocr_response: mmc0: 2.7 ~ 2.8 | 2.8 ~ 2.9 | 2.9 ~ 3.0 | 3.0 ~ 3.1 | 3.1 ~ 3.2 | 3.2 ~ 3.3 | 3.3 ~ 3.4 | 3.4 ~ 3.5 | 3.5 ~ 3.6 */
  2417. }
  2418. mmc_wait_for_app_cmd() {
  2419. mmc_app_cmd() {
  2420. mmc_wait_for_cmd() {
  2421. mmc_wait_for_req() {
  2422. mmc_start_request() {
  2423. mmc_retune_hold();
  2424. sdhci_led_control() {
  2425. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  2426. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  2427. }
  2428. __mmc_start_request() {
  2429. mmc_retune();
  2430. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x0 cmd_flags=0xf5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2431. sdhci_request() {
  2432. sdhci_get_cd() {
  2433. mmc_gpio_get_cd();
  2434. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2435. }
  2436. sdhci_send_command() {
  2437. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2438. sdhci_prepare_data();
  2439. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  2440. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  2441. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  2442. }
  2443. }
  2444. }
  2445. }
  2446. mmc_wait_for_req_done() {
  2447. sdhci_irq() {
  2448. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  2449. /* sdhci_irq: mmc0: RESPONSE */
  2450. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  2451. sdhci_finish_command() {
  2452. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x120 */
  2453. sdhci_finish_mrq() {
  2454. sdhci_needs_reset();
  2455. }
  2456. }
  2457. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  2458. }
  2459. sdhci_tasklet_finish() {
  2460. sdhci_del_timer();
  2461. sdhci_needs_reset();
  2462. mmc_request_done() {
  2463. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x120 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2464. sdhci_led_control() {
  2465. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  2466. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  2467. }
  2468. mmc_wait_done();
  2469. }
  2470. }
  2471. mmc_retune_release();
  2472. }
  2473. }
  2474. }
  2475. }
  2476. mmc_wait_for_req() {
  2477. mmc_start_request() {
  2478. mmc_retune_hold();
  2479. sdhci_led_control() {
  2480. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  2481. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  2482. }
  2483. __mmc_start_request() {
  2484. mmc_retune();
  2485. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=41 cmd_arg=0x51200000 cmd_flags=0xe1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2486. sdhci_request() {
  2487. sdhci_get_cd() {
  2488. mmc_gpio_get_cd();
  2489. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2490. }
  2491. sdhci_send_command() {
  2492. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2493. sdhci_prepare_data();
  2494. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x51200000 */
  2495. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  2496. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x2902 */
  2497. }
  2498. }
  2499. }
  2500. }
  2501. mmc_wait_for_req_done() {
  2502. sdhci_irq() {
  2503. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  2504. /* sdhci_irq: mmc0: RESPONSE */
  2505. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  2506. sdhci_finish_command() {
  2507. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xff8000 */
  2508. sdhci_finish_mrq() {
  2509. sdhci_needs_reset();
  2510. }
  2511. }
  2512. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  2513. }
  2514. sdhci_tasklet_finish() {
  2515. sdhci_del_timer();
  2516. sdhci_needs_reset();
  2517. mmc_request_done() {
  2518. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=41 cmd_err=0 cmd_resp=0xff8000 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2519. sdhci_led_control() {
  2520. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  2521. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  2522. }
  2523. mmc_wait_done();
  2524. }
  2525. }
  2526. mmc_retune_release();
  2527. }
  2528. }
  2529. /* ocr_response: mmc0: 2.7 ~ 2.8 | 2.8 ~ 2.9 | 2.9 ~ 3.0 | 3.0 ~ 3.1 | 3.1 ~ 3.2 | 3.2 ~ 3.3 | 3.3 ~ 3.4 | 3.4 ~ 3.5 | 3.5 ~ 3.6 */
  2530. }
  2531. mmc_wait_for_app_cmd() {
  2532. mmc_app_cmd() {
  2533. mmc_wait_for_cmd() {
  2534. mmc_wait_for_req() {
  2535. mmc_start_request() {
  2536. mmc_retune_hold();
  2537. sdhci_led_control() {
  2538. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  2539. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  2540. }
  2541. __mmc_start_request() {
  2542. mmc_retune();
  2543. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x0 cmd_flags=0xf5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2544. sdhci_request() {
  2545. sdhci_get_cd() {
  2546. mmc_gpio_get_cd();
  2547. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2548. }
  2549. sdhci_send_command() {
  2550. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2551. sdhci_prepare_data();
  2552. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  2553. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  2554. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  2555. }
  2556. }
  2557. }
  2558. }
  2559. mmc_wait_for_req_done() {
  2560. sdhci_irq() {
  2561. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  2562. /* sdhci_irq: mmc0: RESPONSE */
  2563. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  2564. sdhci_finish_command() {
  2565. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x120 */
  2566. sdhci_finish_mrq() {
  2567. sdhci_needs_reset();
  2568. }
  2569. }
  2570. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  2571. }
  2572. sdhci_tasklet_finish() {
  2573. sdhci_del_timer();
  2574. sdhci_needs_reset();
  2575. mmc_request_done() {
  2576. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x120 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2577. sdhci_led_control() {
  2578. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  2579. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  2580. }
  2581. mmc_wait_done();
  2582. }
  2583. }
  2584. mmc_retune_release();
  2585. }
  2586. }
  2587. }
  2588. }
  2589. mmc_wait_for_req() {
  2590. mmc_start_request() {
  2591. mmc_retune_hold();
  2592. sdhci_led_control() {
  2593. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  2594. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  2595. }
  2596. __mmc_start_request() {
  2597. mmc_retune();
  2598. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=41 cmd_arg=0x51200000 cmd_flags=0xe1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2599. sdhci_request() {
  2600. sdhci_get_cd() {
  2601. mmc_gpio_get_cd();
  2602. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2603. }
  2604. sdhci_send_command() {
  2605. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2606. sdhci_prepare_data();
  2607. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x51200000 */
  2608. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  2609. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x2902 */
  2610. }
  2611. }
  2612. }
  2613. }
  2614. mmc_wait_for_req_done() {
  2615. sdhci_irq() {
  2616. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  2617. /* sdhci_irq: mmc0: RESPONSE */
  2618. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  2619. sdhci_finish_command() {
  2620. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xff8000 */
  2621. sdhci_finish_mrq() {
  2622. sdhci_needs_reset();
  2623. }
  2624. }
  2625. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  2626. }
  2627. sdhci_tasklet_finish() {
  2628. sdhci_del_timer();
  2629. sdhci_needs_reset();
  2630. mmc_request_done() {
  2631. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=41 cmd_err=0 cmd_resp=0xff8000 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2632. sdhci_led_control() {
  2633. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  2634. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  2635. }
  2636. mmc_wait_done();
  2637. }
  2638. }
  2639. mmc_retune_release();
  2640. }
  2641. }
  2642. /* ocr_response: mmc0: 2.7 ~ 2.8 | 2.8 ~ 2.9 | 2.9 ~ 3.0 | 3.0 ~ 3.1 | 3.1 ~ 3.2 | 3.2 ~ 3.3 | 3.3 ~ 3.4 | 3.4 ~ 3.5 | 3.5 ~ 3.6 */
  2643. }
  2644. mmc_wait_for_app_cmd() {
  2645. mmc_app_cmd() {
  2646. mmc_wait_for_cmd() {
  2647. mmc_wait_for_req() {
  2648. mmc_start_request() {
  2649. mmc_retune_hold();
  2650. sdhci_led_control() {
  2651. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  2652. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  2653. }
  2654. __mmc_start_request() {
  2655. mmc_retune();
  2656. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x0 cmd_flags=0xf5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2657. sdhci_request() {
  2658. sdhci_get_cd() {
  2659. mmc_gpio_get_cd();
  2660. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2661. }
  2662. sdhci_send_command() {
  2663. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2664. sdhci_prepare_data();
  2665. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  2666. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  2667. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  2668. }
  2669. }
  2670. }
  2671. }
  2672. mmc_wait_for_req_done() {
  2673. sdhci_irq() {
  2674. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  2675. /* sdhci_irq: mmc0: RESPONSE */
  2676. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  2677. sdhci_finish_command() {
  2678. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x120 */
  2679. sdhci_finish_mrq() {
  2680. sdhci_needs_reset();
  2681. }
  2682. }
  2683. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  2684. }
  2685. sdhci_tasklet_finish() {
  2686. sdhci_del_timer();
  2687. sdhci_needs_reset();
  2688. mmc_request_done() {
  2689. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x120 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2690. sdhci_led_control() {
  2691. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  2692. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  2693. }
  2694. mmc_wait_done();
  2695. }
  2696. }
  2697. mmc_retune_release();
  2698. }
  2699. }
  2700. }
  2701. }
  2702. mmc_wait_for_req() {
  2703. mmc_start_request() {
  2704. mmc_retune_hold();
  2705. sdhci_led_control() {
  2706. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  2707. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  2708. }
  2709. __mmc_start_request() {
  2710. mmc_retune();
  2711. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=41 cmd_arg=0x51200000 cmd_flags=0xe1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2712. sdhci_request() {
  2713. sdhci_get_cd() {
  2714. mmc_gpio_get_cd();
  2715. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2716. }
  2717. sdhci_send_command() {
  2718. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2719. sdhci_prepare_data();
  2720. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x51200000 */
  2721. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  2722. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x2902 */
  2723. }
  2724. }
  2725. }
  2726. }
  2727. mmc_wait_for_req_done() {
  2728. sdhci_irq() {
  2729. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  2730. /* sdhci_irq: mmc0: RESPONSE */
  2731. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  2732. sdhci_finish_command() {
  2733. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xff8000 */
  2734. sdhci_finish_mrq() {
  2735. sdhci_needs_reset();
  2736. }
  2737. }
  2738. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  2739. }
  2740. sdhci_tasklet_finish() {
  2741. sdhci_del_timer();
  2742. sdhci_needs_reset();
  2743. mmc_request_done() {
  2744. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=41 cmd_err=0 cmd_resp=0xff8000 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2745. sdhci_led_control() {
  2746. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  2747. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  2748. }
  2749. mmc_wait_done();
  2750. }
  2751. }
  2752. mmc_retune_release();
  2753. }
  2754. }
  2755. /* ocr_response: mmc0: 2.7 ~ 2.8 | 2.8 ~ 2.9 | 2.9 ~ 3.0 | 3.0 ~ 3.1 | 3.1 ~ 3.2 | 3.2 ~ 3.3 | 3.3 ~ 3.4 | 3.4 ~ 3.5 | 3.5 ~ 3.6 */
  2756. }
  2757. mmc_wait_for_app_cmd() {
  2758. mmc_app_cmd() {
  2759. mmc_wait_for_cmd() {
  2760. mmc_wait_for_req() {
  2761. mmc_start_request() {
  2762. mmc_retune_hold();
  2763. sdhci_led_control() {
  2764. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  2765. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  2766. }
  2767. __mmc_start_request() {
  2768. mmc_retune();
  2769. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x0 cmd_flags=0xf5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2770. sdhci_request() {
  2771. sdhci_get_cd() {
  2772. mmc_gpio_get_cd();
  2773. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2774. }
  2775. sdhci_send_command() {
  2776. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2777. sdhci_prepare_data();
  2778. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  2779. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  2780. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  2781. }
  2782. }
  2783. }
  2784. }
  2785. mmc_wait_for_req_done() {
  2786. sdhci_irq() {
  2787. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  2788. /* sdhci_irq: mmc0: RESPONSE */
  2789. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  2790. sdhci_finish_command() {
  2791. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x120 */
  2792. sdhci_finish_mrq() {
  2793. sdhci_needs_reset();
  2794. }
  2795. }
  2796. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  2797. }
  2798. sdhci_tasklet_finish() {
  2799. sdhci_del_timer();
  2800. sdhci_needs_reset();
  2801. mmc_request_done() {
  2802. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x120 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2803. sdhci_led_control() {
  2804. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  2805. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  2806. }
  2807. mmc_wait_done();
  2808. }
  2809. }
  2810. mmc_retune_release();
  2811. }
  2812. }
  2813. }
  2814. }
  2815. mmc_wait_for_req() {
  2816. mmc_start_request() {
  2817. mmc_retune_hold();
  2818. sdhci_led_control() {
  2819. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  2820. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  2821. }
  2822. __mmc_start_request() {
  2823. mmc_retune();
  2824. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=41 cmd_arg=0x51200000 cmd_flags=0xe1 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2825. sdhci_request() {
  2826. sdhci_get_cd() {
  2827. mmc_gpio_get_cd();
  2828. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2829. }
  2830. sdhci_send_command() {
  2831. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2832. sdhci_prepare_data();
  2833. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x51200000 */
  2834. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  2835. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x2902 */
  2836. }
  2837. }
  2838. }
  2839. }
  2840. mmc_wait_for_req_done() {
  2841. sdhci_irq() {
  2842. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  2843. /* sdhci_irq: mmc0: RESPONSE */
  2844. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  2845. sdhci_finish_command() {
  2846. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xc0ff8000 */
  2847. sdhci_finish_mrq() {
  2848. sdhci_needs_reset();
  2849. }
  2850. }
  2851. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  2852. }
  2853. sdhci_tasklet_finish() {
  2854. sdhci_del_timer();
  2855. sdhci_needs_reset();
  2856. mmc_request_done() {
  2857. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=41 cmd_err=0 cmd_resp=0xc0ff8000 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2858. sdhci_led_control() {
  2859. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  2860. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  2861. }
  2862. mmc_wait_done();
  2863. }
  2864. }
  2865. mmc_retune_release();
  2866. }
  2867. }
  2868. /* ocr_response: mmc0: Ready | SDHC or SDXC (CCS) | 2.7 ~ 2.8 | 2.8 ~ 2.9 | 2.9 ~ 3.0 | 3.0 ~ 3.1 | 3.1 ~ 3.2 | 3.2 ~ 3.3 | 3.3 ~ 3.4 | 3.4 ~ 3.5 | 3.5 ~ 3.6 */
  2869. }
  2870. }
  2871. mmc_send_cid() {
  2872. mmc_send_cxd_native() {
  2873. mmc_wait_for_cmd() {
  2874. mmc_wait_for_req() {
  2875. mmc_start_request() {
  2876. mmc_retune_hold();
  2877. sdhci_led_control() {
  2878. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  2879. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  2880. }
  2881. __mmc_start_request() {
  2882. mmc_retune();
  2883. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=2 cmd_arg=0x0 cmd_flags=0x7 cmd_retries=3 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2884. sdhci_request() {
  2885. sdhci_get_cd() {
  2886. mmc_gpio_get_cd();
  2887. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2888. }
  2889. sdhci_send_command() {
  2890. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2891. sdhci_prepare_data();
  2892. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  2893. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  2894. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x209 */
  2895. }
  2896. }
  2897. }
  2898. }
  2899. mmc_wait_for_req_done() {
  2900. sdhci_irq() {
  2901. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  2902. /* sdhci_irq: mmc0: RESPONSE */
  2903. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  2904. sdhci_finish_command() {
  2905. /* sdhci_readl: mmc0: 0x1c [0x1c] => 0x1b534d */
  2906. /* sdhci_readl: mmc0: 0x18 [0x18] => 0x30303030 */
  2907. /* sdhci_readl: mmc0: 0x14 [0x14] => 0x301073a9 */
  2908. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x775d00b1 */
  2909. sdhci_finish_mrq() {
  2910. sdhci_needs_reset();
  2911. }
  2912. }
  2913. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  2914. }
  2915. sdhci_tasklet_finish() {
  2916. sdhci_del_timer();
  2917. sdhci_needs_reset();
  2918. mmc_request_done() {
  2919. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=2 cmd_err=0 cmd_resp=0x1b534d30 0x30303030 0x1073a977 0x5d00b100 cmd_retries=3 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2920. sdhci_led_control() {
  2921. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  2922. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  2923. }
  2924. mmc_wait_done();
  2925. }
  2926. }
  2927. mmc_retune_release();
  2928. }
  2929. }
  2930. }
  2931. }
  2932. }
  2933. } /* mmc_sd_get_cid */
  2934. mmc_alloc_card();
  2935. mmc_send_relative_addr() {
  2936. mmc_wait_for_cmd() {
  2937. mmc_wait_for_req() {
  2938. mmc_start_request() {
  2939. mmc_retune_hold();
  2940. sdhci_led_control() {
  2941. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  2942. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  2943. }
  2944. __mmc_start_request() {
  2945. mmc_retune();
  2946. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=3 cmd_arg=0x0 cmd_flags=0x75 cmd_retries=3 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2947. sdhci_request() {
  2948. sdhci_get_cd() {
  2949. mmc_gpio_get_cd();
  2950. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2951. }
  2952. sdhci_send_command() {
  2953. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  2954. sdhci_prepare_data();
  2955. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  2956. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  2957. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x31a */
  2958. }
  2959. }
  2960. }
  2961. }
  2962. mmc_wait_for_req_done() {
  2963. sdhci_irq() {
  2964. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  2965. /* sdhci_irq: mmc0: RESPONSE */
  2966. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  2967. sdhci_finish_command() {
  2968. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x10520 */
  2969. sdhci_finish_mrq() {
  2970. sdhci_needs_reset();
  2971. }
  2972. }
  2973. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  2974. }
  2975. sdhci_tasklet_finish() {
  2976. sdhci_del_timer();
  2977. sdhci_needs_reset();
  2978. mmc_request_done() {
  2979. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=3 cmd_err=0 cmd_resp=0x10520 0x0 0x0 0x0 cmd_retries=3 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  2980. sdhci_led_control() {
  2981. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  2982. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  2983. }
  2984. mmc_wait_done();
  2985. }
  2986. }
  2987. mmc_retune_release();
  2988. }
  2989. }
  2990. }
  2991. } /* mmc_send_relative_addr */
  2992. mmc_sd_get_csd() {
  2993. mmc_send_csd() {
  2994. mmc_send_cxd_native() {
  2995. mmc_wait_for_cmd() {
  2996. mmc_wait_for_req() {
  2997. mmc_start_request() {
  2998. mmc_retune_hold();
  2999. sdhci_led_control() {
  3000. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  3001. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  3002. }
  3003. __mmc_start_request() {
  3004. mmc_retune();
  3005. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=9 cmd_arg=0x10000 cmd_flags=0x7 cmd_retries=3 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3006. sdhci_request() {
  3007. sdhci_get_cd() {
  3008. mmc_gpio_get_cd();
  3009. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3010. }
  3011. sdhci_send_command() {
  3012. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3013. sdhci_prepare_data();
  3014. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x10000 */
  3015. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  3016. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x909 */
  3017. }
  3018. }
  3019. }
  3020. }
  3021. mmc_wait_for_req_done() {
  3022. sdhci_irq() {
  3023. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  3024. /* sdhci_irq: mmc0: RESPONSE */
  3025. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  3026. sdhci_finish_command() {
  3027. /* sdhci_readl: mmc0: 0x1c [0x1c] => 0x400e00 */
  3028. /* sdhci_readl: mmc0: 0x18 [0x18] => 0x325b5900 */
  3029. /* sdhci_readl: mmc0: 0x14 [0x14] => 0x3b4b7f */
  3030. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x800a4040 */
  3031. sdhci_finish_mrq() {
  3032. sdhci_needs_reset();
  3033. }
  3034. }
  3035. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3036. }
  3037. sdhci_tasklet_finish() {
  3038. sdhci_del_timer();
  3039. sdhci_needs_reset();
  3040. mmc_request_done() {
  3041. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=9 cmd_err=0 cmd_resp=0x400e0032 0x5b590000 0x3b4b7f80 0xa404000 cmd_retries=3 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3042. sdhci_led_control() {
  3043. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  3044. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  3045. }
  3046. mmc_wait_done();
  3047. }
  3048. }
  3049. mmc_retune_release();
  3050. }
  3051. }
  3052. }
  3053. }
  3054. }
  3055. mmc_decode_csd() {
  3056. /* sd_csd: mmc0: struct: 0, cmdclass: 0x5b5, raw: {0x400e0032,0x5b590000,0x3b4b7f80,0xa404000} */
  3057. }
  3058. }
  3059. mmc_decode_cid();
  3060. mmc_select_card() {
  3061. _mmc_select_card() {
  3062. mmc_wait_for_cmd() {
  3063. mmc_wait_for_req() {
  3064. mmc_start_request() {
  3065. mmc_retune_hold();
  3066. sdhci_led_control() {
  3067. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  3068. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  3069. }
  3070. __mmc_start_request() {
  3071. mmc_retune();
  3072. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=7 cmd_arg=0x10000 cmd_flags=0x15 cmd_retries=3 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3073. sdhci_request() {
  3074. sdhci_get_cd() {
  3075. mmc_gpio_get_cd();
  3076. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3077. }
  3078. sdhci_send_command() {
  3079. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3080. sdhci_prepare_data();
  3081. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x10000 */
  3082. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  3083. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x71a */
  3084. }
  3085. }
  3086. }
  3087. }
  3088. mmc_wait_for_req_done() {
  3089. sdhci_irq() {
  3090. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  3091. /* sdhci_irq: mmc0: RESPONSE */
  3092. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  3093. sdhci_finish_command() {
  3094. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x700 */
  3095. sdhci_finish_mrq() {
  3096. sdhci_needs_reset();
  3097. }
  3098. }
  3099. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3100. }
  3101. sdhci_tasklet_finish() {
  3102. sdhci_del_timer();
  3103. sdhci_needs_reset();
  3104. mmc_request_done() {
  3105. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=7 cmd_err=0 cmd_resp=0x700 0x0 0x0 0x0 cmd_retries=3 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3106. sdhci_led_control() {
  3107. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  3108. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  3109. }
  3110. mmc_wait_done();
  3111. }
  3112. }
  3113. mmc_retune_release();
  3114. }
  3115. }
  3116. }
  3117. }
  3118. } /* mmc_select_card */
  3119. mmc_sd_setup_card() {
  3120. mmc_app_send_scr() {
  3121. mmc_app_cmd() {
  3122. mmc_wait_for_cmd() {
  3123. mmc_wait_for_req() {
  3124. mmc_start_request() {
  3125. mmc_retune_hold();
  3126. sdhci_led_control() {
  3127. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  3128. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  3129. }
  3130. __mmc_start_request() {
  3131. mmc_retune();
  3132. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x10000 cmd_flags=0x95 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3133. sdhci_request() {
  3134. sdhci_get_cd() {
  3135. mmc_gpio_get_cd();
  3136. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3137. }
  3138. sdhci_send_command() {
  3139. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3140. sdhci_prepare_data();
  3141. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x10000 */
  3142. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  3143. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  3144. }
  3145. }
  3146. }
  3147. }
  3148. mmc_wait_for_req_done() {
  3149. sdhci_irq() {
  3150. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  3151. /* sdhci_irq: mmc0: RESPONSE */
  3152. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  3153. sdhci_finish_command() {
  3154. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x920 */
  3155. sdhci_finish_mrq() {
  3156. sdhci_needs_reset();
  3157. }
  3158. }
  3159. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3160. }
  3161. sdhci_tasklet_finish() {
  3162. sdhci_del_timer();
  3163. sdhci_needs_reset();
  3164. mmc_request_done() {
  3165. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x920 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3166. sdhci_led_control() {
  3167. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  3168. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  3169. }
  3170. mmc_wait_done();
  3171. }
  3172. }
  3173. mmc_retune_release();
  3174. }
  3175. }
  3176. }
  3177. }
  3178. mmc_set_data_timeout();
  3179. mmc_wait_for_req() {
  3180. mmc_start_request() {
  3181. mmc_retune_hold();
  3182. sdhci_led_control() {
  3183. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  3184. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x1 */
  3185. }
  3186. __mmc_start_request() {
  3187. mmc_retune();
  3188. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=51 cmd_arg=0x0 cmd_flags=0xb5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=1 block_size=8 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3189. sdhci_request() {
  3190. sdhci_get_cd() {
  3191. mmc_gpio_get_cd();
  3192. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3193. }
  3194. sdhci_send_command() {
  3195. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3196. sdhci_prepare_data() {
  3197. sdhci_calc_timeout();
  3198. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  3199. sdhci_pre_dma_transfer();
  3200. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  3201. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  3202. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x1 */
  3203. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  3204. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  3205. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  3206. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7008 */
  3207. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x1 */
  3208. }
  3209. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  3210. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x13 */
  3211. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x333a */
  3212. }
  3213. }
  3214. }
  3215. }
  3216. mmc_wait_for_req_done() {
  3217. sdhci_irq() {
  3218. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  3219. /* sdhci_irq: mmc0: RESPONSE */
  3220. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  3221. sdhci_finish_command() {
  3222. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x920 */
  3223. }
  3224. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3225. }
  3226. sdhci_irq() {
  3227. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  3228. /* sdhci_irq: mmc0: DATA_END */
  3229. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  3230. sdhci_data_irq() {
  3231. sdhci_finish_data() {
  3232. sdhci_finish_mrq() {
  3233. sdhci_needs_reset();
  3234. }
  3235. }
  3236. }
  3237. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3238. }
  3239. sdhci_tasklet_finish() {
  3240. sdhci_del_timer();
  3241. sdhci_needs_reset();
  3242. mmc_request_done() {
  3243. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=51 cmd_err=0 cmd_resp=0x920 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=8 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3244. sdhci_led_control() {
  3245. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  3246. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  3247. }
  3248. mmc_wait_done();
  3249. }
  3250. }
  3251. mmc_retune_release();
  3252. }
  3253. }
  3254. }
  3255. mmc_decode_scr() {
  3256. /* sd_scr: mmc0: version: 0, spec3: 0, width: 0, cmds: 0, raw: 0x0 0x0 */
  3257. }
  3258. mmc_read_ssr() {
  3259. mmc_app_sd_status() {
  3260. mmc_app_cmd() {
  3261. mmc_wait_for_cmd() {
  3262. mmc_wait_for_req() {
  3263. mmc_start_request() {
  3264. mmc_retune_hold();
  3265. sdhci_led_control() {
  3266. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  3267. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  3268. }
  3269. __mmc_start_request() {
  3270. mmc_retune();
  3271. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=55 cmd_arg=0x10000 cmd_flags=0x95 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3272. sdhci_request() {
  3273. sdhci_get_cd() {
  3274. mmc_gpio_get_cd();
  3275. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3276. }
  3277. sdhci_send_command() {
  3278. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3279. sdhci_prepare_data();
  3280. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x10000 */
  3281. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  3282. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x371a */
  3283. }
  3284. }
  3285. }
  3286. }
  3287. mmc_wait_for_req_done() {
  3288. sdhci_irq() {
  3289. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  3290. /* sdhci_irq: mmc0: RESPONSE */
  3291. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  3292. sdhci_finish_command() {
  3293. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x920 */
  3294. sdhci_finish_mrq() {
  3295. sdhci_needs_reset();
  3296. }
  3297. }
  3298. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3299. }
  3300. sdhci_tasklet_finish() {
  3301. sdhci_del_timer();
  3302. sdhci_needs_reset();
  3303. mmc_request_done() {
  3304. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=55 cmd_err=0 cmd_resp=0x920 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3305. sdhci_led_control() {
  3306. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  3307. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  3308. }
  3309. mmc_wait_done();
  3310. }
  3311. }
  3312. mmc_retune_release();
  3313. }
  3314. }
  3315. }
  3316. }
  3317. mmc_set_data_timeout();
  3318. mmc_wait_for_req() {
  3319. mmc_start_request() {
  3320. mmc_retune_hold();
  3321. sdhci_led_control() {
  3322. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  3323. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  3324. }
  3325. __mmc_start_request() {
  3326. mmc_retune();
  3327. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=13 cmd_arg=0x0 cmd_flags=0x1b5 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=1 block_size=64 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3328. sdhci_request() {
  3329. sdhci_get_cd() {
  3330. mmc_gpio_get_cd();
  3331. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3332. }
  3333. sdhci_send_command() {
  3334. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3335. sdhci_prepare_data() {
  3336. sdhci_calc_timeout();
  3337. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  3338. sdhci_pre_dma_transfer();
  3339. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  3340. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  3341. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  3342. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  3343. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  3344. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  3345. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7040 */
  3346. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x1 */
  3347. }
  3348. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  3349. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x13 */
  3350. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xd3a */
  3351. }
  3352. }
  3353. }
  3354. }
  3355. mmc_wait_for_req_done() {
  3356. sdhci_irq() {
  3357. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  3358. /* sdhci_irq: mmc0: RESPONSE */
  3359. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  3360. sdhci_finish_command() {
  3361. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x920 */
  3362. }
  3363. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3364. }
  3365. sdhci_irq() {
  3366. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  3367. /* sdhci_irq: mmc0: DATA_END */
  3368. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  3369. sdhci_data_irq() {
  3370. sdhci_finish_data() {
  3371. sdhci_finish_mrq() {
  3372. sdhci_needs_reset();
  3373. }
  3374. }
  3375. }
  3376. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3377. }
  3378. sdhci_tasklet_finish() {
  3379. sdhci_del_timer();
  3380. sdhci_needs_reset();
  3381. mmc_request_done() {
  3382. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=13 cmd_err=0 cmd_resp=0x920 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=64 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3383. sdhci_led_control() {
  3384. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  3385. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  3386. }
  3387. mmc_wait_done();
  3388. }
  3389. }
  3390. mmc_retune_release();
  3391. }
  3392. }
  3393. }
  3394. /* sd_ssr: mmc0: au: 0, erase time: 0, erase offset: 0x0, raw: {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0} */
  3395. } /* mmc_read_ssr */
  3396. mmc_init_erase();
  3397. mmc_read_switch() {
  3398. /* Unsupported version: 0x0 */
  3399. }
  3400. sdhci_get_ro() {
  3401. sdhci_check_ro() {
  3402. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3403. }
  3404. }
  3405. } /* mmc_sd_setup_card */
  3406. mmc_sd_switch_hs() {
  3407. /* Invalid version: 0 */
  3408. }
  3409. mmc_sd_get_max_clock();
  3410. mmc_set_clock() {
  3411. sdhci_set_ios() {
  3412. sdhci_set_clock() {
  3413. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x0 */
  3414. sdhci_calc_clk();
  3415. sdhci_enable_clk() {
  3416. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x401 */
  3417. /* sdhci_readw: mmc0: 0x2c [CLOCK_CONTROL] => 0x403 */
  3418. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x407 */
  3419. }
  3420. }
  3421. sdhci_set_power() {
  3422. sdhci_set_power_noreg();
  3423. }
  3424. sdhci_set_bus_width() {
  3425. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  3426. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  3427. }
  3428. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  3429. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  3430. /* sdhci_readw: mmc0: 0x3e [ACMD12_ERR] => 0x0 */
  3431. /* sdhci_writew: mmc0: 0x3e [ACMD12_ERR] <= 0x0 */
  3432. /* sdhci_readw: mmc0: 0x2c [CLOCK_CONTROL] => 0x407 */
  3433. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x403 */
  3434. sdhci_set_uhs_signaling() {
  3435. /* sdhci_readw: mmc0: 0x3e [ACMD12_ERR] => 0x0 */
  3436. /* sdhci_writew: mmc0: 0x3e [ACMD12_ERR] <= 0x0 */
  3437. }
  3438. sdhci_set_clock() {
  3439. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x0 */
  3440. sdhci_calc_clk();
  3441. sdhci_enable_clk() {
  3442. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x401 */
  3443. /* sdhci_readw: mmc0: 0x2c [CLOCK_CONTROL] => 0x403 */
  3444. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x407 */
  3445. }
  3446. }
  3447. }
  3448. }
  3449. } /* mmc_sd_init_card */
  3450. mmc_release_host();
  3451. mmc_add_card() {
  3452. mmc_add_card_debugfs();
  3453. mmc_init_context_info();
  3454. mmc_of_find_child_device();
  3455. mmc_bus_uevent();
  3456. mmc_bus_match();
  3457. mmc_bus_probe() {
  3458. mmc_blk_probe() {
  3459. mmc_blk_alloc_req() {
  3460. mmc_init_queue() {
  3461. mmc_init_request();
  3462. mmc_init_request();
  3463. mmc_init_request();
  3464. mmc_init_request();
  3465. mmc_init_request();
  3466. mmc_can_erase();
  3467. mmc_calc_max_discard() {
  3468. mmc_do_calc_max_discard() {
  3469. mmc_erase_timeout();
  3470. mmc_erase_timeout();
  3471. mmc_erase_timeout();
  3472. mmc_erase_timeout();
  3473. mmc_erase_timeout();
  3474. mmc_erase_timeout();
  3475. mmc_erase_timeout();
  3476. mmc_erase_timeout();
  3477. mmc_erase_timeout();
  3478. mmc_erase_timeout();
  3479. mmc_erase_timeout();
  3480. mmc_erase_timeout();
  3481. mmc_erase_timeout();
  3482. mmc_erase_timeout();
  3483. mmc_erase_timeout();
  3484. mmc_erase_timeout();
  3485. }
  3486. mmc_can_trim();
  3487. }
  3488. mmc_can_secure_erase_trim();
  3489. }
  3490. }
  3491. mmc_add_disk() {
  3492. mmc_blk_open() {
  3493. mmc_blk_get();
  3494. }
  3495. mmc_init_request();
  3496. mmc_request_fn();
  3497. mmc_request_fn();
  3498. mmc_queue_thread() {
  3499. mmc_prep_request() {
  3500. mmc_access_rpmb();
  3501. }
  3502. mmc_blk_issue_rq() {
  3503. mmc_get_card() {
  3504. __mmc_claim_host();
  3505. }
  3506. mmc_blk_issue_rw_rq() {
  3507. mmc_blk_rw_rq_prep() {
  3508. mmc_set_data_timeout();
  3509. mmc_queue_map_sg();
  3510. }
  3511. mmc_start_areq() {
  3512. sdhci_pre_req() {
  3513. sdhci_pre_dma_transfer();
  3514. }
  3515. mmc_start_request() {
  3516. mmc_retune_hold();
  3517. sdhci_led_control() {
  3518. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  3519. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  3520. }
  3521. __mmc_start_request() {
  3522. mmc_retune();
  3523. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0x0 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3524. sdhci_request() {
  3525. sdhci_get_cd() {
  3526. mmc_gpio_get_cd();
  3527. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3528. }
  3529. sdhci_send_command() {
  3530. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3531. sdhci_prepare_data() {
  3532. sdhci_calc_timeout();
  3533. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  3534. sdhci_pre_dma_transfer();
  3535. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  3536. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  3537. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  3538. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  3539. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  3540. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  3541. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  3542. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  3543. }
  3544. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  3545. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  3546. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  3547. }
  3548. }
  3549. }
  3550. }
  3551. }
  3552. }
  3553. }
  3554. mmc_blk_issue_rq() {
  3555. mmc_blk_issue_rw_rq() {
  3556. mmc_start_areq() {
  3557. sdhci_irq() {
  3558. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  3559. /* sdhci_irq: mmc0: RESPONSE */
  3560. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  3561. sdhci_finish_command() {
  3562. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  3563. }
  3564. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3565. }
  3566. mmc_bus_uevent();
  3567. sdhci_irq() {
  3568. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  3569. /* sdhci_irq: mmc0: DATA_END */
  3570. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  3571. sdhci_data_irq() {
  3572. sdhci_finish_data() {
  3573. sdhci_send_command() {
  3574. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ef0000 */
  3575. sdhci_prepare_data();
  3576. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  3577. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  3578. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  3579. }
  3580. }
  3581. }
  3582. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3583. }
  3584. sdhci_irq() {
  3585. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  3586. /* sdhci_irq: mmc0: RESPONSE */
  3587. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  3588. sdhci_finish_command() {
  3589. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  3590. sdhci_finish_mrq() {
  3591. sdhci_needs_reset();
  3592. }
  3593. }
  3594. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3595. }
  3596. sdhci_tasklet_finish() {
  3597. sdhci_del_timer();
  3598. sdhci_needs_reset();
  3599. mmc_request_done() {
  3600. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3601. sdhci_led_control() {
  3602. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  3603. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  3604. }
  3605. mmc_wait_data_done();
  3606. }
  3607. }
  3608. mmc_blk_err_check();
  3609. mmc_retune_release();
  3610. sdhci_post_req();
  3611. } /* mmc_start_areq */
  3612. mmc_blk_release() {
  3613. mmc_blk_put();
  3614. }
  3615. } /* mmc_add_disk */
  3616. } /* mmc_blk_probe */
  3617. } /* mmc_bus_probe */
  3618. mmc_bus_uevent();
  3619. } /* mmc_add_card */
  3620. __mmc_claim_host() {
  3621. mmc_name_show();
  3622. mmc_exit_request();
  3623. } /* mmc_blk_issue_rw_rq */
  3624. mmc_put_card() {
  3625. mmc_release_host() {
  3626. } /* __mmc_claim_host */
  3627. } /* mmc_attach_sd */
  3628. mmc_release_host();
  3629. } /* mmc_rescan */
  3630. }
  3631. } /* mmc_put_card */
  3632. } /* mmc_blk_issue_rq */
  3633. mmc_blk_open() {
  3634. mmc_blk_get();
  3635. }
  3636. mmc_name_show();
  3637. mmc_serial_show();
  3638. mmc_blk_open() {
  3639. mmc_blk_get();
  3640. }
  3641. mmc_blk_ioctl();
  3642. mmc_init_request();
  3643. mmc_request_fn();
  3644. mmc_prep_request() {
  3645. mmc_access_rpmb();
  3646. }
  3647. mmc_blk_issue_rq() {
  3648. mmc_get_card() {
  3649. __mmc_claim_host();
  3650. }
  3651. mmc_blk_issue_rw_rq() {
  3652. mmc_blk_rw_rq_prep() {
  3653. mmc_set_data_timeout();
  3654. mmc_queue_map_sg();
  3655. }
  3656. mmc_start_areq() {
  3657. sdhci_pre_req() {
  3658. sdhci_pre_dma_transfer();
  3659. }
  3660. mmc_start_request() {
  3661. mmc_retune_hold();
  3662. sdhci_led_control() {
  3663. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  3664. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  3665. }
  3666. __mmc_start_request() {
  3667. mmc_retune();
  3668. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2f80 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3669. sdhci_request() {
  3670. sdhci_get_cd() {
  3671. mmc_gpio_get_cd();
  3672. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3673. }
  3674. sdhci_send_command() {
  3675. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3676. sdhci_prepare_data() {
  3677. sdhci_calc_timeout();
  3678. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  3679. sdhci_pre_dma_transfer();
  3680. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  3681. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  3682. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  3683. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  3684. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  3685. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  3686. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  3687. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  3688. }
  3689. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2f80 */
  3690. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  3691. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  3692. }
  3693. }
  3694. }
  3695. }
  3696. }
  3697. }
  3698. }
  3699. mmc_blk_issue_rq() {
  3700. mmc_blk_issue_rw_rq() {
  3701. mmc_start_areq() {
  3702. sdhci_irq() {
  3703. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  3704. /* sdhci_irq: mmc0: RESPONSE */
  3705. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  3706. sdhci_finish_command() {
  3707. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  3708. }
  3709. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3710. }
  3711. sdhci_irq() {
  3712. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  3713. /* sdhci_irq: mmc0: DATA_END */
  3714. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  3715. sdhci_data_irq() {
  3716. sdhci_finish_data() {
  3717. sdhci_send_command() {
  3718. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3719. sdhci_prepare_data();
  3720. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  3721. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  3722. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  3723. }
  3724. }
  3725. }
  3726. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3727. }
  3728. sdhci_irq() {
  3729. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  3730. /* sdhci_irq: mmc0: RESPONSE */
  3731. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  3732. sdhci_finish_command() {
  3733. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  3734. sdhci_finish_mrq() {
  3735. sdhci_needs_reset();
  3736. }
  3737. }
  3738. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3739. }
  3740. sdhci_tasklet_finish() {
  3741. sdhci_del_timer();
  3742. sdhci_needs_reset();
  3743. mmc_request_done() {
  3744. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3745. sdhci_led_control() {
  3746. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  3747. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  3748. }
  3749. mmc_wait_data_done();
  3750. }
  3751. }
  3752. mmc_blk_err_check();
  3753. mmc_retune_release();
  3754. sdhci_post_req();
  3755. } /* mmc_start_areq */
  3756. mmc_exit_request();
  3757. mmc_request_fn();
  3758. } /* mmc_blk_issue_rw_rq */
  3759. mmc_put_card() {
  3760. mmc_release_host();
  3761. }
  3762. } /* mmc_blk_issue_rq */
  3763. mmc_init_request();
  3764. mmc_request_fn();
  3765. mmc_prep_request() {
  3766. mmc_access_rpmb();
  3767. }
  3768. mmc_blk_issue_rq() {
  3769. mmc_get_card() {
  3770. __mmc_claim_host();
  3771. }
  3772. mmc_blk_issue_rw_rq() {
  3773. mmc_blk_rw_rq_prep() {
  3774. mmc_set_data_timeout();
  3775. mmc_queue_map_sg();
  3776. }
  3777. mmc_start_areq() {
  3778. sdhci_pre_req() {
  3779. sdhci_pre_dma_transfer();
  3780. }
  3781. mmc_start_request() {
  3782. mmc_retune_hold();
  3783. sdhci_led_control() {
  3784. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  3785. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  3786. }
  3787. __mmc_start_request() {
  3788. mmc_retune();
  3789. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2ff0 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3790. sdhci_request() {
  3791. sdhci_get_cd() {
  3792. mmc_gpio_get_cd();
  3793. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3794. }
  3795. sdhci_send_command() {
  3796. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3797. sdhci_prepare_data() {
  3798. sdhci_calc_timeout();
  3799. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  3800. sdhci_pre_dma_transfer();
  3801. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  3802. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  3803. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  3804. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  3805. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  3806. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  3807. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  3808. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  3809. }
  3810. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2ff0 */
  3811. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  3812. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  3813. }
  3814. }
  3815. }
  3816. }
  3817. }
  3818. }
  3819. }
  3820. mmc_blk_issue_rq() {
  3821. mmc_blk_issue_rw_rq() {
  3822. mmc_start_areq() {
  3823. sdhci_irq() {
  3824. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  3825. /* sdhci_irq: mmc0: RESPONSE */
  3826. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  3827. sdhci_finish_command() {
  3828. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  3829. }
  3830. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3831. }
  3832. sdhci_irq() {
  3833. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  3834. /* sdhci_irq: mmc0: DATA_END */
  3835. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  3836. sdhci_data_irq() {
  3837. sdhci_finish_data() {
  3838. sdhci_send_command() {
  3839. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3840. sdhci_prepare_data();
  3841. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  3842. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  3843. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  3844. }
  3845. }
  3846. }
  3847. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3848. }
  3849. sdhci_irq() {
  3850. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  3851. /* sdhci_irq: mmc0: RESPONSE */
  3852. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  3853. sdhci_finish_command() {
  3854. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  3855. sdhci_finish_mrq() {
  3856. sdhci_needs_reset();
  3857. }
  3858. }
  3859. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3860. }
  3861. sdhci_tasklet_finish() {
  3862. sdhci_del_timer();
  3863. sdhci_needs_reset();
  3864. mmc_request_done() {
  3865. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3866. sdhci_led_control() {
  3867. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  3868. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  3869. }
  3870. mmc_wait_data_done();
  3871. }
  3872. }
  3873. mmc_blk_err_check();
  3874. mmc_retune_release();
  3875. sdhci_post_req();
  3876. } /* mmc_start_areq */
  3877. mmc_exit_request();
  3878. mmc_request_fn();
  3879. } /* mmc_blk_issue_rw_rq */
  3880. mmc_put_card() {
  3881. mmc_release_host();
  3882. }
  3883. } /* mmc_blk_issue_rq */
  3884. mmc_init_request();
  3885. mmc_request_fn();
  3886. mmc_prep_request() {
  3887. mmc_access_rpmb();
  3888. }
  3889. mmc_blk_issue_rq() {
  3890. mmc_get_card() {
  3891. __mmc_claim_host();
  3892. }
  3893. mmc_blk_issue_rw_rq() {
  3894. mmc_blk_rw_rq_prep() {
  3895. mmc_set_data_timeout();
  3896. mmc_queue_map_sg();
  3897. }
  3898. mmc_start_areq() {
  3899. sdhci_pre_req() {
  3900. sdhci_pre_dma_transfer();
  3901. }
  3902. mmc_start_request() {
  3903. mmc_retune_hold();
  3904. sdhci_led_control() {
  3905. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  3906. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  3907. }
  3908. __mmc_start_request() {
  3909. mmc_retune();
  3910. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0x0 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3911. sdhci_request() {
  3912. sdhci_get_cd() {
  3913. mmc_gpio_get_cd();
  3914. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3915. }
  3916. sdhci_send_command() {
  3917. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  3918. sdhci_prepare_data() {
  3919. sdhci_calc_timeout();
  3920. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  3921. sdhci_pre_dma_transfer();
  3922. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  3923. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  3924. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  3925. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  3926. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  3927. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  3928. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  3929. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  3930. }
  3931. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  3932. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  3933. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  3934. }
  3935. }
  3936. }
  3937. }
  3938. }
  3939. }
  3940. }
  3941. mmc_blk_issue_rq() {
  3942. mmc_blk_issue_rw_rq() {
  3943. mmc_start_areq() {
  3944. sdhci_irq() {
  3945. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  3946. /* sdhci_irq: mmc0: RESPONSE */
  3947. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  3948. sdhci_finish_command() {
  3949. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  3950. }
  3951. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3952. }
  3953. sdhci_irq() {
  3954. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  3955. /* sdhci_irq: mmc0: DATA_END */
  3956. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  3957. sdhci_data_irq() {
  3958. sdhci_finish_data() {
  3959. sdhci_send_command() {
  3960. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ef0000 */
  3961. sdhci_prepare_data();
  3962. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  3963. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  3964. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  3965. }
  3966. }
  3967. }
  3968. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3969. }
  3970. sdhci_irq() {
  3971. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  3972. /* sdhci_irq: mmc0: RESPONSE */
  3973. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  3974. sdhci_finish_command() {
  3975. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  3976. sdhci_finish_mrq() {
  3977. sdhci_needs_reset();
  3978. }
  3979. }
  3980. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  3981. }
  3982. sdhci_tasklet_finish() {
  3983. sdhci_del_timer();
  3984. sdhci_needs_reset();
  3985. mmc_request_done() {
  3986. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  3987. sdhci_led_control() {
  3988. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  3989. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  3990. }
  3991. mmc_wait_data_done();
  3992. }
  3993. }
  3994. mmc_blk_err_check();
  3995. mmc_retune_release();
  3996. sdhci_post_req();
  3997. } /* mmc_start_areq */
  3998. mmc_exit_request();
  3999. mmc_request_fn();
  4000. } /* mmc_blk_issue_rw_rq */
  4001. mmc_put_card() {
  4002. mmc_release_host();
  4003. }
  4004. } /* mmc_blk_issue_rq */
  4005. mmc_init_request();
  4006. mmc_request_fn();
  4007. mmc_prep_request() {
  4008. mmc_access_rpmb();
  4009. }
  4010. mmc_blk_issue_rq() {
  4011. mmc_get_card() {
  4012. __mmc_claim_host();
  4013. }
  4014. mmc_blk_issue_rw_rq() {
  4015. mmc_blk_rw_rq_prep() {
  4016. mmc_set_data_timeout();
  4017. mmc_queue_map_sg();
  4018. }
  4019. mmc_start_areq() {
  4020. sdhci_pre_req() {
  4021. sdhci_pre_dma_transfer();
  4022. }
  4023. mmc_start_request() {
  4024. mmc_retune_hold();
  4025. sdhci_led_control() {
  4026. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  4027. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  4028. }
  4029. __mmc_start_request() {
  4030. mmc_retune();
  4031. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0x8 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  4032. sdhci_request() {
  4033. sdhci_get_cd() {
  4034. mmc_gpio_get_cd();
  4035. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4036. }
  4037. sdhci_send_command() {
  4038. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4039. sdhci_prepare_data() {
  4040. sdhci_calc_timeout();
  4041. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  4042. sdhci_pre_dma_transfer();
  4043. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  4044. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  4045. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  4046. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  4047. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  4048. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  4049. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  4050. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  4051. }
  4052. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x8 */
  4053. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  4054. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  4055. }
  4056. }
  4057. }
  4058. }
  4059. }
  4060. }
  4061. }
  4062. mmc_blk_issue_rq() {
  4063. mmc_blk_issue_rw_rq() {
  4064. mmc_start_areq() {
  4065. sdhci_irq() {
  4066. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  4067. /* sdhci_irq: mmc0: RESPONSE */
  4068. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  4069. sdhci_finish_command() {
  4070. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  4071. }
  4072. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4073. }
  4074. sdhci_irq() {
  4075. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  4076. /* sdhci_irq: mmc0: DATA_END */
  4077. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  4078. sdhci_data_irq() {
  4079. sdhci_finish_data() {
  4080. sdhci_send_command() {
  4081. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ef0000 */
  4082. sdhci_prepare_data();
  4083. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  4084. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  4085. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  4086. }
  4087. }
  4088. }
  4089. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4090. }
  4091. sdhci_irq() {
  4092. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  4093. /* sdhci_irq: mmc0: RESPONSE */
  4094. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  4095. sdhci_finish_command() {
  4096. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  4097. sdhci_finish_mrq() {
  4098. sdhci_needs_reset();
  4099. }
  4100. }
  4101. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4102. }
  4103. sdhci_tasklet_finish() {
  4104. sdhci_del_timer();
  4105. sdhci_needs_reset();
  4106. mmc_request_done() {
  4107. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  4108. sdhci_led_control() {
  4109. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  4110. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  4111. }
  4112. mmc_wait_data_done();
  4113. }
  4114. }
  4115. mmc_blk_err_check();
  4116. mmc_retune_release();
  4117. sdhci_post_req();
  4118. } /* mmc_start_areq */
  4119. mmc_exit_request();
  4120. mmc_request_fn();
  4121. } /* mmc_blk_issue_rw_rq */
  4122. mmc_put_card() {
  4123. mmc_release_host();
  4124. }
  4125. } /* mmc_blk_issue_rq */
  4126. mmc_init_request();
  4127. mmc_request_fn();
  4128. mmc_prep_request() {
  4129. mmc_access_rpmb();
  4130. }
  4131. mmc_blk_issue_rq() {
  4132. mmc_get_card() {
  4133. __mmc_claim_host();
  4134. }
  4135. mmc_blk_issue_rw_rq() {
  4136. mmc_blk_rw_rq_prep() {
  4137. mmc_set_data_timeout();
  4138. mmc_queue_map_sg();
  4139. }
  4140. mmc_start_areq() {
  4141. sdhci_pre_req() {
  4142. sdhci_pre_dma_transfer();
  4143. }
  4144. mmc_start_request() {
  4145. mmc_retune_hold();
  4146. sdhci_led_control() {
  4147. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  4148. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  4149. }
  4150. __mmc_start_request() {
  4151. mmc_retune();
  4152. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2ff8 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  4153. sdhci_request() {
  4154. sdhci_get_cd() {
  4155. mmc_gpio_get_cd();
  4156. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4157. }
  4158. sdhci_send_command() {
  4159. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4160. sdhci_prepare_data() {
  4161. sdhci_calc_timeout();
  4162. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  4163. sdhci_pre_dma_transfer();
  4164. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  4165. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  4166. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  4167. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  4168. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  4169. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  4170. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  4171. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  4172. }
  4173. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2ff8 */
  4174. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  4175. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  4176. }
  4177. }
  4178. }
  4179. }
  4180. }
  4181. }
  4182. }
  4183. mmc_blk_issue_rq() {
  4184. mmc_blk_issue_rw_rq() {
  4185. mmc_start_areq() {
  4186. sdhci_irq() {
  4187. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  4188. /* sdhci_irq: mmc0: RESPONSE */
  4189. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  4190. sdhci_finish_command() {
  4191. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  4192. }
  4193. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4194. }
  4195. sdhci_irq() {
  4196. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  4197. /* sdhci_irq: mmc0: DATA_END */
  4198. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  4199. sdhci_data_irq() {
  4200. sdhci_finish_data() {
  4201. sdhci_send_command() {
  4202. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4203. sdhci_prepare_data();
  4204. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  4205. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  4206. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  4207. }
  4208. }
  4209. }
  4210. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4211. }
  4212. sdhci_irq() {
  4213. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  4214. /* sdhci_irq: mmc0: RESPONSE */
  4215. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  4216. sdhci_finish_command() {
  4217. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  4218. sdhci_finish_mrq() {
  4219. sdhci_needs_reset();
  4220. }
  4221. }
  4222. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4223. }
  4224. sdhci_tasklet_finish() {
  4225. sdhci_del_timer();
  4226. sdhci_needs_reset();
  4227. mmc_request_done() {
  4228. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  4229. sdhci_led_control() {
  4230. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  4231. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  4232. }
  4233. mmc_wait_data_done();
  4234. }
  4235. }
  4236. mmc_blk_err_check();
  4237. mmc_retune_release();
  4238. sdhci_post_req();
  4239. } /* mmc_start_areq */
  4240. mmc_exit_request();
  4241. mmc_request_fn();
  4242. } /* mmc_blk_issue_rw_rq */
  4243. mmc_put_card() {
  4244. mmc_release_host();
  4245. }
  4246. } /* mmc_blk_issue_rq */
  4247. mmc_init_request();
  4248. mmc_request_fn();
  4249. mmc_prep_request() {
  4250. mmc_access_rpmb();
  4251. }
  4252. mmc_blk_issue_rq() {
  4253. mmc_get_card() {
  4254. __mmc_claim_host();
  4255. }
  4256. mmc_blk_issue_rw_rq() {
  4257. mmc_blk_rw_rq_prep() {
  4258. mmc_set_data_timeout();
  4259. mmc_queue_map_sg();
  4260. }
  4261. mmc_start_areq() {
  4262. sdhci_pre_req() {
  4263. sdhci_pre_dma_transfer();
  4264. }
  4265. mmc_start_request() {
  4266. mmc_retune_hold();
  4267. sdhci_led_control() {
  4268. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  4269. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  4270. }
  4271. __mmc_start_request() {
  4272. mmc_retune();
  4273. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2ef8 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  4274. sdhci_request() {
  4275. sdhci_get_cd() {
  4276. mmc_gpio_get_cd();
  4277. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4278. }
  4279. sdhci_send_command() {
  4280. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4281. sdhci_prepare_data() {
  4282. sdhci_calc_timeout();
  4283. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  4284. sdhci_pre_dma_transfer();
  4285. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  4286. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  4287. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  4288. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  4289. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  4290. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  4291. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  4292. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  4293. }
  4294. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2ef8 */
  4295. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  4296. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  4297. }
  4298. }
  4299. }
  4300. }
  4301. }
  4302. }
  4303. }
  4304. mmc_blk_issue_rq() {
  4305. mmc_blk_issue_rw_rq() {
  4306. mmc_start_areq() {
  4307. sdhci_irq() {
  4308. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  4309. /* sdhci_irq: mmc0: RESPONSE */
  4310. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  4311. sdhci_finish_command() {
  4312. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  4313. }
  4314. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4315. }
  4316. sdhci_irq() {
  4317. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  4318. /* sdhci_irq: mmc0: DATA_END */
  4319. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  4320. sdhci_data_irq() {
  4321. sdhci_finish_data() {
  4322. sdhci_send_command() {
  4323. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4324. sdhci_prepare_data();
  4325. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  4326. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  4327. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  4328. }
  4329. }
  4330. }
  4331. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4332. }
  4333. sdhci_irq() {
  4334. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  4335. /* sdhci_irq: mmc0: RESPONSE */
  4336. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  4337. sdhci_finish_command() {
  4338. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  4339. sdhci_finish_mrq() {
  4340. sdhci_needs_reset();
  4341. }
  4342. }
  4343. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4344. }
  4345. sdhci_tasklet_finish() {
  4346. sdhci_del_timer();
  4347. sdhci_needs_reset();
  4348. mmc_request_done() {
  4349. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  4350. sdhci_led_control() {
  4351. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  4352. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  4353. }
  4354. mmc_wait_data_done();
  4355. }
  4356. }
  4357. mmc_blk_err_check();
  4358. mmc_retune_release();
  4359. sdhci_post_req();
  4360. } /* mmc_start_areq */
  4361. mmc_exit_request();
  4362. mmc_request_fn();
  4363. } /* mmc_blk_issue_rw_rq */
  4364. mmc_put_card() {
  4365. mmc_release_host();
  4366. }
  4367. } /* mmc_blk_issue_rq */
  4368. mmc_init_request();
  4369. mmc_request_fn();
  4370. mmc_prep_request() {
  4371. mmc_access_rpmb();
  4372. }
  4373. mmc_blk_issue_rq() {
  4374. mmc_get_card() {
  4375. __mmc_claim_host();
  4376. }
  4377. mmc_blk_issue_rw_rq() {
  4378. mmc_blk_rw_rq_prep() {
  4379. mmc_set_data_timeout();
  4380. mmc_queue_map_sg();
  4381. }
  4382. mmc_start_areq() {
  4383. sdhci_pre_req() {
  4384. sdhci_pre_dma_transfer();
  4385. }
  4386. mmc_start_request() {
  4387. mmc_retune_hold();
  4388. sdhci_led_control() {
  4389. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  4390. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  4391. }
  4392. __mmc_start_request() {
  4393. mmc_retune();
  4394. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2fc0 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  4395. sdhci_request() {
  4396. sdhci_get_cd() {
  4397. mmc_gpio_get_cd();
  4398. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4399. }
  4400. sdhci_send_command() {
  4401. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4402. sdhci_prepare_data() {
  4403. sdhci_calc_timeout();
  4404. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  4405. sdhci_pre_dma_transfer();
  4406. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  4407. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  4408. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  4409. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  4410. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  4411. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  4412. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  4413. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  4414. }
  4415. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2fc0 */
  4416. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  4417. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  4418. }
  4419. }
  4420. }
  4421. }
  4422. }
  4423. }
  4424. }
  4425. mmc_blk_issue_rq() {
  4426. mmc_blk_issue_rw_rq() {
  4427. mmc_start_areq() {
  4428. sdhci_irq() {
  4429. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  4430. /* sdhci_irq: mmc0: RESPONSE */
  4431. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  4432. sdhci_finish_command() {
  4433. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  4434. }
  4435. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4436. }
  4437. sdhci_irq() {
  4438. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  4439. /* sdhci_irq: mmc0: DATA_END */
  4440. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  4441. sdhci_data_irq() {
  4442. sdhci_finish_data() {
  4443. sdhci_send_command() {
  4444. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4445. sdhci_prepare_data();
  4446. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  4447. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  4448. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  4449. }
  4450. }
  4451. }
  4452. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4453. }
  4454. sdhci_irq() {
  4455. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  4456. /* sdhci_irq: mmc0: RESPONSE */
  4457. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  4458. sdhci_finish_command() {
  4459. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  4460. sdhci_finish_mrq() {
  4461. sdhci_needs_reset();
  4462. }
  4463. }
  4464. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4465. }
  4466. sdhci_tasklet_finish() {
  4467. sdhci_del_timer();
  4468. sdhci_needs_reset();
  4469. mmc_request_done() {
  4470. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  4471. sdhci_led_control() {
  4472. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  4473. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  4474. }
  4475. mmc_wait_data_done();
  4476. }
  4477. }
  4478. mmc_blk_err_check();
  4479. mmc_retune_release();
  4480. sdhci_post_req();
  4481. } /* mmc_start_areq */
  4482. mmc_exit_request();
  4483. mmc_request_fn();
  4484. } /* mmc_blk_issue_rw_rq */
  4485. mmc_put_card() {
  4486. mmc_release_host();
  4487. }
  4488. } /* mmc_blk_issue_rq */
  4489. mmc_init_request();
  4490. mmc_request_fn();
  4491. mmc_prep_request() {
  4492. mmc_access_rpmb();
  4493. }
  4494. mmc_blk_issue_rq() {
  4495. mmc_get_card() {
  4496. __mmc_claim_host();
  4497. }
  4498. mmc_blk_issue_rw_rq() {
  4499. mmc_blk_rw_rq_prep() {
  4500. mmc_set_data_timeout();
  4501. mmc_queue_map_sg();
  4502. }
  4503. mmc_start_areq() {
  4504. sdhci_pre_req() {
  4505. sdhci_pre_dma_transfer();
  4506. }
  4507. mmc_start_request() {
  4508. mmc_retune_hold();
  4509. sdhci_led_control() {
  4510. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  4511. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  4512. }
  4513. __mmc_start_request() {
  4514. mmc_retune();
  4515. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2f00 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  4516. sdhci_request() {
  4517. sdhci_get_cd() {
  4518. mmc_gpio_get_cd();
  4519. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4520. }
  4521. sdhci_send_command() {
  4522. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4523. sdhci_prepare_data() {
  4524. sdhci_calc_timeout();
  4525. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  4526. sdhci_pre_dma_transfer();
  4527. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  4528. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  4529. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  4530. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  4531. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  4532. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  4533. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  4534. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  4535. }
  4536. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2f00 */
  4537. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  4538. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  4539. }
  4540. }
  4541. }
  4542. }
  4543. }
  4544. }
  4545. }
  4546. mmc_blk_issue_rq() {
  4547. mmc_blk_issue_rw_rq() {
  4548. mmc_start_areq() {
  4549. sdhci_irq() {
  4550. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  4551. /* sdhci_irq: mmc0: RESPONSE */
  4552. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  4553. sdhci_finish_command() {
  4554. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  4555. }
  4556. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4557. }
  4558. sdhci_irq() {
  4559. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  4560. /* sdhci_irq: mmc0: DATA_END */
  4561. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  4562. sdhci_data_irq() {
  4563. sdhci_finish_data() {
  4564. sdhci_send_command() {
  4565. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4566. sdhci_prepare_data();
  4567. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  4568. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  4569. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  4570. }
  4571. }
  4572. }
  4573. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4574. }
  4575. sdhci_irq() {
  4576. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  4577. /* sdhci_irq: mmc0: RESPONSE */
  4578. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  4579. sdhci_finish_command() {
  4580. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  4581. sdhci_finish_mrq() {
  4582. sdhci_needs_reset();
  4583. }
  4584. }
  4585. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4586. }
  4587. sdhci_tasklet_finish() {
  4588. sdhci_del_timer();
  4589. sdhci_needs_reset();
  4590. mmc_request_done() {
  4591. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  4592. sdhci_led_control() {
  4593. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  4594. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  4595. }
  4596. mmc_wait_data_done();
  4597. }
  4598. }
  4599. mmc_blk_err_check();
  4600. mmc_retune_release();
  4601. sdhci_post_req();
  4602. } /* mmc_start_areq */
  4603. mmc_exit_request();
  4604. mmc_request_fn();
  4605. } /* mmc_blk_issue_rw_rq */
  4606. mmc_put_card() {
  4607. mmc_release_host();
  4608. }
  4609. } /* mmc_blk_issue_rq */
  4610. mmc_init_request();
  4611. mmc_request_fn();
  4612. mmc_prep_request() {
  4613. mmc_access_rpmb();
  4614. }
  4615. mmc_blk_issue_rq() {
  4616. mmc_get_card() {
  4617. __mmc_claim_host();
  4618. }
  4619. mmc_blk_issue_rw_rq() {
  4620. mmc_blk_rw_rq_prep() {
  4621. mmc_set_data_timeout();
  4622. mmc_queue_map_sg();
  4623. }
  4624. mmc_start_areq() {
  4625. sdhci_pre_req() {
  4626. sdhci_pre_dma_transfer();
  4627. }
  4628. mmc_start_request() {
  4629. mmc_retune_hold();
  4630. sdhci_led_control() {
  4631. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  4632. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  4633. }
  4634. __mmc_start_request() {
  4635. mmc_retune();
  4636. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2e70 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  4637. sdhci_request() {
  4638. sdhci_get_cd() {
  4639. mmc_gpio_get_cd();
  4640. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4641. }
  4642. sdhci_send_command() {
  4643. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4644. sdhci_prepare_data() {
  4645. sdhci_calc_timeout();
  4646. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  4647. sdhci_pre_dma_transfer();
  4648. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  4649. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  4650. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  4651. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  4652. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  4653. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  4654. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  4655. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  4656. }
  4657. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2e70 */
  4658. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  4659. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  4660. }
  4661. }
  4662. }
  4663. }
  4664. }
  4665. }
  4666. }
  4667. mmc_blk_issue_rq() {
  4668. mmc_blk_issue_rw_rq() {
  4669. mmc_start_areq() {
  4670. sdhci_irq() {
  4671. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  4672. /* sdhci_irq: mmc0: RESPONSE */
  4673. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  4674. sdhci_finish_command() {
  4675. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  4676. }
  4677. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4678. }
  4679. sdhci_irq() {
  4680. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  4681. /* sdhci_irq: mmc0: DATA_END */
  4682. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  4683. sdhci_data_irq() {
  4684. sdhci_finish_data() {
  4685. sdhci_send_command() {
  4686. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4687. sdhci_prepare_data();
  4688. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  4689. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  4690. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  4691. }
  4692. }
  4693. }
  4694. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4695. }
  4696. sdhci_irq() {
  4697. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  4698. /* sdhci_irq: mmc0: RESPONSE */
  4699. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  4700. sdhci_finish_command() {
  4701. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  4702. sdhci_finish_mrq() {
  4703. sdhci_needs_reset();
  4704. }
  4705. }
  4706. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4707. }
  4708. sdhci_tasklet_finish() {
  4709. sdhci_del_timer();
  4710. sdhci_needs_reset();
  4711. mmc_request_done() {
  4712. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  4713. sdhci_led_control() {
  4714. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  4715. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  4716. }
  4717. mmc_wait_data_done();
  4718. }
  4719. }
  4720. mmc_blk_err_check();
  4721. mmc_retune_release();
  4722. sdhci_post_req();
  4723. } /* mmc_start_areq */
  4724. mmc_exit_request();
  4725. mmc_request_fn();
  4726. } /* mmc_blk_issue_rw_rq */
  4727. mmc_put_card() {
  4728. mmc_release_host();
  4729. }
  4730. } /* mmc_blk_issue_rq */
  4731. mmc_init_request();
  4732. mmc_request_fn();
  4733. mmc_prep_request() {
  4734. mmc_access_rpmb();
  4735. }
  4736. mmc_blk_issue_rq() {
  4737. mmc_get_card() {
  4738. __mmc_claim_host();
  4739. }
  4740. mmc_blk_issue_rw_rq() {
  4741. mmc_blk_rw_rq_prep() {
  4742. mmc_set_data_timeout();
  4743. mmc_queue_map_sg();
  4744. }
  4745. mmc_start_areq() {
  4746. sdhci_pre_req() {
  4747. sdhci_pre_dma_transfer();
  4748. }
  4749. mmc_start_request() {
  4750. mmc_retune_hold();
  4751. sdhci_led_control() {
  4752. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  4753. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  4754. }
  4755. __mmc_start_request() {
  4756. mmc_retune();
  4757. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2db0 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  4758. sdhci_request() {
  4759. sdhci_get_cd() {
  4760. mmc_gpio_get_cd();
  4761. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4762. }
  4763. sdhci_send_command() {
  4764. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4765. sdhci_prepare_data() {
  4766. sdhci_calc_timeout();
  4767. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  4768. sdhci_pre_dma_transfer();
  4769. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  4770. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  4771. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  4772. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  4773. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  4774. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  4775. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  4776. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  4777. }
  4778. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2db0 */
  4779. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  4780. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  4781. }
  4782. }
  4783. }
  4784. }
  4785. }
  4786. }
  4787. }
  4788. mmc_blk_issue_rq() {
  4789. mmc_blk_issue_rw_rq() {
  4790. mmc_start_areq() {
  4791. sdhci_irq() {
  4792. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  4793. /* sdhci_irq: mmc0: RESPONSE */
  4794. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  4795. sdhci_finish_command() {
  4796. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  4797. }
  4798. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4799. }
  4800. sdhci_irq() {
  4801. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  4802. /* sdhci_irq: mmc0: DATA_END */
  4803. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  4804. sdhci_data_irq() {
  4805. sdhci_finish_data() {
  4806. sdhci_send_command() {
  4807. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4808. sdhci_prepare_data();
  4809. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  4810. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  4811. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  4812. }
  4813. }
  4814. }
  4815. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4816. }
  4817. sdhci_irq() {
  4818. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  4819. /* sdhci_irq: mmc0: RESPONSE */
  4820. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  4821. sdhci_finish_command() {
  4822. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  4823. sdhci_finish_mrq() {
  4824. sdhci_needs_reset();
  4825. }
  4826. }
  4827. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4828. }
  4829. sdhci_tasklet_finish() {
  4830. sdhci_del_timer();
  4831. sdhci_needs_reset();
  4832. mmc_request_done() {
  4833. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  4834. sdhci_led_control() {
  4835. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  4836. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  4837. }
  4838. mmc_wait_data_done();
  4839. }
  4840. }
  4841. mmc_blk_err_check();
  4842. mmc_retune_release();
  4843. sdhci_post_req();
  4844. } /* mmc_start_areq */
  4845. mmc_exit_request();
  4846. } /* mmc_blk_issue_rw_rq */
  4847. mmc_put_card() {
  4848. mmc_release_host();
  4849. }
  4850. } /* mmc_blk_issue_rq */
  4851. mmc_request_fn();
  4852. mmc_init_request();
  4853. mmc_request_fn();
  4854. mmc_prep_request() {
  4855. mmc_access_rpmb();
  4856. }
  4857. mmc_blk_issue_rq() {
  4858. mmc_get_card() {
  4859. __mmc_claim_host();
  4860. }
  4861. mmc_blk_issue_rw_rq() {
  4862. mmc_blk_rw_rq_prep() {
  4863. mmc_set_data_timeout();
  4864. mmc_queue_map_sg();
  4865. }
  4866. mmc_start_areq() {
  4867. sdhci_pre_req() {
  4868. sdhci_pre_dma_transfer();
  4869. }
  4870. mmc_start_request() {
  4871. mmc_retune_hold();
  4872. sdhci_led_control() {
  4873. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  4874. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  4875. }
  4876. __mmc_start_request() {
  4877. mmc_retune();
  4878. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2d58 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  4879. sdhci_request() {
  4880. sdhci_get_cd() {
  4881. mmc_gpio_get_cd();
  4882. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4883. }
  4884. sdhci_send_command() {
  4885. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4886. sdhci_prepare_data() {
  4887. sdhci_calc_timeout();
  4888. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  4889. sdhci_pre_dma_transfer();
  4890. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  4891. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  4892. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  4893. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  4894. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  4895. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  4896. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  4897. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  4898. }
  4899. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2d58 */
  4900. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  4901. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  4902. }
  4903. }
  4904. }
  4905. }
  4906. }
  4907. }
  4908. }
  4909. mmc_blk_issue_rq() {
  4910. mmc_blk_issue_rw_rq() {
  4911. mmc_start_areq() {
  4912. sdhci_irq() {
  4913. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  4914. /* sdhci_irq: mmc0: RESPONSE */
  4915. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  4916. sdhci_finish_command() {
  4917. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  4918. }
  4919. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4920. }
  4921. sdhci_irq() {
  4922. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  4923. /* sdhci_irq: mmc0: DATA_END */
  4924. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  4925. sdhci_data_irq() {
  4926. sdhci_finish_data() {
  4927. sdhci_send_command() {
  4928. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  4929. sdhci_prepare_data();
  4930. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  4931. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  4932. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  4933. }
  4934. }
  4935. }
  4936. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4937. }
  4938. sdhci_irq() {
  4939. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  4940. /* sdhci_irq: mmc0: RESPONSE */
  4941. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  4942. sdhci_finish_command() {
  4943. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  4944. sdhci_finish_mrq() {
  4945. sdhci_needs_reset();
  4946. }
  4947. }
  4948. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  4949. }
  4950. sdhci_tasklet_finish() {
  4951. sdhci_del_timer();
  4952. sdhci_needs_reset();
  4953. mmc_request_done() {
  4954. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  4955. sdhci_led_control() {
  4956. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  4957. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  4958. }
  4959. mmc_wait_data_done();
  4960. }
  4961. }
  4962. mmc_blk_err_check();
  4963. mmc_retune_release();
  4964. sdhci_post_req();
  4965. } /* mmc_start_areq */
  4966. mmc_exit_request();
  4967. mmc_request_fn();
  4968. } /* mmc_blk_issue_rw_rq */
  4969. mmc_put_card() {
  4970. mmc_release_host();
  4971. }
  4972. } /* mmc_blk_issue_rq */
  4973. mmc_init_request();
  4974. mmc_request_fn();
  4975. mmc_prep_request() {
  4976. mmc_access_rpmb();
  4977. }
  4978. mmc_blk_issue_rq() {
  4979. mmc_get_card() {
  4980. __mmc_claim_host();
  4981. }
  4982. mmc_blk_issue_rw_rq() {
  4983. mmc_blk_rw_rq_prep() {
  4984. mmc_set_data_timeout();
  4985. mmc_queue_map_sg();
  4986. }
  4987. mmc_start_areq() {
  4988. sdhci_pre_req() {
  4989. sdhci_pre_dma_transfer();
  4990. }
  4991. mmc_start_request() {
  4992. mmc_retune_hold();
  4993. sdhci_led_control() {
  4994. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  4995. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  4996. }
  4997. __mmc_start_request() {
  4998. mmc_retune();
  4999. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2d20 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  5000. sdhci_request() {
  5001. sdhci_get_cd() {
  5002. mmc_gpio_get_cd();
  5003. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5004. }
  5005. sdhci_send_command() {
  5006. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5007. sdhci_prepare_data() {
  5008. sdhci_calc_timeout();
  5009. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  5010. sdhci_pre_dma_transfer();
  5011. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  5012. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  5013. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  5014. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  5015. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  5016. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  5017. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  5018. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  5019. }
  5020. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2d20 */
  5021. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  5022. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  5023. }
  5024. }
  5025. }
  5026. }
  5027. }
  5028. }
  5029. }
  5030. mmc_blk_issue_rq() {
  5031. mmc_blk_issue_rw_rq() {
  5032. mmc_start_areq() {
  5033. sdhci_irq() {
  5034. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  5035. /* sdhci_irq: mmc0: RESPONSE */
  5036. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  5037. sdhci_finish_command() {
  5038. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  5039. }
  5040. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5041. }
  5042. sdhci_irq() {
  5043. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  5044. /* sdhci_irq: mmc0: DATA_END */
  5045. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  5046. sdhci_data_irq() {
  5047. sdhci_finish_data() {
  5048. sdhci_send_command() {
  5049. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5050. sdhci_prepare_data();
  5051. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  5052. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  5053. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  5054. }
  5055. }
  5056. }
  5057. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5058. }
  5059. sdhci_irq() {
  5060. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  5061. /* sdhci_irq: mmc0: RESPONSE */
  5062. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  5063. sdhci_finish_command() {
  5064. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  5065. sdhci_finish_mrq() {
  5066. sdhci_needs_reset();
  5067. }
  5068. }
  5069. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5070. }
  5071. sdhci_tasklet_finish() {
  5072. sdhci_del_timer();
  5073. sdhci_needs_reset();
  5074. mmc_request_done() {
  5075. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  5076. sdhci_led_control() {
  5077. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  5078. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  5079. }
  5080. mmc_wait_data_done();
  5081. }
  5082. }
  5083. mmc_blk_err_check();
  5084. mmc_retune_release();
  5085. sdhci_post_req();
  5086. } /* mmc_start_areq */
  5087. mmc_exit_request();
  5088. mmc_request_fn();
  5089. } /* mmc_blk_issue_rw_rq */
  5090. mmc_put_card() {
  5091. mmc_release_host();
  5092. }
  5093. } /* mmc_blk_issue_rq */
  5094. mmc_init_request();
  5095. mmc_request_fn();
  5096. mmc_prep_request() {
  5097. mmc_access_rpmb();
  5098. }
  5099. mmc_blk_issue_rq() {
  5100. mmc_get_card() {
  5101. __mmc_claim_host();
  5102. }
  5103. mmc_blk_issue_rw_rq() {
  5104. mmc_blk_rw_rq_prep() {
  5105. mmc_set_data_timeout();
  5106. mmc_queue_map_sg();
  5107. }
  5108. mmc_start_areq() {
  5109. sdhci_pre_req() {
  5110. sdhci_pre_dma_transfer();
  5111. }
  5112. mmc_start_request() {
  5113. mmc_retune_hold();
  5114. sdhci_led_control() {
  5115. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  5116. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  5117. }
  5118. __mmc_start_request() {
  5119. mmc_retune();
  5120. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2c70 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  5121. sdhci_request() {
  5122. sdhci_get_cd() {
  5123. mmc_gpio_get_cd();
  5124. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5125. }
  5126. sdhci_send_command() {
  5127. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5128. sdhci_prepare_data() {
  5129. sdhci_calc_timeout();
  5130. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  5131. sdhci_pre_dma_transfer();
  5132. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  5133. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  5134. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  5135. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  5136. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  5137. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  5138. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  5139. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  5140. }
  5141. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2c70 */
  5142. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  5143. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  5144. }
  5145. }
  5146. }
  5147. }
  5148. }
  5149. }
  5150. }
  5151. mmc_blk_issue_rq() {
  5152. mmc_blk_issue_rw_rq() {
  5153. mmc_start_areq() {
  5154. sdhci_irq() {
  5155. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  5156. /* sdhci_irq: mmc0: RESPONSE */
  5157. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  5158. sdhci_finish_command() {
  5159. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  5160. }
  5161. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5162. }
  5163. sdhci_irq() {
  5164. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  5165. /* sdhci_irq: mmc0: DATA_END */
  5166. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  5167. sdhci_data_irq() {
  5168. sdhci_finish_data() {
  5169. sdhci_send_command() {
  5170. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5171. sdhci_prepare_data();
  5172. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  5173. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  5174. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  5175. }
  5176. }
  5177. }
  5178. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5179. }
  5180. sdhci_irq() {
  5181. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  5182. /* sdhci_irq: mmc0: RESPONSE */
  5183. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  5184. sdhci_finish_command() {
  5185. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  5186. sdhci_finish_mrq() {
  5187. sdhci_needs_reset();
  5188. }
  5189. }
  5190. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5191. }
  5192. sdhci_tasklet_finish() {
  5193. sdhci_del_timer();
  5194. sdhci_needs_reset();
  5195. mmc_request_done() {
  5196. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  5197. sdhci_led_control() {
  5198. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  5199. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  5200. }
  5201. mmc_wait_data_done();
  5202. }
  5203. }
  5204. mmc_blk_err_check();
  5205. mmc_retune_release();
  5206. sdhci_post_req();
  5207. } /* mmc_start_areq */
  5208. mmc_exit_request();
  5209. mmc_request_fn();
  5210. } /* mmc_blk_issue_rw_rq */
  5211. mmc_put_card() {
  5212. mmc_release_host();
  5213. }
  5214. } /* mmc_blk_issue_rq */
  5215. mmc_init_request();
  5216. mmc_request_fn();
  5217. mmc_prep_request() {
  5218. mmc_access_rpmb();
  5219. }
  5220. mmc_blk_issue_rq() {
  5221. mmc_get_card() {
  5222. __mmc_claim_host();
  5223. }
  5224. mmc_blk_issue_rw_rq() {
  5225. mmc_blk_rw_rq_prep() {
  5226. mmc_set_data_timeout();
  5227. mmc_queue_map_sg();
  5228. }
  5229. mmc_start_areq() {
  5230. sdhci_pre_req() {
  5231. sdhci_pre_dma_transfer();
  5232. }
  5233. mmc_start_request() {
  5234. mmc_retune_hold();
  5235. sdhci_led_control() {
  5236. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  5237. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  5238. }
  5239. __mmc_start_request() {
  5240. mmc_retune();
  5241. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2c30 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  5242. sdhci_request() {
  5243. sdhci_get_cd() {
  5244. mmc_gpio_get_cd();
  5245. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5246. }
  5247. sdhci_send_command() {
  5248. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5249. sdhci_prepare_data() {
  5250. sdhci_calc_timeout();
  5251. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  5252. sdhci_pre_dma_transfer();
  5253. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  5254. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  5255. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  5256. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  5257. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  5258. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  5259. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  5260. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  5261. }
  5262. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2c30 */
  5263. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  5264. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  5265. }
  5266. }
  5267. }
  5268. }
  5269. }
  5270. }
  5271. }
  5272. mmc_blk_issue_rq() {
  5273. mmc_blk_issue_rw_rq() {
  5274. mmc_start_areq() {
  5275. sdhci_irq() {
  5276. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  5277. /* sdhci_irq: mmc0: RESPONSE */
  5278. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  5279. sdhci_finish_command() {
  5280. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  5281. }
  5282. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5283. }
  5284. sdhci_irq() {
  5285. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  5286. /* sdhci_irq: mmc0: DATA_END */
  5287. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  5288. sdhci_data_irq() {
  5289. sdhci_finish_data() {
  5290. sdhci_send_command() {
  5291. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5292. sdhci_prepare_data();
  5293. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  5294. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  5295. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  5296. }
  5297. }
  5298. }
  5299. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5300. }
  5301. sdhci_irq() {
  5302. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  5303. /* sdhci_irq: mmc0: RESPONSE */
  5304. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  5305. sdhci_finish_command() {
  5306. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  5307. sdhci_finish_mrq() {
  5308. sdhci_needs_reset();
  5309. }
  5310. }
  5311. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5312. }
  5313. sdhci_tasklet_finish() {
  5314. sdhci_del_timer();
  5315. sdhci_needs_reset();
  5316. mmc_request_done() {
  5317. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  5318. sdhci_led_control() {
  5319. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  5320. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  5321. }
  5322. mmc_wait_data_done();
  5323. }
  5324. }
  5325. mmc_blk_err_check();
  5326. mmc_retune_release();
  5327. sdhci_post_req();
  5328. } /* mmc_start_areq */
  5329. mmc_exit_request();
  5330. mmc_request_fn();
  5331. } /* mmc_blk_issue_rw_rq */
  5332. mmc_put_card() {
  5333. mmc_release_host();
  5334. }
  5335. } /* mmc_blk_issue_rq */
  5336. mmc_init_request();
  5337. mmc_request_fn();
  5338. mmc_prep_request() {
  5339. mmc_access_rpmb();
  5340. }
  5341. mmc_blk_issue_rq() {
  5342. mmc_get_card() {
  5343. __mmc_claim_host();
  5344. }
  5345. mmc_blk_issue_rw_rq() {
  5346. mmc_blk_rw_rq_prep() {
  5347. mmc_set_data_timeout();
  5348. mmc_queue_map_sg();
  5349. }
  5350. mmc_start_areq() {
  5351. sdhci_pre_req() {
  5352. sdhci_pre_dma_transfer();
  5353. }
  5354. mmc_start_request() {
  5355. mmc_retune_hold();
  5356. sdhci_led_control() {
  5357. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  5358. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  5359. }
  5360. __mmc_start_request() {
  5361. mmc_retune();
  5362. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2c20 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  5363. sdhci_request() {
  5364. sdhci_get_cd() {
  5365. mmc_gpio_get_cd();
  5366. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5367. }
  5368. sdhci_send_command() {
  5369. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5370. sdhci_prepare_data() {
  5371. sdhci_calc_timeout();
  5372. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  5373. sdhci_pre_dma_transfer();
  5374. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  5375. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  5376. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  5377. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  5378. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  5379. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  5380. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  5381. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  5382. }
  5383. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2c20 */
  5384. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  5385. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  5386. }
  5387. }
  5388. }
  5389. }
  5390. }
  5391. }
  5392. }
  5393. mmc_blk_issue_rq() {
  5394. mmc_blk_issue_rw_rq() {
  5395. mmc_start_areq() {
  5396. sdhci_irq() {
  5397. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  5398. /* sdhci_irq: mmc0: RESPONSE */
  5399. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  5400. sdhci_finish_command() {
  5401. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  5402. }
  5403. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5404. }
  5405. sdhci_irq() {
  5406. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  5407. /* sdhci_irq: mmc0: DATA_END */
  5408. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  5409. sdhci_data_irq() {
  5410. sdhci_finish_data() {
  5411. sdhci_send_command() {
  5412. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5413. sdhci_prepare_data();
  5414. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  5415. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  5416. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  5417. }
  5418. }
  5419. }
  5420. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5421. }
  5422. sdhci_irq() {
  5423. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  5424. /* sdhci_irq: mmc0: RESPONSE */
  5425. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  5426. sdhci_finish_command() {
  5427. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  5428. sdhci_finish_mrq() {
  5429. sdhci_needs_reset();
  5430. }
  5431. }
  5432. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5433. }
  5434. sdhci_tasklet_finish() {
  5435. sdhci_del_timer();
  5436. sdhci_needs_reset();
  5437. mmc_request_done() {
  5438. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  5439. sdhci_led_control() {
  5440. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  5441. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  5442. }
  5443. mmc_wait_data_done();
  5444. }
  5445. }
  5446. mmc_blk_err_check();
  5447. mmc_retune_release();
  5448. sdhci_post_req();
  5449. } /* mmc_start_areq */
  5450. mmc_exit_request();
  5451. mmc_request_fn();
  5452. } /* mmc_blk_issue_rw_rq */
  5453. mmc_put_card() {
  5454. mmc_release_host();
  5455. }
  5456. } /* mmc_blk_issue_rq */
  5457. mmc_init_request();
  5458. mmc_request_fn();
  5459. mmc_prep_request() {
  5460. mmc_access_rpmb();
  5461. }
  5462. mmc_blk_issue_rq() {
  5463. mmc_get_card() {
  5464. __mmc_claim_host();
  5465. }
  5466. mmc_blk_issue_rw_rq() {
  5467. mmc_blk_rw_rq_prep() {
  5468. mmc_set_data_timeout();
  5469. mmc_queue_map_sg();
  5470. }
  5471. mmc_start_areq() {
  5472. sdhci_pre_req() {
  5473. sdhci_pre_dma_transfer();
  5474. }
  5475. mmc_start_request() {
  5476. mmc_retune_hold();
  5477. sdhci_led_control() {
  5478. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  5479. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  5480. }
  5481. __mmc_start_request() {
  5482. mmc_retune();
  5483. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2c48 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  5484. sdhci_request() {
  5485. sdhci_get_cd() {
  5486. mmc_gpio_get_cd();
  5487. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5488. }
  5489. sdhci_send_command() {
  5490. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5491. sdhci_prepare_data() {
  5492. sdhci_calc_timeout();
  5493. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  5494. sdhci_pre_dma_transfer();
  5495. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  5496. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  5497. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  5498. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  5499. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  5500. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  5501. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  5502. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  5503. }
  5504. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2c48 */
  5505. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  5506. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  5507. }
  5508. }
  5509. }
  5510. }
  5511. }
  5512. }
  5513. }
  5514. mmc_blk_issue_rq() {
  5515. mmc_blk_issue_rw_rq() {
  5516. mmc_start_areq() {
  5517. sdhci_irq() {
  5518. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  5519. /* sdhci_irq: mmc0: RESPONSE */
  5520. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  5521. sdhci_finish_command() {
  5522. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  5523. }
  5524. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5525. }
  5526. sdhci_irq() {
  5527. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  5528. /* sdhci_irq: mmc0: DATA_END */
  5529. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  5530. sdhci_data_irq() {
  5531. sdhci_finish_data() {
  5532. sdhci_send_command() {
  5533. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5534. sdhci_prepare_data();
  5535. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  5536. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  5537. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  5538. }
  5539. }
  5540. }
  5541. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5542. }
  5543. sdhci_irq() {
  5544. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  5545. /* sdhci_irq: mmc0: RESPONSE */
  5546. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  5547. sdhci_finish_command() {
  5548. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  5549. sdhci_finish_mrq() {
  5550. sdhci_needs_reset();
  5551. }
  5552. }
  5553. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5554. }
  5555. sdhci_tasklet_finish() {
  5556. sdhci_del_timer();
  5557. sdhci_needs_reset();
  5558. mmc_request_done() {
  5559. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  5560. sdhci_led_control() {
  5561. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  5562. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  5563. }
  5564. mmc_wait_data_done();
  5565. }
  5566. }
  5567. mmc_blk_err_check();
  5568. mmc_retune_release();
  5569. sdhci_post_req();
  5570. } /* mmc_start_areq */
  5571. mmc_exit_request();
  5572. mmc_request_fn();
  5573. } /* mmc_blk_issue_rw_rq */
  5574. mmc_put_card() {
  5575. mmc_release_host();
  5576. }
  5577. } /* mmc_blk_issue_rq */
  5578. mmc_init_request();
  5579. mmc_request_fn();
  5580. mmc_prep_request() {
  5581. mmc_access_rpmb();
  5582. }
  5583. mmc_blk_issue_rq() {
  5584. mmc_get_card() {
  5585. __mmc_claim_host();
  5586. }
  5587. mmc_blk_issue_rw_rq() {
  5588. mmc_blk_rw_rq_prep() {
  5589. mmc_set_data_timeout();
  5590. mmc_queue_map_sg();
  5591. }
  5592. mmc_start_areq() {
  5593. sdhci_pre_req() {
  5594. sdhci_pre_dma_transfer();
  5595. }
  5596. mmc_start_request() {
  5597. mmc_retune_hold();
  5598. sdhci_led_control() {
  5599. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  5600. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  5601. }
  5602. __mmc_start_request() {
  5603. mmc_retune();
  5604. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed23f0 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  5605. sdhci_request() {
  5606. sdhci_get_cd() {
  5607. mmc_gpio_get_cd();
  5608. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5609. }
  5610. sdhci_send_command() {
  5611. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5612. sdhci_prepare_data() {
  5613. sdhci_calc_timeout();
  5614. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  5615. sdhci_pre_dma_transfer();
  5616. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  5617. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  5618. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  5619. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  5620. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  5621. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  5622. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  5623. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  5624. }
  5625. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed23f0 */
  5626. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  5627. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  5628. }
  5629. }
  5630. }
  5631. }
  5632. }
  5633. }
  5634. }
  5635. mmc_blk_issue_rq() {
  5636. mmc_blk_issue_rw_rq() {
  5637. mmc_start_areq() {
  5638. sdhci_irq() {
  5639. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  5640. /* sdhci_irq: mmc0: RESPONSE */
  5641. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  5642. sdhci_finish_command() {
  5643. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  5644. }
  5645. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5646. }
  5647. sdhci_irq() {
  5648. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  5649. /* sdhci_irq: mmc0: DATA_END */
  5650. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  5651. sdhci_data_irq() {
  5652. sdhci_finish_data() {
  5653. sdhci_send_command() {
  5654. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5655. sdhci_prepare_data();
  5656. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  5657. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  5658. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  5659. }
  5660. }
  5661. }
  5662. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5663. }
  5664. sdhci_irq() {
  5665. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  5666. /* sdhci_irq: mmc0: RESPONSE */
  5667. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  5668. sdhci_finish_command() {
  5669. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  5670. sdhci_finish_mrq() {
  5671. sdhci_needs_reset();
  5672. }
  5673. }
  5674. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5675. }
  5676. sdhci_tasklet_finish() {
  5677. sdhci_del_timer();
  5678. sdhci_needs_reset();
  5679. mmc_request_done() {
  5680. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  5681. sdhci_led_control() {
  5682. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  5683. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  5684. }
  5685. mmc_wait_data_done();
  5686. }
  5687. }
  5688. mmc_blk_err_check();
  5689. mmc_retune_release();
  5690. sdhci_post_req();
  5691. } /* mmc_start_areq */
  5692. mmc_exit_request();
  5693. mmc_request_fn();
  5694. } /* mmc_blk_issue_rw_rq */
  5695. mmc_put_card() {
  5696. mmc_release_host();
  5697. }
  5698. } /* mmc_blk_issue_rq */
  5699. mmc_init_request();
  5700. mmc_request_fn();
  5701. mmc_prep_request() {
  5702. mmc_access_rpmb();
  5703. }
  5704. mmc_blk_issue_rq() {
  5705. mmc_get_card() {
  5706. __mmc_claim_host();
  5707. }
  5708. mmc_blk_issue_rw_rq() {
  5709. mmc_blk_rw_rq_prep() {
  5710. mmc_set_data_timeout();
  5711. mmc_queue_map_sg();
  5712. }
  5713. mmc_start_areq() {
  5714. sdhci_pre_req() {
  5715. sdhci_pre_dma_transfer();
  5716. }
  5717. mmc_start_request() {
  5718. mmc_retune_hold();
  5719. sdhci_led_control() {
  5720. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  5721. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  5722. }
  5723. __mmc_start_request() {
  5724. mmc_retune();
  5725. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0x800 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  5726. sdhci_request() {
  5727. sdhci_get_cd() {
  5728. mmc_gpio_get_cd();
  5729. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5730. }
  5731. sdhci_send_command() {
  5732. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5733. sdhci_prepare_data() {
  5734. sdhci_calc_timeout();
  5735. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  5736. sdhci_pre_dma_transfer();
  5737. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  5738. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  5739. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  5740. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  5741. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  5742. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  5743. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  5744. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  5745. }
  5746. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x800 */
  5747. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  5748. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  5749. }
  5750. }
  5751. }
  5752. }
  5753. }
  5754. }
  5755. }
  5756. mmc_blk_issue_rq() {
  5757. mmc_blk_issue_rw_rq() {
  5758. mmc_start_areq() {
  5759. sdhci_irq() {
  5760. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  5761. /* sdhci_irq: mmc0: RESPONSE */
  5762. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  5763. sdhci_finish_command() {
  5764. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  5765. }
  5766. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5767. }
  5768. sdhci_irq() {
  5769. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  5770. /* sdhci_irq: mmc0: DATA_END */
  5771. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  5772. sdhci_data_irq() {
  5773. sdhci_finish_data() {
  5774. sdhci_send_command() {
  5775. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ef0000 */
  5776. sdhci_prepare_data();
  5777. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  5778. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  5779. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  5780. }
  5781. }
  5782. }
  5783. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5784. }
  5785. sdhci_irq() {
  5786. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  5787. /* sdhci_irq: mmc0: RESPONSE */
  5788. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  5789. sdhci_finish_command() {
  5790. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  5791. sdhci_finish_mrq() {
  5792. sdhci_needs_reset();
  5793. }
  5794. }
  5795. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5796. }
  5797. sdhci_tasklet_finish() {
  5798. sdhci_del_timer();
  5799. sdhci_needs_reset();
  5800. mmc_request_done() {
  5801. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  5802. sdhci_led_control() {
  5803. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  5804. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  5805. }
  5806. mmc_wait_data_done();
  5807. }
  5808. }
  5809. mmc_blk_err_check();
  5810. mmc_retune_release();
  5811. sdhci_post_req();
  5812. } /* mmc_start_areq */
  5813. mmc_exit_request();
  5814. mmc_request_fn();
  5815. } /* mmc_blk_issue_rw_rq */
  5816. mmc_put_card() {
  5817. mmc_release_host();
  5818. }
  5819. } /* mmc_blk_issue_rq */
  5820. mmc_init_request();
  5821. mmc_request_fn();
  5822. mmc_prep_request() {
  5823. mmc_access_rpmb();
  5824. }
  5825. mmc_blk_issue_rq() {
  5826. mmc_get_card() {
  5827. __mmc_claim_host();
  5828. }
  5829. mmc_blk_issue_rw_rq() {
  5830. mmc_blk_rw_rq_prep() {
  5831. mmc_set_data_timeout();
  5832. mmc_queue_map_sg();
  5833. }
  5834. mmc_start_areq() {
  5835. sdhci_pre_req() {
  5836. sdhci_pre_dma_transfer();
  5837. }
  5838. mmc_start_request() {
  5839. mmc_retune_hold();
  5840. sdhci_led_control() {
  5841. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  5842. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  5843. }
  5844. __mmc_start_request() {
  5845. mmc_retune();
  5846. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0x18 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  5847. sdhci_request() {
  5848. sdhci_get_cd() {
  5849. mmc_gpio_get_cd();
  5850. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5851. }
  5852. sdhci_send_command() {
  5853. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5854. sdhci_prepare_data() {
  5855. sdhci_calc_timeout();
  5856. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  5857. sdhci_pre_dma_transfer();
  5858. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  5859. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  5860. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  5861. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  5862. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  5863. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  5864. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  5865. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  5866. }
  5867. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x18 */
  5868. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  5869. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  5870. }
  5871. }
  5872. }
  5873. }
  5874. }
  5875. }
  5876. }
  5877. mmc_blk_issue_rq() {
  5878. mmc_blk_issue_rw_rq() {
  5879. mmc_start_areq() {
  5880. sdhci_irq() {
  5881. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  5882. /* sdhci_irq: mmc0: RESPONSE */
  5883. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  5884. sdhci_finish_command() {
  5885. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  5886. }
  5887. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5888. }
  5889. sdhci_irq() {
  5890. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  5891. /* sdhci_irq: mmc0: DATA_END */
  5892. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  5893. sdhci_data_irq() {
  5894. sdhci_finish_data() {
  5895. sdhci_send_command() {
  5896. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5897. sdhci_prepare_data();
  5898. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  5899. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  5900. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  5901. }
  5902. }
  5903. }
  5904. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5905. }
  5906. sdhci_irq() {
  5907. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  5908. /* sdhci_irq: mmc0: RESPONSE */
  5909. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  5910. sdhci_finish_command() {
  5911. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  5912. sdhci_finish_mrq() {
  5913. sdhci_needs_reset();
  5914. }
  5915. }
  5916. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  5917. }
  5918. sdhci_tasklet_finish() {
  5919. sdhci_del_timer();
  5920. sdhci_needs_reset();
  5921. mmc_request_done() {
  5922. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  5923. sdhci_led_control() {
  5924. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  5925. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  5926. }
  5927. mmc_wait_data_done();
  5928. }
  5929. }
  5930. mmc_blk_err_check();
  5931. mmc_retune_release();
  5932. sdhci_post_req();
  5933. } /* mmc_start_areq */
  5934. mmc_exit_request();
  5935. mmc_request_fn();
  5936. } /* mmc_blk_issue_rw_rq */
  5937. mmc_put_card() {
  5938. mmc_release_host();
  5939. }
  5940. } /* mmc_blk_issue_rq */
  5941. mmc_init_request();
  5942. mmc_request_fn();
  5943. mmc_prep_request() {
  5944. mmc_access_rpmb();
  5945. }
  5946. mmc_blk_issue_rq() {
  5947. mmc_get_card() {
  5948. __mmc_claim_host();
  5949. }
  5950. mmc_blk_issue_rw_rq() {
  5951. mmc_blk_rw_rq_prep() {
  5952. mmc_set_data_timeout();
  5953. mmc_queue_map_sg();
  5954. }
  5955. mmc_start_areq() {
  5956. sdhci_pre_req() {
  5957. sdhci_pre_dma_transfer();
  5958. }
  5959. mmc_start_request() {
  5960. mmc_retune_hold();
  5961. sdhci_led_control() {
  5962. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  5963. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  5964. }
  5965. __mmc_start_request() {
  5966. mmc_retune();
  5967. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0x38 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  5968. sdhci_request() {
  5969. sdhci_get_cd() {
  5970. mmc_gpio_get_cd();
  5971. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5972. }
  5973. sdhci_send_command() {
  5974. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  5975. sdhci_prepare_data() {
  5976. sdhci_calc_timeout();
  5977. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  5978. sdhci_pre_dma_transfer();
  5979. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  5980. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  5981. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  5982. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  5983. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  5984. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  5985. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  5986. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  5987. }
  5988. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x38 */
  5989. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  5990. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  5991. }
  5992. }
  5993. }
  5994. }
  5995. }
  5996. }
  5997. }
  5998. mmc_blk_issue_rq() {
  5999. mmc_blk_issue_rw_rq() {
  6000. mmc_start_areq() {
  6001. sdhci_irq() {
  6002. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  6003. /* sdhci_irq: mmc0: RESPONSE */
  6004. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  6005. sdhci_finish_command() {
  6006. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  6007. }
  6008. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6009. }
  6010. sdhci_irq() {
  6011. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  6012. /* sdhci_irq: mmc0: DATA_END */
  6013. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  6014. sdhci_data_irq() {
  6015. sdhci_finish_data() {
  6016. sdhci_send_command() {
  6017. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6018. sdhci_prepare_data();
  6019. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  6020. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  6021. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  6022. }
  6023. }
  6024. }
  6025. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6026. }
  6027. sdhci_irq() {
  6028. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  6029. /* sdhci_irq: mmc0: RESPONSE */
  6030. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  6031. sdhci_finish_command() {
  6032. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  6033. sdhci_finish_mrq() {
  6034. sdhci_needs_reset();
  6035. }
  6036. }
  6037. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6038. }
  6039. sdhci_tasklet_finish() {
  6040. sdhci_del_timer();
  6041. sdhci_needs_reset();
  6042. mmc_request_done() {
  6043. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  6044. sdhci_led_control() {
  6045. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  6046. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  6047. }
  6048. mmc_wait_data_done();
  6049. }
  6050. }
  6051. mmc_blk_err_check();
  6052. mmc_retune_release();
  6053. sdhci_post_req();
  6054. } /* mmc_start_areq */
  6055. mmc_exit_request();
  6056. mmc_request_fn();
  6057. } /* mmc_blk_issue_rw_rq */
  6058. mmc_put_card() {
  6059. mmc_release_host();
  6060. }
  6061. } /* mmc_blk_issue_rq */
  6062. mmc_init_request();
  6063. mmc_request_fn();
  6064. mmc_prep_request() {
  6065. mmc_access_rpmb();
  6066. }
  6067. mmc_blk_issue_rq() {
  6068. mmc_get_card() {
  6069. __mmc_claim_host();
  6070. }
  6071. mmc_blk_issue_rw_rq() {
  6072. mmc_blk_rw_rq_prep() {
  6073. mmc_set_data_timeout();
  6074. mmc_queue_map_sg();
  6075. }
  6076. mmc_start_areq() {
  6077. sdhci_pre_req() {
  6078. sdhci_pre_dma_transfer();
  6079. }
  6080. mmc_start_request() {
  6081. mmc_retune_hold();
  6082. sdhci_led_control() {
  6083. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  6084. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  6085. }
  6086. __mmc_start_request() {
  6087. mmc_retune();
  6088. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0x78 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  6089. sdhci_request() {
  6090. sdhci_get_cd() {
  6091. mmc_gpio_get_cd();
  6092. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6093. }
  6094. sdhci_send_command() {
  6095. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6096. sdhci_prepare_data() {
  6097. sdhci_calc_timeout();
  6098. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  6099. sdhci_pre_dma_transfer();
  6100. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  6101. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  6102. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  6103. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  6104. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  6105. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  6106. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  6107. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  6108. }
  6109. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x78 */
  6110. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  6111. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  6112. }
  6113. }
  6114. }
  6115. }
  6116. }
  6117. }
  6118. }
  6119. mmc_blk_issue_rq() {
  6120. mmc_blk_issue_rw_rq() {
  6121. mmc_start_areq() {
  6122. sdhci_irq() {
  6123. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  6124. /* sdhci_irq: mmc0: RESPONSE */
  6125. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  6126. sdhci_finish_command() {
  6127. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  6128. }
  6129. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6130. }
  6131. sdhci_irq() {
  6132. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  6133. /* sdhci_irq: mmc0: DATA_END */
  6134. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  6135. sdhci_data_irq() {
  6136. sdhci_finish_data() {
  6137. sdhci_send_command() {
  6138. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6139. sdhci_prepare_data();
  6140. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  6141. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  6142. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  6143. }
  6144. }
  6145. }
  6146. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6147. }
  6148. sdhci_irq() {
  6149. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  6150. /* sdhci_irq: mmc0: RESPONSE */
  6151. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  6152. sdhci_finish_command() {
  6153. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  6154. sdhci_finish_mrq() {
  6155. sdhci_needs_reset();
  6156. }
  6157. }
  6158. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6159. }
  6160. sdhci_tasklet_finish() {
  6161. sdhci_del_timer();
  6162. sdhci_needs_reset();
  6163. mmc_request_done() {
  6164. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  6165. sdhci_led_control() {
  6166. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  6167. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  6168. }
  6169. mmc_wait_data_done();
  6170. }
  6171. }
  6172. mmc_blk_err_check();
  6173. mmc_retune_release();
  6174. sdhci_post_req();
  6175. } /* mmc_start_areq */
  6176. mmc_exit_request();
  6177. mmc_request_fn();
  6178. } /* mmc_blk_issue_rw_rq */
  6179. mmc_put_card() {
  6180. mmc_release_host();
  6181. }
  6182. } /* mmc_blk_issue_rq */
  6183. mmc_init_request();
  6184. mmc_init_request();
  6185. mmc_init_request();
  6186. mmc_init_request();
  6187. mmc_request_fn();
  6188. mmc_prep_request() {
  6189. mmc_access_rpmb();
  6190. }
  6191. mmc_blk_issue_rq() {
  6192. mmc_get_card() {
  6193. __mmc_claim_host();
  6194. }
  6195. mmc_blk_issue_rw_rq() {
  6196. mmc_blk_rw_rq_prep() {
  6197. mmc_set_data_timeout();
  6198. mmc_queue_map_sg();
  6199. }
  6200. mmc_start_areq() {
  6201. sdhci_pre_req() {
  6202. sdhci_pre_dma_transfer();
  6203. }
  6204. mmc_start_request() {
  6205. mmc_retune_hold();
  6206. sdhci_led_control() {
  6207. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  6208. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  6209. }
  6210. __mmc_start_request() {
  6211. mmc_retune();
  6212. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0x80 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=384 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  6213. sdhci_request() {
  6214. sdhci_get_cd() {
  6215. mmc_gpio_get_cd();
  6216. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6217. }
  6218. sdhci_send_command() {
  6219. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6220. sdhci_prepare_data() {
  6221. sdhci_calc_timeout();
  6222. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  6223. sdhci_pre_dma_transfer();
  6224. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  6225. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  6226. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  6227. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  6228. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  6229. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  6230. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  6231. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x180 */
  6232. }
  6233. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x80 */
  6234. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  6235. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  6236. }
  6237. }
  6238. }
  6239. }
  6240. }
  6241. }
  6242. }
  6243. mmc_prep_request() {
  6244. mmc_access_rpmb();
  6245. }
  6246. mmc_blk_issue_rq() {
  6247. mmc_blk_issue_rw_rq() {
  6248. mmc_blk_rw_rq_prep() {
  6249. mmc_set_data_timeout();
  6250. mmc_queue_map_sg();
  6251. sdhci_irq() {
  6252. }
  6253. mmc_start_areq() {
  6254. sdhci_pre_req() {
  6255. sdhci_pre_dma_transfer();
  6256. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  6257. /* sdhci_irq: mmc0: RESPONSE */
  6258. }
  6259. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  6260. sdhci_finish_command() {
  6261. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  6262. }
  6263. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6264. }
  6265. sdhci_irq() {
  6266. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  6267. /* sdhci_irq: mmc0: DATA_END */
  6268. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  6269. sdhci_data_irq() {
  6270. sdhci_finish_data() {
  6271. sdhci_send_command() {
  6272. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ef0000 */
  6273. sdhci_prepare_data();
  6274. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  6275. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  6276. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  6277. }
  6278. }
  6279. }
  6280. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6281. }
  6282. sdhci_irq() {
  6283. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  6284. /* sdhci_irq: mmc0: RESPONSE */
  6285. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  6286. sdhci_finish_command() {
  6287. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  6288. sdhci_finish_mrq() {
  6289. sdhci_needs_reset();
  6290. }
  6291. }
  6292. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6293. }
  6294. sdhci_tasklet_finish() {
  6295. sdhci_del_timer();
  6296. sdhci_needs_reset();
  6297. mmc_request_done() {
  6298. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=196608 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  6299. sdhci_led_control() {
  6300. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  6301. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  6302. }
  6303. mmc_wait_data_done();
  6304. }
  6305. }
  6306. mmc_blk_err_check();
  6307. mmc_retune_release();
  6308. mmc_start_request() {
  6309. mmc_retune_hold();
  6310. sdhci_led_control() {
  6311. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  6312. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  6313. }
  6314. __mmc_start_request() {
  6315. mmc_retune();
  6316. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0x40 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=56 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  6317. sdhci_request() {
  6318. sdhci_get_cd() {
  6319. mmc_gpio_get_cd();
  6320. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6321. }
  6322. sdhci_send_command() {
  6323. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6324. sdhci_prepare_data() {
  6325. sdhci_calc_timeout();
  6326. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  6327. sdhci_pre_dma_transfer();
  6328. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  6329. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  6330. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  6331. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  6332. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  6333. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  6334. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  6335. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x38 */
  6336. }
  6337. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x40 */
  6338. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  6339. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  6340. }
  6341. }
  6342. }
  6343. }
  6344. sdhci_post_req();
  6345. } /* mmc_start_areq */
  6346. sdhci_irq() {
  6347. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  6348. /* sdhci_irq: mmc0: RESPONSE */
  6349. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  6350. sdhci_finish_command() {
  6351. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  6352. }
  6353. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6354. }
  6355. mmc_exit_request();
  6356. } /* mmc_blk_issue_rw_rq */
  6357. } /* mmc_blk_issue_rq */
  6358. mmc_prep_request() {
  6359. mmc_access_rpmb();
  6360. }
  6361. mmc_blk_issue_rq() {
  6362. mmc_blk_issue_rw_rq() {
  6363. mmc_blk_rw_rq_prep() {
  6364. mmc_set_data_timeout();
  6365. mmc_queue_map_sg();
  6366. }
  6367. mmc_start_areq() {
  6368. sdhci_pre_req() {
  6369. sdhci_pre_dma_transfer();
  6370. }
  6371. sdhci_irq() {
  6372. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  6373. /* sdhci_irq: mmc0: DATA_END */
  6374. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  6375. sdhci_data_irq() {
  6376. sdhci_finish_data() {
  6377. sdhci_send_command() {
  6378. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ef0000 */
  6379. sdhci_prepare_data();
  6380. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  6381. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  6382. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  6383. }
  6384. }
  6385. }
  6386. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6387. }
  6388. sdhci_irq() {
  6389. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  6390. /* sdhci_irq: mmc0: RESPONSE */
  6391. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  6392. sdhci_finish_command() {
  6393. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  6394. sdhci_finish_mrq() {
  6395. sdhci_needs_reset();
  6396. }
  6397. }
  6398. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6399. }
  6400. sdhci_tasklet_finish() {
  6401. sdhci_del_timer();
  6402. sdhci_needs_reset();
  6403. mmc_request_done() {
  6404. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=28672 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  6405. sdhci_led_control() {
  6406. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  6407. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  6408. }
  6409. mmc_wait_data_done();
  6410. }
  6411. }
  6412. mmc_blk_err_check();
  6413. mmc_retune_release();
  6414. mmc_start_request() {
  6415. mmc_retune_hold();
  6416. sdhci_led_control() {
  6417. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  6418. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  6419. }
  6420. __mmc_start_request() {
  6421. mmc_retune();
  6422. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0x20 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=24 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  6423. sdhci_request() {
  6424. sdhci_get_cd() {
  6425. mmc_gpio_get_cd();
  6426. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6427. }
  6428. sdhci_send_command() {
  6429. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6430. sdhci_prepare_data() {
  6431. sdhci_calc_timeout();
  6432. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  6433. sdhci_pre_dma_transfer();
  6434. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  6435. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  6436. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  6437. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  6438. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  6439. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  6440. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  6441. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x18 */
  6442. }
  6443. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x20 */
  6444. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  6445. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  6446. }
  6447. }
  6448. }
  6449. }
  6450. sdhci_post_req();
  6451. }
  6452. sdhci_irq() {
  6453. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  6454. /* sdhci_irq: mmc0: RESPONSE */
  6455. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  6456. sdhci_finish_command() {
  6457. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  6458. }
  6459. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6460. }
  6461. mmc_exit_request();
  6462. }
  6463. }
  6464. mmc_prep_request() {
  6465. mmc_access_rpmb();
  6466. }
  6467. mmc_blk_issue_rq() {
  6468. mmc_blk_issue_rw_rq() {
  6469. mmc_blk_rw_rq_prep() {
  6470. mmc_set_data_timeout();
  6471. mmc_queue_map_sg();
  6472. }
  6473. mmc_start_areq() {
  6474. sdhci_pre_req() {
  6475. sdhci_pre_dma_transfer();
  6476. }
  6477. sdhci_irq() {
  6478. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  6479. /* sdhci_irq: mmc0: DATA_END */
  6480. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  6481. sdhci_data_irq() {
  6482. sdhci_finish_data() {
  6483. sdhci_send_command() {
  6484. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ef0000 */
  6485. sdhci_prepare_data();
  6486. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  6487. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  6488. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  6489. }
  6490. }
  6491. }
  6492. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6493. }
  6494. sdhci_irq() {
  6495. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  6496. /* sdhci_irq: mmc0: RESPONSE */
  6497. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  6498. sdhci_finish_command() {
  6499. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  6500. sdhci_finish_mrq() {
  6501. sdhci_needs_reset();
  6502. }
  6503. }
  6504. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6505. }
  6506. sdhci_tasklet_finish() {
  6507. sdhci_del_timer();
  6508. sdhci_needs_reset();
  6509. mmc_request_done() {
  6510. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=12288 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  6511. sdhci_led_control() {
  6512. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  6513. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  6514. }
  6515. mmc_wait_data_done();
  6516. }
  6517. }
  6518. mmc_blk_err_check();
  6519. mmc_retune_release();
  6520. mmc_start_request() {
  6521. mmc_retune_hold();
  6522. sdhci_led_control() {
  6523. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  6524. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  6525. }
  6526. __mmc_start_request() {
  6527. mmc_retune();
  6528. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0x10 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  6529. sdhci_request() {
  6530. sdhci_get_cd() {
  6531. mmc_gpio_get_cd();
  6532. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6533. }
  6534. sdhci_send_command() {
  6535. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6536. sdhci_prepare_data() {
  6537. sdhci_calc_timeout();
  6538. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  6539. sdhci_pre_dma_transfer();
  6540. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  6541. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  6542. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  6543. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  6544. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  6545. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  6546. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  6547. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  6548. }
  6549. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x10 */
  6550. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  6551. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  6552. }
  6553. }
  6554. }
  6555. }
  6556. sdhci_post_req();
  6557. }
  6558. sdhci_irq() {
  6559. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  6560. /* sdhci_irq: mmc0: RESPONSE */
  6561. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  6562. sdhci_finish_command() {
  6563. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  6564. }
  6565. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6566. }
  6567. mmc_exit_request();
  6568. }
  6569. }
  6570. mmc_blk_issue_rq() {
  6571. mmc_blk_issue_rw_rq() {
  6572. mmc_start_areq() {
  6573. sdhci_irq() {
  6574. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  6575. /* sdhci_irq: mmc0: DATA_END */
  6576. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  6577. sdhci_data_irq() {
  6578. sdhci_finish_data() {
  6579. sdhci_send_command() {
  6580. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ef0000 */
  6581. sdhci_prepare_data();
  6582. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  6583. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  6584. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  6585. }
  6586. }
  6587. }
  6588. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6589. }
  6590. sdhci_irq() {
  6591. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  6592. /* sdhci_irq: mmc0: RESPONSE */
  6593. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  6594. sdhci_finish_command() {
  6595. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  6596. sdhci_finish_mrq() {
  6597. sdhci_needs_reset();
  6598. }
  6599. }
  6600. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6601. }
  6602. sdhci_tasklet_finish() {
  6603. sdhci_del_timer();
  6604. sdhci_needs_reset();
  6605. mmc_request_done() {
  6606. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  6607. sdhci_led_control() {
  6608. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  6609. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  6610. }
  6611. mmc_wait_data_done();
  6612. }
  6613. }
  6614. mmc_blk_err_check();
  6615. mmc_retune_release();
  6616. sdhci_post_req();
  6617. } /* mmc_start_areq */
  6618. mmc_exit_request();
  6619. mmc_request_fn();
  6620. } /* mmc_blk_issue_rw_rq */
  6621. mmc_put_card() {
  6622. mmc_release_host();
  6623. }
  6624. } /* mmc_blk_issue_rq */
  6625. mmc_init_request();
  6626. mmc_request_fn();
  6627. mmc_prep_request() {
  6628. mmc_access_rpmb();
  6629. }
  6630. mmc_blk_issue_rq() {
  6631. mmc_get_card() {
  6632. __mmc_claim_host();
  6633. }
  6634. mmc_blk_issue_rw_rq() {
  6635. mmc_blk_rw_rq_prep() {
  6636. mmc_set_data_timeout();
  6637. mmc_queue_map_sg();
  6638. }
  6639. mmc_start_areq() {
  6640. sdhci_pre_req() {
  6641. sdhci_pre_dma_transfer();
  6642. }
  6643. mmc_start_request() {
  6644. mmc_retune_hold();
  6645. sdhci_led_control() {
  6646. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  6647. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  6648. }
  6649. __mmc_start_request() {
  6650. mmc_retune();
  6651. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0x200 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=512 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  6652. sdhci_request() {
  6653. sdhci_get_cd() {
  6654. mmc_gpio_get_cd();
  6655. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6656. }
  6657. sdhci_send_command() {
  6658. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6659. sdhci_prepare_data() {
  6660. sdhci_calc_timeout();
  6661. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  6662. sdhci_pre_dma_transfer();
  6663. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  6664. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  6665. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  6666. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  6667. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  6668. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  6669. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  6670. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x200 */
  6671. }
  6672. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x200 */
  6673. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  6674. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  6675. }
  6676. }
  6677. }
  6678. }
  6679. }
  6680. }
  6681. }
  6682. mmc_blk_issue_rq() {
  6683. mmc_blk_issue_rw_rq() {
  6684. mmc_start_areq() {
  6685. sdhci_irq() {
  6686. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  6687. /* sdhci_irq: mmc0: RESPONSE */
  6688. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  6689. sdhci_finish_command() {
  6690. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  6691. }
  6692. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6693. }
  6694. sdhci_irq() {
  6695. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  6696. /* sdhci_irq: mmc0: DATA_END */
  6697. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  6698. sdhci_data_irq() {
  6699. sdhci_finish_data() {
  6700. sdhci_send_command() {
  6701. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ef0000 */
  6702. sdhci_prepare_data();
  6703. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  6704. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  6705. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  6706. }
  6707. }
  6708. }
  6709. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6710. }
  6711. sdhci_irq() {
  6712. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  6713. /* sdhci_irq: mmc0: RESPONSE */
  6714. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  6715. sdhci_finish_command() {
  6716. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  6717. sdhci_finish_mrq() {
  6718. sdhci_needs_reset();
  6719. }
  6720. }
  6721. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6722. }
  6723. sdhci_tasklet_finish() {
  6724. sdhci_del_timer();
  6725. sdhci_needs_reset();
  6726. mmc_request_done() {
  6727. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=262144 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  6728. sdhci_led_control() {
  6729. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  6730. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  6731. }
  6732. mmc_wait_data_done();
  6733. }
  6734. }
  6735. mmc_blk_err_check();
  6736. mmc_retune_release();
  6737. sdhci_post_req();
  6738. }
  6739. mmc_exit_request();
  6740. mmc_request_fn();
  6741. }
  6742. mmc_put_card() {
  6743. mmc_release_host();
  6744. }
  6745. }
  6746. mmc_init_request();
  6747. mmc_init_request();
  6748. mmc_init_request();
  6749. mmc_init_request();
  6750. mmc_init_request();
  6751. mmc_init_request();
  6752. mmc_init_request();
  6753. mmc_init_request();
  6754. mmc_request_fn();
  6755. mmc_prep_request() {
  6756. mmc_access_rpmb();
  6757. }
  6758. mmc_blk_issue_rq() {
  6759. mmc_get_card() {
  6760. __mmc_claim_host();
  6761. }
  6762. mmc_blk_issue_rw_rq() {
  6763. mmc_blk_rw_rq_prep() {
  6764. mmc_set_data_timeout();
  6765. mmc_queue_map_sg();
  6766. }
  6767. mmc_start_areq() {
  6768. sdhci_pre_req() {
  6769. sdhci_pre_dma_transfer();
  6770. }
  6771. mmc_start_request() {
  6772. mmc_retune_hold();
  6773. sdhci_led_control() {
  6774. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  6775. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  6776. }
  6777. __mmc_start_request() {
  6778. mmc_retune();
  6779. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2c00 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=32 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  6780. sdhci_request() {
  6781. sdhci_get_cd() {
  6782. mmc_gpio_get_cd();
  6783. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6784. }
  6785. sdhci_send_command() {
  6786. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6787. sdhci_prepare_data() {
  6788. sdhci_calc_timeout();
  6789. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  6790. sdhci_pre_dma_transfer();
  6791. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  6792. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  6793. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  6794. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  6795. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  6796. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  6797. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  6798. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x20 */
  6799. }
  6800. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2c00 */
  6801. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  6802. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  6803. }
  6804. }
  6805. }
  6806. }
  6807. }
  6808. }
  6809. }
  6810. mmc_prep_request() {
  6811. mmc_access_rpmb();
  6812. }
  6813. mmc_blk_issue_rq() {
  6814. mmc_blk_issue_rw_rq() {
  6815. mmc_blk_rw_rq_prep() {
  6816. mmc_set_data_timeout() {
  6817. sdhci_irq() {
  6818. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  6819. /* sdhci_irq: mmc0: RESPONSE */
  6820. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  6821. sdhci_finish_command() {
  6822. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  6823. }
  6824. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6825. }
  6826. } /* mmc_set_data_timeout */
  6827. mmc_queue_map_sg();
  6828. }
  6829. mmc_start_areq() {
  6830. sdhci_pre_req() {
  6831. sdhci_pre_dma_transfer();
  6832. }
  6833. sdhci_irq() {
  6834. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  6835. /* sdhci_irq: mmc0: DATA_END */
  6836. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  6837. sdhci_data_irq() {
  6838. sdhci_finish_data() {
  6839. sdhci_send_command() {
  6840. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6841. sdhci_prepare_data();
  6842. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  6843. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  6844. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  6845. }
  6846. }
  6847. }
  6848. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6849. }
  6850. sdhci_irq() {
  6851. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  6852. /* sdhci_irq: mmc0: RESPONSE */
  6853. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  6854. sdhci_finish_command() {
  6855. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  6856. sdhci_finish_mrq() {
  6857. sdhci_needs_reset();
  6858. }
  6859. }
  6860. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6861. }
  6862. sdhci_tasklet_finish() {
  6863. sdhci_del_timer();
  6864. sdhci_needs_reset();
  6865. mmc_request_done() {
  6866. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=16384 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  6867. sdhci_led_control() {
  6868. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  6869. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  6870. }
  6871. mmc_wait_data_done();
  6872. }
  6873. }
  6874. mmc_blk_err_check();
  6875. mmc_retune_release();
  6876. mmc_start_request() {
  6877. mmc_retune_hold();
  6878. sdhci_led_control() {
  6879. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  6880. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  6881. }
  6882. __mmc_start_request() {
  6883. mmc_retune();
  6884. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2c28 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  6885. sdhci_request() {
  6886. sdhci_get_cd() {
  6887. mmc_gpio_get_cd();
  6888. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6889. }
  6890. sdhci_send_command() {
  6891. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6892. sdhci_prepare_data() {
  6893. sdhci_calc_timeout();
  6894. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  6895. sdhci_pre_dma_transfer();
  6896. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  6897. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  6898. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  6899. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  6900. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  6901. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  6902. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  6903. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  6904. }
  6905. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2c28 */
  6906. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  6907. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  6908. }
  6909. }
  6910. }
  6911. }
  6912. sdhci_post_req();
  6913. }
  6914. sdhci_irq() {
  6915. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  6916. /* sdhci_irq: mmc0: RESPONSE */
  6917. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  6918. sdhci_finish_command() {
  6919. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  6920. }
  6921. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6922. }
  6923. mmc_exit_request();
  6924. }
  6925. }
  6926. mmc_prep_request() {
  6927. mmc_access_rpmb();
  6928. }
  6929. mmc_blk_issue_rq() {
  6930. mmc_blk_issue_rw_rq() {
  6931. mmc_blk_rw_rq_prep() {
  6932. mmc_set_data_timeout();
  6933. mmc_queue_map_sg();
  6934. }
  6935. mmc_start_areq() {
  6936. sdhci_pre_req() {
  6937. sdhci_pre_dma_transfer();
  6938. }
  6939. sdhci_irq() {
  6940. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  6941. /* sdhci_irq: mmc0: DATA_END */
  6942. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  6943. sdhci_data_irq() {
  6944. sdhci_finish_data() {
  6945. sdhci_send_command() {
  6946. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6947. sdhci_prepare_data();
  6948. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  6949. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  6950. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  6951. }
  6952. }
  6953. }
  6954. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6955. }
  6956. sdhci_irq() {
  6957. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  6958. /* sdhci_irq: mmc0: RESPONSE */
  6959. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  6960. sdhci_finish_command() {
  6961. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  6962. sdhci_finish_mrq() {
  6963. sdhci_needs_reset();
  6964. }
  6965. }
  6966. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  6967. }
  6968. sdhci_tasklet_finish() {
  6969. sdhci_del_timer();
  6970. sdhci_needs_reset();
  6971. mmc_request_done() {
  6972. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  6973. sdhci_led_control() {
  6974. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  6975. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  6976. }
  6977. mmc_wait_data_done();
  6978. }
  6979. }
  6980. mmc_blk_err_check();
  6981. mmc_retune_release();
  6982. mmc_start_request() {
  6983. mmc_retune_hold();
  6984. sdhci_led_control() {
  6985. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  6986. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  6987. }
  6988. __mmc_start_request() {
  6989. mmc_retune();
  6990. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2c38 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=16 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  6991. sdhci_request() {
  6992. sdhci_get_cd() {
  6993. mmc_gpio_get_cd();
  6994. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6995. }
  6996. sdhci_send_command() {
  6997. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  6998. sdhci_prepare_data() {
  6999. sdhci_calc_timeout();
  7000. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  7001. sdhci_pre_dma_transfer();
  7002. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  7003. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  7004. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7005. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7006. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  7007. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  7008. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  7009. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x10 */
  7010. }
  7011. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2c38 */
  7012. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  7013. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  7014. }
  7015. }
  7016. }
  7017. }
  7018. sdhci_post_req();
  7019. } /* mmc_start_areq */
  7020. mmc_exit_request();
  7021. sdhci_irq() {
  7022. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7023. /* sdhci_irq: mmc0: RESPONSE */
  7024. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7025. sdhci_finish_command() {
  7026. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  7027. }
  7028. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7029. }
  7030. } /* mmc_blk_issue_rw_rq */
  7031. } /* mmc_blk_issue_rq */
  7032. mmc_prep_request() {
  7033. mmc_access_rpmb();
  7034. }
  7035. mmc_blk_issue_rq() {
  7036. mmc_blk_issue_rw_rq() {
  7037. mmc_blk_rw_rq_prep() {
  7038. mmc_set_data_timeout();
  7039. mmc_queue_map_sg();
  7040. }
  7041. mmc_start_areq() {
  7042. sdhci_pre_req() {
  7043. sdhci_pre_dma_transfer();
  7044. }
  7045. sdhci_irq() {
  7046. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  7047. /* sdhci_irq: mmc0: DATA_END */
  7048. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  7049. sdhci_data_irq() {
  7050. sdhci_finish_data() {
  7051. sdhci_send_command() {
  7052. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7053. sdhci_prepare_data();
  7054. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  7055. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  7056. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  7057. }
  7058. }
  7059. }
  7060. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7061. }
  7062. sdhci_irq() {
  7063. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7064. /* sdhci_irq: mmc0: RESPONSE */
  7065. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7066. sdhci_finish_command() {
  7067. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  7068. sdhci_finish_mrq() {
  7069. sdhci_needs_reset();
  7070. }
  7071. }
  7072. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7073. }
  7074. sdhci_tasklet_finish() {
  7075. sdhci_del_timer();
  7076. sdhci_needs_reset();
  7077. mmc_request_done() {
  7078. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=8192 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  7079. sdhci_led_control() {
  7080. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7081. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  7082. }
  7083. mmc_wait_data_done();
  7084. }
  7085. }
  7086. mmc_blk_err_check();
  7087. mmc_retune_release();
  7088. mmc_start_request() {
  7089. mmc_retune_hold();
  7090. sdhci_led_control() {
  7091. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  7092. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7093. }
  7094. __mmc_start_request() {
  7095. mmc_retune();
  7096. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2c50 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=32 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  7097. sdhci_request() {
  7098. sdhci_get_cd() {
  7099. mmc_gpio_get_cd();
  7100. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7101. }
  7102. sdhci_send_command() {
  7103. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7104. sdhci_prepare_data() {
  7105. sdhci_calc_timeout();
  7106. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  7107. sdhci_pre_dma_transfer();
  7108. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  7109. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  7110. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7111. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7112. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  7113. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  7114. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  7115. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x20 */
  7116. }
  7117. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2c50 */
  7118. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  7119. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  7120. }
  7121. }
  7122. }
  7123. }
  7124. sdhci_post_req();
  7125. } /* mmc_start_areq */
  7126. sdhci_irq() {
  7127. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7128. /* sdhci_irq: mmc0: RESPONSE */
  7129. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7130. sdhci_finish_command() {
  7131. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  7132. }
  7133. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7134. }
  7135. mmc_exit_request();
  7136. } /* mmc_blk_issue_rw_rq */
  7137. } /* mmc_blk_issue_rq */
  7138. mmc_prep_request() {
  7139. mmc_access_rpmb();
  7140. }
  7141. mmc_blk_issue_rq() {
  7142. mmc_blk_issue_rw_rq() {
  7143. mmc_blk_rw_rq_prep() {
  7144. mmc_set_data_timeout();
  7145. mmc_queue_map_sg();
  7146. }
  7147. mmc_start_areq() {
  7148. sdhci_pre_req() {
  7149. sdhci_pre_dma_transfer();
  7150. }
  7151. sdhci_irq() {
  7152. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  7153. /* sdhci_irq: mmc0: DATA_END */
  7154. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  7155. sdhci_data_irq() {
  7156. sdhci_finish_data() {
  7157. sdhci_send_command() {
  7158. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7159. sdhci_prepare_data();
  7160. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  7161. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  7162. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  7163. }
  7164. }
  7165. }
  7166. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7167. }
  7168. sdhci_irq() {
  7169. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7170. /* sdhci_irq: mmc0: RESPONSE */
  7171. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7172. sdhci_finish_command() {
  7173. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  7174. sdhci_finish_mrq() {
  7175. sdhci_needs_reset();
  7176. }
  7177. }
  7178. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7179. }
  7180. sdhci_tasklet_finish() {
  7181. sdhci_del_timer();
  7182. sdhci_needs_reset();
  7183. mmc_request_done() {
  7184. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=16384 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  7185. sdhci_led_control() {
  7186. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7187. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  7188. }
  7189. mmc_wait_data_done();
  7190. }
  7191. }
  7192. mmc_blk_err_check();
  7193. mmc_retune_release();
  7194. mmc_start_request() {
  7195. mmc_retune_hold();
  7196. sdhci_led_control() {
  7197. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  7198. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7199. }
  7200. __mmc_start_request() {
  7201. mmc_retune();
  7202. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2c78 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=168 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  7203. sdhci_request() {
  7204. sdhci_get_cd() {
  7205. mmc_gpio_get_cd();
  7206. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7207. }
  7208. sdhci_send_command() {
  7209. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7210. sdhci_prepare_data() {
  7211. sdhci_calc_timeout();
  7212. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  7213. sdhci_pre_dma_transfer();
  7214. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  7215. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  7216. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7217. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7218. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  7219. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  7220. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  7221. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0xa8 */
  7222. }
  7223. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2c78 */
  7224. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  7225. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  7226. }
  7227. }
  7228. }
  7229. }
  7230. sdhci_post_req();
  7231. }
  7232. sdhci_irq() {
  7233. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7234. /* sdhci_irq: mmc0: RESPONSE */
  7235. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7236. sdhci_finish_command() {
  7237. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  7238. }
  7239. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7240. }
  7241. mmc_exit_request();
  7242. }
  7243. }
  7244. mmc_prep_request() {
  7245. mmc_access_rpmb();
  7246. }
  7247. mmc_blk_issue_rq() {
  7248. mmc_blk_issue_rw_rq() {
  7249. mmc_blk_rw_rq_prep() {
  7250. mmc_set_data_timeout();
  7251. mmc_queue_map_sg();
  7252. }
  7253. mmc_start_areq() {
  7254. sdhci_pre_req() {
  7255. sdhci_pre_dma_transfer();
  7256. }
  7257. sdhci_irq() {
  7258. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  7259. /* sdhci_irq: mmc0: DATA_END */
  7260. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  7261. sdhci_data_irq() {
  7262. sdhci_finish_data() {
  7263. sdhci_send_command() {
  7264. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7265. sdhci_prepare_data();
  7266. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  7267. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  7268. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  7269. }
  7270. }
  7271. }
  7272. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7273. }
  7274. sdhci_irq() {
  7275. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7276. /* sdhci_irq: mmc0: RESPONSE */
  7277. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7278. sdhci_finish_command() {
  7279. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  7280. sdhci_finish_mrq() {
  7281. sdhci_needs_reset();
  7282. }
  7283. }
  7284. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7285. }
  7286. sdhci_tasklet_finish() {
  7287. sdhci_del_timer();
  7288. sdhci_needs_reset();
  7289. mmc_request_done() {
  7290. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=86016 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  7291. sdhci_led_control() {
  7292. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7293. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  7294. }
  7295. mmc_wait_data_done();
  7296. }
  7297. }
  7298. mmc_blk_err_check();
  7299. mmc_retune_release();
  7300. mmc_start_request() {
  7301. mmc_retune_hold();
  7302. sdhci_led_control() {
  7303. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  7304. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7305. }
  7306. __mmc_start_request() {
  7307. mmc_retune();
  7308. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2d28 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=48 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  7309. sdhci_request() {
  7310. sdhci_get_cd() {
  7311. mmc_gpio_get_cd();
  7312. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7313. }
  7314. sdhci_send_command() {
  7315. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7316. sdhci_prepare_data() {
  7317. sdhci_calc_timeout();
  7318. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  7319. sdhci_pre_dma_transfer();
  7320. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  7321. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  7322. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7323. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7324. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  7325. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  7326. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  7327. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x30 */
  7328. }
  7329. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2d28 */
  7330. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  7331. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  7332. }
  7333. }
  7334. }
  7335. }
  7336. sdhci_post_req();
  7337. }
  7338. sdhci_irq() {
  7339. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7340. /* sdhci_irq: mmc0: RESPONSE */
  7341. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7342. sdhci_finish_command() {
  7343. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  7344. }
  7345. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7346. }
  7347. mmc_exit_request();
  7348. }
  7349. }
  7350. mmc_prep_request() {
  7351. mmc_access_rpmb();
  7352. }
  7353. mmc_blk_issue_rq() {
  7354. mmc_blk_issue_rw_rq() {
  7355. mmc_blk_rw_rq_prep() {
  7356. mmc_set_data_timeout();
  7357. mmc_queue_map_sg();
  7358. }
  7359. mmc_start_areq() {
  7360. sdhci_pre_req() {
  7361. sdhci_pre_dma_transfer();
  7362. }
  7363. sdhci_irq() {
  7364. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  7365. /* sdhci_irq: mmc0: DATA_END */
  7366. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  7367. sdhci_data_irq() {
  7368. sdhci_finish_data() {
  7369. sdhci_send_command() {
  7370. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7371. sdhci_prepare_data();
  7372. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  7373. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  7374. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  7375. }
  7376. }
  7377. }
  7378. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7379. }
  7380. sdhci_irq() {
  7381. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7382. /* sdhci_irq: mmc0: RESPONSE */
  7383. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7384. sdhci_finish_command() {
  7385. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  7386. sdhci_finish_mrq() {
  7387. sdhci_needs_reset();
  7388. }
  7389. }
  7390. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7391. }
  7392. sdhci_tasklet_finish() {
  7393. sdhci_del_timer();
  7394. sdhci_needs_reset();
  7395. mmc_request_done() {
  7396. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=24576 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  7397. sdhci_led_control() {
  7398. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7399. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  7400. }
  7401. mmc_wait_data_done();
  7402. }
  7403. }
  7404. mmc_blk_err_check();
  7405. mmc_retune_release();
  7406. mmc_start_request() {
  7407. mmc_retune_hold();
  7408. sdhci_led_control() {
  7409. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  7410. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7411. }
  7412. __mmc_start_request() {
  7413. mmc_retune();
  7414. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2d60 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=80 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  7415. sdhci_request() {
  7416. sdhci_get_cd() {
  7417. mmc_gpio_get_cd();
  7418. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7419. }
  7420. sdhci_send_command() {
  7421. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7422. sdhci_prepare_data() {
  7423. sdhci_calc_timeout();
  7424. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  7425. sdhci_pre_dma_transfer();
  7426. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  7427. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  7428. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7429. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7430. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  7431. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  7432. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  7433. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x50 */
  7434. }
  7435. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2d60 */
  7436. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  7437. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  7438. }
  7439. }
  7440. }
  7441. }
  7442. sdhci_post_req();
  7443. }
  7444. sdhci_irq() {
  7445. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7446. /* sdhci_irq: mmc0: RESPONSE */
  7447. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7448. sdhci_finish_command() {
  7449. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  7450. }
  7451. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7452. }
  7453. mmc_exit_request();
  7454. }
  7455. }
  7456. mmc_prep_request() {
  7457. mmc_access_rpmb();
  7458. }
  7459. mmc_blk_issue_rq() {
  7460. mmc_blk_issue_rw_rq() {
  7461. mmc_blk_rw_rq_prep() {
  7462. mmc_set_data_timeout();
  7463. mmc_queue_map_sg();
  7464. }
  7465. mmc_start_areq() {
  7466. sdhci_pre_req() {
  7467. sdhci_pre_dma_transfer();
  7468. }
  7469. sdhci_irq() {
  7470. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  7471. /* sdhci_irq: mmc0: DATA_END */
  7472. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  7473. sdhci_data_irq() {
  7474. sdhci_finish_data() {
  7475. sdhci_send_command() {
  7476. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7477. sdhci_prepare_data();
  7478. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  7479. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  7480. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  7481. }
  7482. }
  7483. }
  7484. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7485. }
  7486. sdhci_irq() {
  7487. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7488. /* sdhci_irq: mmc0: RESPONSE */
  7489. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7490. sdhci_finish_command() {
  7491. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  7492. sdhci_finish_mrq() {
  7493. sdhci_needs_reset();
  7494. }
  7495. }
  7496. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7497. }
  7498. sdhci_tasklet_finish() {
  7499. sdhci_del_timer();
  7500. sdhci_needs_reset();
  7501. mmc_request_done() {
  7502. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=40960 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  7503. sdhci_led_control() {
  7504. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7505. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  7506. }
  7507. mmc_wait_data_done();
  7508. }
  7509. }
  7510. mmc_blk_err_check();
  7511. mmc_retune_release();
  7512. mmc_start_request() {
  7513. mmc_retune_hold();
  7514. sdhci_led_control() {
  7515. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  7516. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7517. }
  7518. __mmc_start_request() {
  7519. mmc_retune();
  7520. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2db8 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=72 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  7521. sdhci_request() {
  7522. sdhci_get_cd() {
  7523. mmc_gpio_get_cd();
  7524. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7525. }
  7526. sdhci_send_command() {
  7527. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7528. sdhci_prepare_data() {
  7529. sdhci_calc_timeout();
  7530. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  7531. sdhci_pre_dma_transfer();
  7532. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  7533. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  7534. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7535. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7536. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  7537. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  7538. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  7539. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x48 */
  7540. }
  7541. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2db8 */
  7542. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  7543. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  7544. }
  7545. }
  7546. }
  7547. }
  7548. sdhci_post_req();
  7549. }
  7550. sdhci_irq() {
  7551. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7552. /* sdhci_irq: mmc0: RESPONSE */
  7553. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7554. sdhci_finish_command() {
  7555. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  7556. }
  7557. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7558. }
  7559. mmc_exit_request();
  7560. }
  7561. }
  7562. mmc_blk_issue_rq() {
  7563. mmc_blk_issue_rw_rq() {
  7564. mmc_start_areq() {
  7565. sdhci_irq() {
  7566. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  7567. /* sdhci_irq: mmc0: DATA_END */
  7568. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  7569. sdhci_data_irq() {
  7570. sdhci_finish_data() {
  7571. sdhci_send_command() {
  7572. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7573. sdhci_prepare_data();
  7574. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  7575. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  7576. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  7577. }
  7578. }
  7579. }
  7580. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7581. }
  7582. sdhci_irq() {
  7583. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7584. /* sdhci_irq: mmc0: RESPONSE */
  7585. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7586. sdhci_finish_command() {
  7587. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  7588. sdhci_finish_mrq() {
  7589. sdhci_needs_reset();
  7590. }
  7591. }
  7592. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7593. }
  7594. sdhci_tasklet_finish() {
  7595. sdhci_del_timer();
  7596. sdhci_needs_reset();
  7597. mmc_request_done() {
  7598. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=36864 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  7599. sdhci_led_control() {
  7600. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7601. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  7602. }
  7603. mmc_wait_data_done();
  7604. }
  7605. }
  7606. mmc_blk_err_check();
  7607. mmc_retune_release();
  7608. sdhci_post_req();
  7609. }
  7610. mmc_exit_request();
  7611. mmc_request_fn();
  7612. }
  7613. mmc_put_card() {
  7614. mmc_release_host();
  7615. }
  7616. }
  7617. mmc_init_request();
  7618. mmc_init_request();
  7619. mmc_init_request();
  7620. mmc_init_request();
  7621. mmc_init_request();
  7622. mmc_request_fn();
  7623. mmc_prep_request() {
  7624. mmc_access_rpmb();
  7625. }
  7626. mmc_blk_issue_rq() {
  7627. mmc_get_card() {
  7628. __mmc_claim_host();
  7629. }
  7630. mmc_blk_issue_rw_rq() {
  7631. mmc_blk_rw_rq_prep() {
  7632. mmc_set_data_timeout();
  7633. mmc_queue_map_sg();
  7634. }
  7635. mmc_start_areq() {
  7636. sdhci_pre_req() {
  7637. sdhci_pre_dma_transfer();
  7638. }
  7639. mmc_start_request() {
  7640. mmc_retune_hold();
  7641. sdhci_led_control() {
  7642. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  7643. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7644. }
  7645. __mmc_start_request() {
  7646. mmc_retune();
  7647. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2e00 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=112 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  7648. sdhci_request() {
  7649. sdhci_get_cd() {
  7650. mmc_gpio_get_cd();
  7651. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7652. }
  7653. sdhci_send_command() {
  7654. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7655. sdhci_prepare_data() {
  7656. sdhci_calc_timeout();
  7657. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  7658. sdhci_pre_dma_transfer();
  7659. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  7660. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  7661. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7662. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7663. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  7664. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  7665. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  7666. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x70 */
  7667. }
  7668. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2e00 */
  7669. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  7670. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  7671. }
  7672. }
  7673. }
  7674. }
  7675. }
  7676. }
  7677. }
  7678. mmc_prep_request() {
  7679. mmc_access_rpmb();
  7680. }
  7681. mmc_blk_issue_rq() {
  7682. mmc_blk_issue_rw_rq() {
  7683. mmc_blk_rw_rq_prep() {
  7684. mmc_set_data_timeout();
  7685. mmc_queue_map_sg();
  7686. sdhci_irq() {
  7687. }
  7688. mmc_start_areq() {
  7689. sdhci_pre_req() {
  7690. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7691. sdhci_pre_dma_transfer();
  7692. /* sdhci_irq: mmc0: RESPONSE */
  7693. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7694. sdhci_finish_command() {
  7695. }
  7696. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  7697. }
  7698. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7699. }
  7700. sdhci_irq() {
  7701. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  7702. /* sdhci_irq: mmc0: DATA_END */
  7703. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  7704. sdhci_data_irq() {
  7705. sdhci_finish_data() {
  7706. sdhci_send_command() {
  7707. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7708. sdhci_prepare_data();
  7709. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  7710. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  7711. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  7712. }
  7713. }
  7714. }
  7715. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7716. }
  7717. sdhci_irq() {
  7718. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7719. /* sdhci_irq: mmc0: RESPONSE */
  7720. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7721. sdhci_finish_command() {
  7722. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  7723. sdhci_finish_mrq() {
  7724. sdhci_needs_reset();
  7725. }
  7726. }
  7727. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7728. }
  7729. sdhci_tasklet_finish() {
  7730. sdhci_del_timer();
  7731. sdhci_needs_reset();
  7732. mmc_request_done() {
  7733. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=57344 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  7734. sdhci_led_control() {
  7735. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7736. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  7737. }
  7738. mmc_wait_data_done();
  7739. }
  7740. }
  7741. mmc_blk_err_check();
  7742. mmc_retune_release();
  7743. mmc_start_request() {
  7744. mmc_retune_hold();
  7745. sdhci_led_control() {
  7746. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  7747. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7748. }
  7749. __mmc_start_request() {
  7750. mmc_retune();
  7751. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2e78 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=128 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  7752. sdhci_request() {
  7753. sdhci_get_cd() {
  7754. mmc_gpio_get_cd();
  7755. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7756. }
  7757. sdhci_send_command() {
  7758. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7759. sdhci_prepare_data() {
  7760. sdhci_calc_timeout();
  7761. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  7762. sdhci_pre_dma_transfer();
  7763. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  7764. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  7765. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7766. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7767. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  7768. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  7769. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  7770. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x80 */
  7771. }
  7772. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2e78 */
  7773. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  7774. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  7775. }
  7776. }
  7777. }
  7778. }
  7779. sdhci_post_req();
  7780. } /* mmc_start_areq */
  7781. sdhci_irq() {
  7782. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7783. /* sdhci_irq: mmc0: RESPONSE */
  7784. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7785. sdhci_finish_command() {
  7786. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  7787. }
  7788. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7789. }
  7790. mmc_exit_request();
  7791. } /* mmc_blk_issue_rw_rq */
  7792. } /* mmc_blk_issue_rq */
  7793. mmc_prep_request() {
  7794. mmc_access_rpmb();
  7795. }
  7796. mmc_blk_issue_rq() {
  7797. mmc_blk_issue_rw_rq() {
  7798. mmc_blk_rw_rq_prep() {
  7799. mmc_set_data_timeout();
  7800. mmc_queue_map_sg();
  7801. }
  7802. mmc_start_areq() {
  7803. sdhci_pre_req() {
  7804. sdhci_pre_dma_transfer();
  7805. }
  7806. sdhci_irq() {
  7807. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  7808. /* sdhci_irq: mmc0: DATA_END */
  7809. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  7810. sdhci_data_irq() {
  7811. sdhci_finish_data() {
  7812. sdhci_send_command() {
  7813. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7814. sdhci_prepare_data();
  7815. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  7816. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  7817. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  7818. }
  7819. }
  7820. }
  7821. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7822. }
  7823. sdhci_irq() {
  7824. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7825. /* sdhci_irq: mmc0: RESPONSE */
  7826. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7827. sdhci_finish_command() {
  7828. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  7829. sdhci_finish_mrq() {
  7830. sdhci_needs_reset();
  7831. }
  7832. }
  7833. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7834. }
  7835. sdhci_tasklet_finish() {
  7836. sdhci_del_timer();
  7837. sdhci_needs_reset();
  7838. mmc_request_done() {
  7839. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=65536 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  7840. sdhci_led_control() {
  7841. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7842. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  7843. }
  7844. mmc_wait_data_done();
  7845. }
  7846. }
  7847. mmc_blk_err_check();
  7848. mmc_retune_release();
  7849. mmc_start_request() {
  7850. mmc_retune_hold();
  7851. sdhci_led_control() {
  7852. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  7853. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7854. }
  7855. __mmc_start_request() {
  7856. mmc_retune();
  7857. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2f08 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=120 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  7858. sdhci_request() {
  7859. sdhci_get_cd() {
  7860. mmc_gpio_get_cd();
  7861. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7862. }
  7863. sdhci_send_command() {
  7864. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7865. sdhci_prepare_data() {
  7866. sdhci_calc_timeout();
  7867. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  7868. sdhci_pre_dma_transfer();
  7869. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  7870. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  7871. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7872. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7873. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  7874. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  7875. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  7876. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x78 */
  7877. }
  7878. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2f08 */
  7879. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  7880. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  7881. }
  7882. }
  7883. }
  7884. }
  7885. sdhci_post_req();
  7886. }
  7887. sdhci_irq() {
  7888. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7889. /* sdhci_irq: mmc0: RESPONSE */
  7890. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7891. sdhci_finish_command() {
  7892. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  7893. }
  7894. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7895. }
  7896. mmc_exit_request();
  7897. }
  7898. }
  7899. mmc_prep_request() {
  7900. mmc_access_rpmb();
  7901. }
  7902. mmc_blk_issue_rq() {
  7903. mmc_blk_issue_rw_rq() {
  7904. mmc_blk_rw_rq_prep() {
  7905. mmc_set_data_timeout();
  7906. mmc_queue_map_sg();
  7907. }
  7908. mmc_start_areq() {
  7909. sdhci_pre_req() {
  7910. sdhci_pre_dma_transfer();
  7911. }
  7912. sdhci_irq() {
  7913. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  7914. /* sdhci_irq: mmc0: DATA_END */
  7915. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  7916. sdhci_data_irq() {
  7917. sdhci_finish_data() {
  7918. sdhci_send_command() {
  7919. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7920. sdhci_prepare_data();
  7921. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  7922. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  7923. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  7924. }
  7925. }
  7926. }
  7927. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7928. }
  7929. sdhci_irq() {
  7930. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7931. /* sdhci_irq: mmc0: RESPONSE */
  7932. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7933. sdhci_finish_command() {
  7934. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  7935. sdhci_finish_mrq() {
  7936. sdhci_needs_reset();
  7937. }
  7938. }
  7939. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  7940. }
  7941. sdhci_tasklet_finish() {
  7942. sdhci_del_timer();
  7943. sdhci_needs_reset();
  7944. mmc_request_done() {
  7945. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=61440 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  7946. sdhci_led_control() {
  7947. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7948. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  7949. }
  7950. mmc_wait_data_done();
  7951. }
  7952. }
  7953. mmc_blk_err_check();
  7954. mmc_retune_release();
  7955. mmc_start_request() {
  7956. mmc_retune_hold();
  7957. sdhci_led_control() {
  7958. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  7959. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7960. }
  7961. __mmc_start_request() {
  7962. mmc_retune();
  7963. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2f88 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=56 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  7964. sdhci_request() {
  7965. sdhci_get_cd() {
  7966. mmc_gpio_get_cd();
  7967. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7968. }
  7969. sdhci_send_command() {
  7970. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  7971. sdhci_prepare_data() {
  7972. sdhci_calc_timeout();
  7973. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  7974. sdhci_pre_dma_transfer();
  7975. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  7976. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  7977. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  7978. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  7979. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  7980. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  7981. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  7982. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x38 */
  7983. }
  7984. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2f88 */
  7985. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  7986. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  7987. }
  7988. }
  7989. }
  7990. }
  7991. sdhci_post_req();
  7992. } /* mmc_start_areq */
  7993. sdhci_irq() {
  7994. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  7995. /* sdhci_irq: mmc0: RESPONSE */
  7996. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  7997. sdhci_finish_command() {
  7998. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  7999. }
  8000. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  8001. }
  8002. mmc_exit_request();
  8003. } /* mmc_blk_issue_rw_rq */
  8004. } /* mmc_blk_issue_rq */
  8005. mmc_prep_request() {
  8006. mmc_access_rpmb();
  8007. }
  8008. mmc_blk_issue_rq() {
  8009. mmc_blk_issue_rw_rq() {
  8010. mmc_blk_rw_rq_prep() {
  8011. mmc_set_data_timeout();
  8012. mmc_queue_map_sg();
  8013. }
  8014. mmc_start_areq() {
  8015. sdhci_pre_req() {
  8016. sdhci_pre_dma_transfer();
  8017. }
  8018. sdhci_irq() {
  8019. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  8020. /* sdhci_irq: mmc0: DATA_END */
  8021. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  8022. sdhci_data_irq() {
  8023. sdhci_finish_data() {
  8024. sdhci_send_command() {
  8025. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  8026. sdhci_prepare_data();
  8027. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  8028. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  8029. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  8030. }
  8031. }
  8032. }
  8033. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  8034. }
  8035. sdhci_irq() {
  8036. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  8037. /* sdhci_irq: mmc0: RESPONSE */
  8038. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  8039. sdhci_finish_command() {
  8040. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  8041. sdhci_finish_mrq() {
  8042. sdhci_needs_reset();
  8043. }
  8044. }
  8045. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  8046. }
  8047. sdhci_tasklet_finish() {
  8048. sdhci_del_timer();
  8049. sdhci_needs_reset();
  8050. mmc_request_done() {
  8051. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=28672 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  8052. sdhci_led_control() {
  8053. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  8054. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  8055. }
  8056. mmc_wait_data_done();
  8057. }
  8058. }
  8059. mmc_blk_err_check();
  8060. mmc_retune_release();
  8061. mmc_start_request() {
  8062. mmc_retune_hold();
  8063. sdhci_led_control() {
  8064. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  8065. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  8066. }
  8067. __mmc_start_request() {
  8068. mmc_retune();
  8069. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0xed2fc8 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=40 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  8070. sdhci_request() {
  8071. sdhci_get_cd() {
  8072. mmc_gpio_get_cd();
  8073. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  8074. }
  8075. sdhci_send_command() {
  8076. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  8077. sdhci_prepare_data() {
  8078. sdhci_calc_timeout();
  8079. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  8080. sdhci_pre_dma_transfer();
  8081. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  8082. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  8083. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  8084. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  8085. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  8086. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  8087. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  8088. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x28 */
  8089. }
  8090. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0xed2fc8 */
  8091. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  8092. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  8093. }
  8094. }
  8095. }
  8096. }
  8097. sdhci_post_req();
  8098. }
  8099. sdhci_irq() {
  8100. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  8101. /* sdhci_irq: mmc0: RESPONSE */
  8102. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  8103. sdhci_finish_command() {
  8104. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  8105. }
  8106. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  8107. }
  8108. mmc_exit_request();
  8109. }
  8110. }
  8111. mmc_blk_issue_rq() {
  8112. mmc_blk_issue_rw_rq() {
  8113. mmc_start_areq() {
  8114. sdhci_irq() {
  8115. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  8116. /* sdhci_irq: mmc0: DATA_END */
  8117. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  8118. sdhci_data_irq() {
  8119. sdhci_finish_data() {
  8120. sdhci_send_command() {
  8121. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  8122. sdhci_prepare_data();
  8123. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  8124. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  8125. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  8126. }
  8127. }
  8128. }
  8129. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  8130. }
  8131. sdhci_irq() {
  8132. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  8133. /* sdhci_irq: mmc0: RESPONSE */
  8134. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  8135. sdhci_finish_command() {
  8136. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  8137. sdhci_finish_mrq() {
  8138. sdhci_needs_reset();
  8139. }
  8140. }
  8141. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  8142. }
  8143. sdhci_tasklet_finish() {
  8144. sdhci_del_timer();
  8145. sdhci_needs_reset();
  8146. mmc_request_done() {
  8147. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=20480 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  8148. sdhci_led_control() {
  8149. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  8150. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  8151. }
  8152. mmc_wait_data_done();
  8153. }
  8154. }
  8155. mmc_blk_err_check();
  8156. mmc_retune_release();
  8157. sdhci_post_req();
  8158. }
  8159. mmc_exit_request();
  8160. mmc_request_fn();
  8161. mmc_init_request();
  8162. mmc_request_fn();
  8163. }
  8164. mmc_put_card() {
  8165. mmc_release_host();
  8166. }
  8167. }
  8168. mmc_prep_request() {
  8169. mmc_access_rpmb();
  8170. }
  8171. mmc_blk_issue_rq() {
  8172. mmc_get_card() {
  8173. __mmc_claim_host();
  8174. }
  8175. mmc_blk_issue_rw_rq() {
  8176. mmc_blk_rw_rq_prep() {
  8177. mmc_set_data_timeout();
  8178. mmc_queue_map_sg();
  8179. }
  8180. mmc_start_areq() {
  8181. sdhci_pre_req() {
  8182. sdhci_pre_dma_transfer();
  8183. }
  8184. mmc_start_request() {
  8185. mmc_retune_hold();
  8186. sdhci_led_control() {
  8187. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  8188. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  8189. }
  8190. __mmc_start_request() {
  8191. mmc_retune();
  8192. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=18 cmd_arg=0x1000 cmd_flags=0xb5 cmd_retries=0 stop_opcode=12 stop_arg=0x0 stop_flags=0x95 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=8 block_size=512 blk_addr=0 data_flags=0x200 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  8193. sdhci_request() {
  8194. sdhci_get_cd() {
  8195. mmc_gpio_get_cd();
  8196. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  8197. }
  8198. sdhci_send_command() {
  8199. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ff0000 */
  8200. sdhci_prepare_data() {
  8201. sdhci_calc_timeout();
  8202. /* sdhci_writeb: mmc0: 0x2e [CLOCK_CONTROL] <= 0xa */
  8203. sdhci_pre_dma_transfer();
  8204. /* sdhci_writel: mmc0: 0x58 [ADMA_ADDRESS] <= 0x28568200 */
  8205. /* sdhci_writel: mmc0: 0x5c [ADMA_ADDRESS_HI] <= 0x1 */
  8206. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  8207. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  8208. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff108b */
  8209. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff108b */
  8210. /* sdhci_writew: mmc0: 0x4 [BLOCK_SIZE] <= 0x7200 */
  8211. /* sdhci_writew: mmc0: 0x6 [BLOCK_SIZE] <= 0x8 */
  8212. }
  8213. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x1000 */
  8214. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x33 */
  8215. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0x123a */
  8216. }
  8217. }
  8218. }
  8219. }
  8220. }
  8221. }
  8222. }
  8223. mmc_blk_issue_rq() {
  8224. mmc_blk_issue_rw_rq() {
  8225. mmc_start_areq() {
  8226. sdhci_irq() {
  8227. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  8228. /* sdhci_irq: mmc0: RESPONSE */
  8229. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  8230. sdhci_finish_command() {
  8231. /* sdhci_readl: mmc0: 0x10 [0x10] => 0x900 */
  8232. }
  8233. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  8234. }
  8235. sdhci_irq() {
  8236. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x2 */
  8237. /* sdhci_irq: mmc0: DATA_END */
  8238. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x2 */
  8239. sdhci_data_irq() {
  8240. sdhci_finish_data() {
  8241. sdhci_send_command() {
  8242. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1ef0000 */
  8243. sdhci_prepare_data();
  8244. /* sdhci_writel: mmc0: 0x8 [ARGUMENT] <= 0x0 */
  8245. /* sdhci_writew: mmc0: 0xc [TRANSFER_MODE] <= 0x0 */
  8246. /* sdhci_writew: mmc0: 0xe [TRANSFER_MODE] <= 0xc1a */
  8247. }
  8248. }
  8249. }
  8250. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  8251. }
  8252. sdhci_irq() {
  8253. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x1 */
  8254. /* sdhci_irq: mmc0: RESPONSE */
  8255. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x1 */
  8256. sdhci_finish_command() {
  8257. /* sdhci_readl: mmc0: 0x10 [0x10] => 0xb00 */
  8258. sdhci_finish_mrq() {
  8259. sdhci_needs_reset();
  8260. }
  8261. }
  8262. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  8263. }
  8264. sdhci_tasklet_finish() {
  8265. sdhci_del_timer();
  8266. sdhci_needs_reset();
  8267. mmc_request_done() {
  8268. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=18 cmd_err=0 cmd_resp=0x900 0x0 0x0 0x0 cmd_retries=0 stop_opcode=12 stop_err=0 stop_resp=0xb00 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=4096 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  8269. sdhci_led_control() {
  8270. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  8271. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  8272. }
  8273. mmc_wait_data_done();
  8274. }
  8275. }
  8276. mmc_blk_err_check();
  8277. mmc_retune_release();
  8278. sdhci_post_req();
  8279. }
  8280. mmc_exit_request();
  8281. mmc_request_fn();
  8282. mmc_blk_release() {
  8283. mmc_blk_put();
  8284. }
  8285. } /* mmc_blk_issue_rw_rq */
  8286. mmc_put_card() {
  8287. mmc_release_host();
  8288. }
  8289. } /* mmc_blk_issue_rq */
  8290. mmc_blk_release() {
  8291. mmc_blk_put();
  8292. }
  8293. mmc_bus_uevent();
  8294. mmc_runtime_suspend() {
  8295. mmc_sd_runtime_suspend();
  8296. }
  8297. sdhci_irq() {
  8298. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x80 */
  8299. /* sdhci_irq: mmc0: CARD_REMOVE */
  8300. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x0 */
  8301. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1f80000 */
  8302. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0x2ff104b */
  8303. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x2ff104b */
  8304. /* sdhci_writel: mmc0: 0x30 [INT_STATUS] <= 0x80 */
  8305. /* sdhci_readl: mmc0: 0x30 [INT_STATUS] => 0x0 */
  8306. }
  8307. sdhci_thread_irq() {
  8308. sdhci_card_event() {
  8309. sdhci_get_cd() {
  8310. mmc_gpio_get_cd();
  8311. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0x1f80000 */
  8312. }
  8313. }
  8314. mmc_detect_change() {
  8315. _mmc_detect_change() {
  8316. mmc_schedule_delayed_work();
  8317. }
  8318. }
  8319. }
  8320. mmc_rescan() {
  8321. mmc_sd_detect() {
  8322. mmc_get_card() {
  8323. mmc_runtime_resume() {
  8324. mmc_sd_runtime_resume() {
  8325. __mmc_claim_host();
  8326. mmc_release_host();
  8327. }
  8328. }
  8329. __mmc_claim_host();
  8330. }
  8331. _mmc_detect_card_removed() {
  8332. mmc_sd_alive() {
  8333. mmc_send_status() {
  8334. __mmc_send_status() {
  8335. mmc_wait_for_cmd() {
  8336. mmc_wait_for_req() {
  8337. mmc_start_request() {
  8338. mmc_retune_hold();
  8339. sdhci_led_control() {
  8340. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x18 */
  8341. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x19 */
  8342. }
  8343. __mmc_start_request() {
  8344. mmc_retune();
  8345. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=13 cmd_arg=0x10000 cmd_flags=0x195 cmd_retries=3 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  8346. sdhci_request() {
  8347. sdhci_get_cd() {
  8348. mmc_gpio_get_cd();
  8349. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0xa0000 */
  8350. }
  8351. sdhci_finish_mrq() {
  8352. sdhci_needs_reset();
  8353. }
  8354. }
  8355. }
  8356. }
  8357. mmc_wait_for_req_done() {
  8358. sdhci_tasklet_finish() {
  8359. sdhci_del_timer();
  8360. sdhci_needs_reset();
  8361. sdhci_do_reset() {
  8362. sdhci_reset() {
  8363. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xe19 */
  8364. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x2 */
  8365. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  8366. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xe19 */
  8367. }
  8368. }
  8369. sdhci_do_reset() {
  8370. sdhci_reset() {
  8371. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xe19 */
  8372. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x4 */
  8373. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  8374. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xe19 */
  8375. }
  8376. }
  8377. mmc_request_done() {
  8378. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=13 cmd_err=-123 cmd_resp=0x0 0x0 0x0 0x0 cmd_retries=3 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  8379. mmc_wait_done();
  8380. }
  8381. }
  8382. __mmc_start_request() {
  8383. mmc_retune();
  8384. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=13 cmd_arg=0x10000 cmd_flags=0x195 cmd_retries=2 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  8385. sdhci_request() {
  8386. sdhci_get_cd() {
  8387. mmc_gpio_get_cd();
  8388. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0xa0000 */
  8389. }
  8390. sdhci_finish_mrq() {
  8391. sdhci_needs_reset();
  8392. }
  8393. }
  8394. }
  8395. sdhci_tasklet_finish() {
  8396. sdhci_del_timer();
  8397. sdhci_needs_reset();
  8398. sdhci_do_reset() {
  8399. sdhci_reset() {
  8400. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xe19 */
  8401. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x2 */
  8402. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  8403. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xe19 */
  8404. }
  8405. }
  8406. sdhci_do_reset() {
  8407. sdhci_reset() {
  8408. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xe19 */
  8409. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x4 */
  8410. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  8411. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xe19 */
  8412. }
  8413. }
  8414. mmc_request_done() {
  8415. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=13 cmd_err=-123 cmd_resp=0x0 0x0 0x0 0x0 cmd_retries=2 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  8416. mmc_wait_done();
  8417. }
  8418. }
  8419. __mmc_start_request() {
  8420. mmc_retune();
  8421. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=13 cmd_arg=0x10000 cmd_flags=0x195 cmd_retries=1 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  8422. sdhci_request() {
  8423. sdhci_get_cd() {
  8424. mmc_gpio_get_cd();
  8425. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0xa0000 */
  8426. }
  8427. sdhci_finish_mrq() {
  8428. sdhci_needs_reset();
  8429. }
  8430. }
  8431. }
  8432. sdhci_tasklet_finish() {
  8433. sdhci_del_timer();
  8434. sdhci_needs_reset();
  8435. sdhci_do_reset() {
  8436. sdhci_reset() {
  8437. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xe19 */
  8438. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x2 */
  8439. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  8440. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xe19 */
  8441. }
  8442. }
  8443. sdhci_do_reset() {
  8444. sdhci_reset() {
  8445. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xe19 */
  8446. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x4 */
  8447. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  8448. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xe19 */
  8449. }
  8450. }
  8451. mmc_request_done() {
  8452. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=13 cmd_err=-123 cmd_resp=0x0 0x0 0x0 0x0 cmd_retries=1 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  8453. mmc_wait_done();
  8454. }
  8455. }
  8456. __mmc_start_request() {
  8457. mmc_retune();
  8458. /* mmc_request_start: mmc0: start struct mmc_request[xxxx]: cmd_opcode=13 cmd_arg=0x10000 cmd_flags=0x195 cmd_retries=0 stop_opcode=0 stop_arg=0x0 stop_flags=0x0 stop_retries=0 sbc_opcode=0 sbc_arg=0x0 sbc_flags=0x0 sbc_retires=0 blocks=0 block_size=0 blk_addr=0 data_flags=0x0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  8459. sdhci_request() {
  8460. sdhci_get_cd() {
  8461. mmc_gpio_get_cd();
  8462. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0xa0000 */
  8463. }
  8464. sdhci_finish_mrq() {
  8465. sdhci_needs_reset();
  8466. }
  8467. }
  8468. }
  8469. sdhci_tasklet_finish() {
  8470. sdhci_del_timer();
  8471. sdhci_needs_reset();
  8472. sdhci_do_reset() {
  8473. sdhci_reset() {
  8474. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xe19 */
  8475. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x2 */
  8476. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  8477. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xe19 */
  8478. }
  8479. }
  8480. sdhci_do_reset() {
  8481. sdhci_reset() {
  8482. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xe19 */
  8483. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x4 */
  8484. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  8485. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xe19 */
  8486. }
  8487. }
  8488. mmc_request_done() {
  8489. /* mmc_request_done: mmc0: end struct mmc_request[xxxx]: cmd_opcode=13 cmd_err=-123 cmd_resp=0x0 0x0 0x0 0x0 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 tag=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0 */
  8490. sdhci_led_control() {
  8491. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x19 */
  8492. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x18 */
  8493. }
  8494. mmc_wait_done();
  8495. }
  8496. }
  8497. mmc_retune_release();
  8498. }
  8499. }
  8500. }
  8501. }
  8502. }
  8503. }
  8504. } /* _mmc_detect_card_removed */
  8505. mmc_put_card() {
  8506. mmc_release_host();
  8507. }
  8508. mmc_sd_remove() {
  8509. mmc_remove_card() {
  8510. mmc_remove_card_debugfs();
  8511. mmc_bus_remove() {
  8512. mmc_blk_remove() {
  8513. mmc_blk_remove_parts();
  8514. __mmc_claim_host();
  8515. mmc_release_host();
  8516. mmc_blk_remove_req() {
  8517. mmc_cleanup_queue() {
  8518. mmc_queue_resume();
  8519. } /* mmc_queue_thread */
  8520. mmc_request_fn();
  8521. }
  8522. mmc_blk_put();
  8523. }
  8524. }
  8525. }
  8526. mmc_bus_uevent();
  8527. mmc_bus_uevent();
  8528. mmc_release_card();
  8529. }
  8530. }
  8531. __mmc_claim_host();
  8532. mmc_detach_bus();
  8533. mmc_power_off() {
  8534. mmc_pwrseq_power_off();
  8535. mmc_set_initial_state() {
  8536. mmc_retune_disable() {
  8537. mmc_retune_unpause();
  8538. }
  8539. sdhci_set_ios() {
  8540. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0x0 */
  8541. sdhci_init() {
  8542. sdhci_do_reset() {
  8543. sdhci_reset() {
  8544. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0xe18 */
  8545. /* sdhci_writeb: mmc0: 0x2f [CLOCK_CONTROL] <= 0x1 */
  8546. /* sdhci_readb: mmc0: 0x2f [CLOCK_CONTROL] => 0x0 */
  8547. /* sdhci_readl: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  8548. }
  8549. sdhci_pci_enable_dma();
  8550. }
  8551. sdhci_set_default_irqs() {
  8552. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0xff1003 */
  8553. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0xff1003 */
  8554. }
  8555. }
  8556. sdhci_enable_card_detection() {
  8557. sdhci_set_card_detection() {
  8558. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0xa0000 */
  8559. /* sdhci_writel: mmc0: 0x34 [INT_ENABLE] <= 0xff1043 */
  8560. /* sdhci_writel: mmc0: 0x38 [SIGNAL_ENABLE] <= 0xff1043 */
  8561. }
  8562. }
  8563. sdhci_set_clock() {
  8564. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x0 */
  8565. }
  8566. sdhci_set_power() {
  8567. sdhci_set_power_noreg() {
  8568. /* sdhci_writeb: mmc0: 0x29 [HOST_CONTROL] <= 0x0 */
  8569. }
  8570. }
  8571. sdhci_set_bus_width() {
  8572. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  8573. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  8574. }
  8575. /* sdhci_readb: mmc0: 0x28 [HOST_CONTROL] => 0x0 */
  8576. /* sdhci_writeb: mmc0: 0x28 [HOST_CONTROL] <= 0x0 */
  8577. /* sdhci_readw: mmc0: 0x3e [ACMD12_ERR] => 0x0 */
  8578. /* sdhci_writew: mmc0: 0x3e [ACMD12_ERR] <= 0x0 */
  8579. /* sdhci_readw: mmc0: 0x2c [CLOCK_CONTROL] => 0x0 */
  8580. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x0 */
  8581. sdhci_set_uhs_signaling() {
  8582. /* sdhci_readw: mmc0: 0x3e [ACMD12_ERR] => 0x0 */
  8583. /* sdhci_writew: mmc0: 0x3e [ACMD12_ERR] <= 0x0 */
  8584. }
  8585. sdhci_set_clock() {
  8586. /* sdhci_writew: mmc0: 0x2c [CLOCK_CONTROL] <= 0x0 */
  8587. }
  8588. }
  8589. }
  8590. mmc_exit_request();
  8591. mmc_exit_request();
  8592. mmc_exit_request();
  8593. mmc_exit_request();
  8594. mmc_exit_request();
  8595. }
  8596. mmc_release_host();
  8597. } /* mmc_sd_detect */
  8598. __mmc_claim_host();
  8599. sdhci_get_cd() {
  8600. mmc_gpio_get_cd();
  8601. /* sdhci_readl: mmc0: 0x24 [PRESENT_STATE] => 0xa0000 */
  8602. }
  8603. mmc_power_off();
  8604. mmc_release_host();
  8605. } /* mmc_rescan */
  8606. /* kill-sd ended */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement