sd.c 111 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545
  1. /* Driver for Realtek PCI-Express card reader
  2. *
  3. * Copyright(c) 2009-2013 Realtek Semiconductor Corp. All rights reserved.
  4. *
  5. * This program is free software; you can redistribute it and/or modify it
  6. * under the terms of the GNU General Public License as published by the
  7. * Free Software Foundation; either version 2, or (at your option) any
  8. * later version.
  9. *
  10. * This program is distributed in the hope that it will be useful, but
  11. * WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  13. * General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License along
  16. * with this program; if not, see <http://www.gnu.org/licenses/>.
  17. *
  18. * Author:
  19. * Wei WANG (wei_wang@realsil.com.cn)
  20. * Micky Ching (micky_ching@realsil.com.cn)
  21. */
  22. #include <linux/blkdev.h>
  23. #include <linux/kthread.h>
  24. #include <linux/sched.h>
  25. #include "rtsx.h"
  26. #include "rtsx_transport.h"
  27. #include "rtsx_scsi.h"
  28. #include "rtsx_card.h"
  29. #include "sd.h"
  30. #define SD_MAX_RETRY_COUNT 3
  31. static u16 REG_SD_CFG1;
  32. static u16 REG_SD_CFG2;
  33. static u16 REG_SD_CFG3;
  34. static u16 REG_SD_STAT1;
  35. static u16 REG_SD_STAT2;
  36. static u16 REG_SD_BUS_STAT;
  37. static u16 REG_SD_PAD_CTL;
  38. static u16 REG_SD_SAMPLE_POINT_CTL;
  39. static u16 REG_SD_PUSH_POINT_CTL;
  40. static u16 REG_SD_CMD0;
  41. static u16 REG_SD_CMD1;
  42. static u16 REG_SD_CMD2;
  43. static u16 REG_SD_CMD3;
  44. static u16 REG_SD_CMD4;
  45. static u16 REG_SD_CMD5;
  46. static u16 REG_SD_BYTE_CNT_L;
  47. static u16 REG_SD_BYTE_CNT_H;
  48. static u16 REG_SD_BLOCK_CNT_L;
  49. static u16 REG_SD_BLOCK_CNT_H;
  50. static u16 REG_SD_TRANSFER;
  51. static u16 REG_SD_VPCLK0_CTL;
  52. static u16 REG_SD_VPCLK1_CTL;
  53. static u16 REG_SD_DCMPS0_CTL;
  54. static u16 REG_SD_DCMPS1_CTL;
  55. static inline void sd_set_err_code(struct rtsx_chip *chip, u8 err_code)
  56. {
  57. struct sd_info *sd_card = &(chip->sd_card);
  58. sd_card->err_code |= err_code;
  59. }
  60. static inline void sd_clr_err_code(struct rtsx_chip *chip)
  61. {
  62. struct sd_info *sd_card = &(chip->sd_card);
  63. sd_card->err_code = 0;
  64. }
  65. static inline int sd_check_err_code(struct rtsx_chip *chip, u8 err_code)
  66. {
  67. struct sd_info *sd_card = &(chip->sd_card);
  68. return sd_card->err_code & err_code;
  69. }
  70. static void sd_init_reg_addr(struct rtsx_chip *chip)
  71. {
  72. REG_SD_CFG1 = 0xFD31;
  73. REG_SD_CFG2 = 0xFD33;
  74. REG_SD_CFG3 = 0xFD3E;
  75. REG_SD_STAT1 = 0xFD30;
  76. REG_SD_STAT2 = 0;
  77. REG_SD_BUS_STAT = 0;
  78. REG_SD_PAD_CTL = 0;
  79. REG_SD_SAMPLE_POINT_CTL = 0;
  80. REG_SD_PUSH_POINT_CTL = 0;
  81. REG_SD_CMD0 = 0xFD34;
  82. REG_SD_CMD1 = 0xFD35;
  83. REG_SD_CMD2 = 0xFD36;
  84. REG_SD_CMD3 = 0xFD37;
  85. REG_SD_CMD4 = 0xFD38;
  86. REG_SD_CMD5 = 0xFD5A;
  87. REG_SD_BYTE_CNT_L = 0xFD39;
  88. REG_SD_BYTE_CNT_H = 0xFD3A;
  89. REG_SD_BLOCK_CNT_L = 0xFD3B;
  90. REG_SD_BLOCK_CNT_H = 0xFD3C;
  91. REG_SD_TRANSFER = 0xFD32;
  92. REG_SD_VPCLK0_CTL = 0;
  93. REG_SD_VPCLK1_CTL = 0;
  94. REG_SD_DCMPS0_CTL = 0;
  95. REG_SD_DCMPS1_CTL = 0;
  96. }
  97. static int sd_check_data0_status(struct rtsx_chip *chip)
  98. {
  99. u8 stat;
  100. RTSX_READ_REG(chip, REG_SD_STAT1, &stat);
  101. if (!(stat & SD_DAT0_STATUS)) {
  102. sd_set_err_code(chip, SD_BUSY);
  103. TRACE_RET(chip, STATUS_FAIL);
  104. }
  105. return STATUS_SUCCESS;
  106. }
  107. static int sd_send_cmd_get_rsp(struct rtsx_chip *chip, u8 cmd_idx,
  108. u32 arg, u8 rsp_type, u8 *rsp, int rsp_len)
  109. {
  110. struct sd_info *sd_card = &(chip->sd_card);
  111. int retval;
  112. int timeout = 100;
  113. u16 reg_addr;
  114. u8 *ptr;
  115. int stat_idx = 0;
  116. int rty_cnt = 0;
  117. sd_clr_err_code(chip);
  118. dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d, arg = 0x%08x\n", cmd_idx, arg);
  119. if (rsp_type == SD_RSP_TYPE_R1b)
  120. timeout = 3000;
  121. RTY_SEND_CMD:
  122. rtsx_init_cmd(chip);
  123. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | cmd_idx);
  124. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, (u8)(arg >> 24));
  125. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, (u8)(arg >> 16));
  126. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, (u8)(arg >> 8));
  127. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, (u8)arg);
  128. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type);
  129. rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE,
  130. 0x01, PINGPONG_BUFFER);
  131. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER,
  132. 0xFF, SD_TM_CMD_RSP | SD_TRANSFER_START);
  133. rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
  134. SD_TRANSFER_END | SD_STAT_IDLE, SD_TRANSFER_END | SD_STAT_IDLE);
  135. if (rsp_type == SD_RSP_TYPE_R2) {
  136. for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16;
  137. reg_addr++)
  138. rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
  139. stat_idx = 16;
  140. } else if (rsp_type != SD_RSP_TYPE_R0) {
  141. for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4;
  142. reg_addr++)
  143. rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
  144. stat_idx = 5;
  145. }
  146. rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_STAT1, 0, 0);
  147. retval = rtsx_send_cmd(chip, SD_CARD, timeout);
  148. if (retval < 0) {
  149. u8 val;
  150. rtsx_read_register(chip, REG_SD_STAT1, &val);
  151. dev_dbg(rtsx_dev(chip), "SD_STAT1: 0x%x\n", val);
  152. rtsx_read_register(chip, REG_SD_CFG3, &val);
  153. dev_dbg(rtsx_dev(chip), "SD_CFG3: 0x%x\n", val);
  154. if (retval == -ETIMEDOUT) {
  155. if (rsp_type & SD_WAIT_BUSY_END) {
  156. retval = sd_check_data0_status(chip);
  157. if (retval != STATUS_SUCCESS) {
  158. rtsx_clear_sd_error(chip);
  159. TRACE_RET(chip, retval);
  160. }
  161. } else {
  162. sd_set_err_code(chip, SD_TO_ERR);
  163. }
  164. retval = STATUS_TIMEDOUT;
  165. } else {
  166. retval = STATUS_FAIL;
  167. }
  168. rtsx_clear_sd_error(chip);
  169. TRACE_RET(chip, retval);
  170. }
  171. if (rsp_type == SD_RSP_TYPE_R0)
  172. return STATUS_SUCCESS;
  173. ptr = rtsx_get_cmd_data(chip) + 1;
  174. if ((ptr[0] & 0xC0) != 0) {
  175. sd_set_err_code(chip, SD_STS_ERR);
  176. TRACE_RET(chip, STATUS_FAIL);
  177. }
  178. if (!(rsp_type & SD_NO_CHECK_CRC7)) {
  179. if (ptr[stat_idx] & SD_CRC7_ERR) {
  180. if (cmd_idx == WRITE_MULTIPLE_BLOCK) {
  181. sd_set_err_code(chip, SD_CRC_ERR);
  182. TRACE_RET(chip, STATUS_FAIL);
  183. }
  184. if (rty_cnt < SD_MAX_RETRY_COUNT) {
  185. wait_timeout(20);
  186. rty_cnt++;
  187. goto RTY_SEND_CMD;
  188. } else {
  189. sd_set_err_code(chip, SD_CRC_ERR);
  190. TRACE_RET(chip, STATUS_FAIL);
  191. }
  192. }
  193. }
  194. if ((rsp_type == SD_RSP_TYPE_R1) || (rsp_type == SD_RSP_TYPE_R1b)) {
  195. if ((cmd_idx != SEND_RELATIVE_ADDR) &&
  196. (cmd_idx != SEND_IF_COND)) {
  197. if (cmd_idx != STOP_TRANSMISSION) {
  198. if (ptr[1] & 0x80)
  199. TRACE_RET(chip, STATUS_FAIL);
  200. }
  201. #ifdef SUPPORT_SD_LOCK
  202. if (ptr[1] & 0x7D)
  203. #else
  204. if (ptr[1] & 0x7F)
  205. #endif
  206. {
  207. dev_dbg(rtsx_dev(chip), "ptr[1]: 0x%02x\n",
  208. ptr[1]);
  209. TRACE_RET(chip, STATUS_FAIL);
  210. }
  211. if (ptr[2] & 0xFF) {
  212. dev_dbg(rtsx_dev(chip), "ptr[2]: 0x%02x\n",
  213. ptr[2]);
  214. TRACE_RET(chip, STATUS_FAIL);
  215. }
  216. if (ptr[3] & 0x80) {
  217. dev_dbg(rtsx_dev(chip), "ptr[3]: 0x%02x\n",
  218. ptr[3]);
  219. TRACE_RET(chip, STATUS_FAIL);
  220. }
  221. if (ptr[3] & 0x01)
  222. sd_card->sd_data_buf_ready = 1;
  223. else
  224. sd_card->sd_data_buf_ready = 0;
  225. }
  226. }
  227. if (rsp && rsp_len)
  228. memcpy(rsp, ptr, rsp_len);
  229. return STATUS_SUCCESS;
  230. }
  231. static int sd_read_data(struct rtsx_chip *chip,
  232. u8 trans_mode, u8 *cmd, int cmd_len, u16 byte_cnt,
  233. u16 blk_cnt, u8 bus_width, u8 *buf, int buf_len,
  234. int timeout)
  235. {
  236. struct sd_info *sd_card = &(chip->sd_card);
  237. int retval;
  238. int i;
  239. sd_clr_err_code(chip);
  240. if (!buf)
  241. buf_len = 0;
  242. if (buf_len > 512)
  243. TRACE_RET(chip, STATUS_FAIL);
  244. rtsx_init_cmd(chip);
  245. if (cmd_len) {
  246. dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", cmd[0] - 0x40);
  247. for (i = 0; i < (cmd_len < 6 ? cmd_len : 6); i++)
  248. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0 + i,
  249. 0xFF, cmd[i]);
  250. }
  251. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
  252. (u8)byte_cnt);
  253. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
  254. (u8)(byte_cnt >> 8));
  255. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF,
  256. (u8)blk_cnt);
  257. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF,
  258. (u8)(blk_cnt >> 8));
  259. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width);
  260. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
  261. SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END|
  262. SD_CHECK_CRC7 | SD_RSP_LEN_6);
  263. if (trans_mode != SD_TM_AUTO_TUNING)
  264. rtsx_add_cmd(chip, WRITE_REG_CMD,
  265. CARD_DATA_SOURCE, 0x01, PINGPONG_BUFFER);
  266. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
  267. trans_mode | SD_TRANSFER_START);
  268. rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
  269. SD_TRANSFER_END);
  270. retval = rtsx_send_cmd(chip, SD_CARD, timeout);
  271. if (retval < 0) {
  272. if (retval == -ETIMEDOUT) {
  273. sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
  274. SD_RSP_TYPE_R1, NULL, 0);
  275. }
  276. TRACE_RET(chip, STATUS_FAIL);
  277. }
  278. if (buf && buf_len) {
  279. retval = rtsx_read_ppbuf(chip, buf, buf_len);
  280. if (retval != STATUS_SUCCESS)
  281. TRACE_RET(chip, STATUS_FAIL);
  282. }
  283. return STATUS_SUCCESS;
  284. }
  285. static int sd_write_data(struct rtsx_chip *chip, u8 trans_mode,
  286. u8 *cmd, int cmd_len, u16 byte_cnt, u16 blk_cnt, u8 bus_width,
  287. u8 *buf, int buf_len, int timeout)
  288. {
  289. struct sd_info *sd_card = &(chip->sd_card);
  290. int retval;
  291. int i;
  292. sd_clr_err_code(chip);
  293. if (!buf)
  294. buf_len = 0;
  295. if (buf_len > 512) {
  296. /* This function can't write data more than one page */
  297. TRACE_RET(chip, STATUS_FAIL);
  298. }
  299. if (buf && buf_len) {
  300. retval = rtsx_write_ppbuf(chip, buf, buf_len);
  301. if (retval != STATUS_SUCCESS)
  302. TRACE_RET(chip, STATUS_FAIL);
  303. }
  304. rtsx_init_cmd(chip);
  305. if (cmd_len) {
  306. dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", cmd[0] - 0x40);
  307. for (i = 0; i < (cmd_len < 6 ? cmd_len : 6); i++) {
  308. rtsx_add_cmd(chip, WRITE_REG_CMD,
  309. REG_SD_CMD0 + i, 0xFF, cmd[i]);
  310. }
  311. }
  312. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
  313. (u8)byte_cnt);
  314. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
  315. (u8)(byte_cnt >> 8));
  316. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF,
  317. (u8)blk_cnt);
  318. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF,
  319. (u8)(blk_cnt >> 8));
  320. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width);
  321. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
  322. SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END |
  323. SD_CHECK_CRC7 | SD_RSP_LEN_6);
  324. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
  325. trans_mode | SD_TRANSFER_START);
  326. rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
  327. SD_TRANSFER_END);
  328. retval = rtsx_send_cmd(chip, SD_CARD, timeout);
  329. if (retval < 0) {
  330. if (retval == -ETIMEDOUT) {
  331. sd_send_cmd_get_rsp(chip, SEND_STATUS,
  332. sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
  333. }
  334. TRACE_RET(chip, STATUS_FAIL);
  335. }
  336. return STATUS_SUCCESS;
  337. }
  338. static int sd_check_csd(struct rtsx_chip *chip, char check_wp)
  339. {
  340. struct sd_info *sd_card = &(chip->sd_card);
  341. int retval;
  342. int i;
  343. u8 csd_ver, trans_speed;
  344. u8 rsp[16];
  345. for (i = 0; i < 6; i++) {
  346. if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
  347. sd_set_err_code(chip, SD_NO_CARD);
  348. TRACE_RET(chip, STATUS_FAIL);
  349. }
  350. retval = sd_send_cmd_get_rsp(chip, SEND_CSD, sd_card->sd_addr,
  351. SD_RSP_TYPE_R2, rsp, 16);
  352. if (retval == STATUS_SUCCESS)
  353. break;
  354. }
  355. if (i == 6)
  356. TRACE_RET(chip, STATUS_FAIL);
  357. memcpy(sd_card->raw_csd, rsp + 1, 15);
  358. dev_dbg(rtsx_dev(chip), "CSD Response:\n");
  359. dev_dbg(rtsx_dev(chip), "%*ph\n", 16, sd_card->raw_csd);
  360. csd_ver = (rsp[1] & 0xc0) >> 6;
  361. dev_dbg(rtsx_dev(chip), "csd_ver = %d\n", csd_ver);
  362. trans_speed = rsp[4];
  363. if ((trans_speed & 0x07) == 0x02) {
  364. if ((trans_speed & 0xf8) >= 0x30) {
  365. if (chip->asic_code)
  366. sd_card->sd_clock = 47;
  367. else
  368. sd_card->sd_clock = CLK_50;
  369. } else if ((trans_speed & 0xf8) == 0x28) {
  370. if (chip->asic_code)
  371. sd_card->sd_clock = 39;
  372. else
  373. sd_card->sd_clock = CLK_40;
  374. } else if ((trans_speed & 0xf8) == 0x20) {
  375. if (chip->asic_code)
  376. sd_card->sd_clock = 29;
  377. else
  378. sd_card->sd_clock = CLK_30;
  379. } else if ((trans_speed & 0xf8) >= 0x10) {
  380. if (chip->asic_code)
  381. sd_card->sd_clock = 23;
  382. else
  383. sd_card->sd_clock = CLK_20;
  384. } else if ((trans_speed & 0x08) >= 0x08) {
  385. if (chip->asic_code)
  386. sd_card->sd_clock = 19;
  387. else
  388. sd_card->sd_clock = CLK_20;
  389. } else {
  390. TRACE_RET(chip, STATUS_FAIL);
  391. }
  392. } else {
  393. TRACE_RET(chip, STATUS_FAIL);
  394. }
  395. if (CHK_MMC_SECTOR_MODE(sd_card)) {
  396. sd_card->capacity = 0;
  397. } else {
  398. if ((!CHK_SD_HCXC(sd_card)) || (csd_ver == 0)) {
  399. u8 blk_size, c_size_mult;
  400. u16 c_size;
  401. blk_size = rsp[6] & 0x0F;
  402. c_size = ((u16)(rsp[7] & 0x03) << 10)
  403. + ((u16)rsp[8] << 2)
  404. + ((u16)(rsp[9] & 0xC0) >> 6);
  405. c_size_mult = (u8)((rsp[10] & 0x03) << 1);
  406. c_size_mult += (rsp[11] & 0x80) >> 7;
  407. sd_card->capacity = (((u32)(c_size + 1)) *
  408. (1 << (c_size_mult + 2)))
  409. << (blk_size - 9);
  410. } else {
  411. u32 total_sector = 0;
  412. total_sector = (((u32)rsp[8] & 0x3f) << 16) |
  413. ((u32)rsp[9] << 8) | (u32)rsp[10];
  414. sd_card->capacity = (total_sector + 1) << 10;
  415. }
  416. }
  417. if (check_wp) {
  418. if (rsp[15] & 0x30)
  419. chip->card_wp |= SD_CARD;
  420. dev_dbg(rtsx_dev(chip), "CSD WP Status: 0x%x\n", rsp[15]);
  421. }
  422. return STATUS_SUCCESS;
  423. }
  424. static int sd_set_sample_push_timing(struct rtsx_chip *chip)
  425. {
  426. struct sd_info *sd_card = &(chip->sd_card);
  427. u8 val = 0;
  428. if ((chip->sd_ctl & SD_PUSH_POINT_CTL_MASK) == SD_PUSH_POINT_DELAY)
  429. val |= 0x10;
  430. if ((chip->sd_ctl & SD_SAMPLE_POINT_CTL_MASK) == SD_SAMPLE_POINT_AUTO) {
  431. if (chip->asic_code) {
  432. if (CHK_SD_HS(sd_card) || CHK_MMC_52M(sd_card)) {
  433. if (val & 0x10)
  434. val |= 0x04;
  435. else
  436. val |= 0x08;
  437. }
  438. } else {
  439. if (val & 0x10)
  440. val |= 0x04;
  441. else
  442. val |= 0x08;
  443. }
  444. } else if ((chip->sd_ctl & SD_SAMPLE_POINT_CTL_MASK) ==
  445. SD_SAMPLE_POINT_DELAY) {
  446. if (val & 0x10)
  447. val |= 0x04;
  448. else
  449. val |= 0x08;
  450. }
  451. RTSX_WRITE_REG(chip, REG_SD_CFG1, 0x1C, val);
  452. return STATUS_SUCCESS;
  453. }
  454. static void sd_choose_proper_clock(struct rtsx_chip *chip)
  455. {
  456. struct sd_info *sd_card = &(chip->sd_card);
  457. if (CHK_SD_SDR104(sd_card)) {
  458. if (chip->asic_code)
  459. sd_card->sd_clock = chip->asic_sd_sdr104_clk;
  460. else
  461. sd_card->sd_clock = chip->fpga_sd_sdr104_clk;
  462. } else if (CHK_SD_DDR50(sd_card)) {
  463. if (chip->asic_code)
  464. sd_card->sd_clock = chip->asic_sd_ddr50_clk;
  465. else
  466. sd_card->sd_clock = chip->fpga_sd_ddr50_clk;
  467. } else if (CHK_SD_SDR50(sd_card)) {
  468. if (chip->asic_code)
  469. sd_card->sd_clock = chip->asic_sd_sdr50_clk;
  470. else
  471. sd_card->sd_clock = chip->fpga_sd_sdr50_clk;
  472. } else if (CHK_SD_HS(sd_card)) {
  473. if (chip->asic_code)
  474. sd_card->sd_clock = chip->asic_sd_hs_clk;
  475. else
  476. sd_card->sd_clock = chip->fpga_sd_hs_clk;
  477. } else if (CHK_MMC_52M(sd_card) || CHK_MMC_DDR52(sd_card)) {
  478. if (chip->asic_code)
  479. sd_card->sd_clock = chip->asic_mmc_52m_clk;
  480. else
  481. sd_card->sd_clock = chip->fpga_mmc_52m_clk;
  482. } else if (CHK_MMC_26M(sd_card)) {
  483. if (chip->asic_code)
  484. sd_card->sd_clock = 48;
  485. else
  486. sd_card->sd_clock = CLK_50;
  487. }
  488. }
  489. static int sd_set_clock_divider(struct rtsx_chip *chip, u8 clk_div)
  490. {
  491. u8 mask = 0, val = 0;
  492. mask = 0x60;
  493. if (clk_div == SD_CLK_DIVIDE_0)
  494. val = 0x00;
  495. else if (clk_div == SD_CLK_DIVIDE_128)
  496. val = 0x40;
  497. else if (clk_div == SD_CLK_DIVIDE_256)
  498. val = 0x20;
  499. RTSX_WRITE_REG(chip, REG_SD_CFG1, mask, val);
  500. return STATUS_SUCCESS;
  501. }
  502. static int sd_set_init_para(struct rtsx_chip *chip)
  503. {
  504. struct sd_info *sd_card = &(chip->sd_card);
  505. int retval;
  506. retval = sd_set_sample_push_timing(chip);
  507. if (retval != STATUS_SUCCESS)
  508. TRACE_RET(chip, STATUS_FAIL);
  509. sd_choose_proper_clock(chip);
  510. retval = switch_clock(chip, sd_card->sd_clock);
  511. if (retval != STATUS_SUCCESS)
  512. TRACE_RET(chip, STATUS_FAIL);
  513. return STATUS_SUCCESS;
  514. }
  515. int sd_select_card(struct rtsx_chip *chip, int select)
  516. {
  517. struct sd_info *sd_card = &(chip->sd_card);
  518. int retval;
  519. u8 cmd_idx, cmd_type;
  520. u32 addr;
  521. if (select) {
  522. cmd_idx = SELECT_CARD;
  523. cmd_type = SD_RSP_TYPE_R1;
  524. addr = sd_card->sd_addr;
  525. } else {
  526. cmd_idx = DESELECT_CARD;
  527. cmd_type = SD_RSP_TYPE_R0;
  528. addr = 0;
  529. }
  530. retval = sd_send_cmd_get_rsp(chip, cmd_idx, addr, cmd_type, NULL, 0);
  531. if (retval != STATUS_SUCCESS)
  532. TRACE_RET(chip, STATUS_FAIL);
  533. return STATUS_SUCCESS;
  534. }
  535. #ifdef SUPPORT_SD_LOCK
  536. static int sd_update_lock_status(struct rtsx_chip *chip)
  537. {
  538. struct sd_info *sd_card = &(chip->sd_card);
  539. int retval;
  540. u8 rsp[5];
  541. retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
  542. SD_RSP_TYPE_R1, rsp, 5);
  543. if (retval != STATUS_SUCCESS)
  544. TRACE_RET(chip, STATUS_FAIL);
  545. if (rsp[1] & 0x02)
  546. sd_card->sd_lock_status |= SD_LOCKED;
  547. else
  548. sd_card->sd_lock_status &= ~SD_LOCKED;
  549. dev_dbg(rtsx_dev(chip), "sd_card->sd_lock_status = 0x%x\n",
  550. sd_card->sd_lock_status);
  551. if (rsp[1] & 0x01)
  552. TRACE_RET(chip, STATUS_FAIL);
  553. return STATUS_SUCCESS;
  554. }
  555. #endif
  556. static int sd_wait_state_data_ready(struct rtsx_chip *chip, u8 state,
  557. u8 data_ready, int polling_cnt)
  558. {
  559. struct sd_info *sd_card = &(chip->sd_card);
  560. int retval, i;
  561. u8 rsp[5];
  562. for (i = 0; i < polling_cnt; i++) {
  563. retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
  564. sd_card->sd_addr, SD_RSP_TYPE_R1, rsp,
  565. 5);
  566. if (retval != STATUS_SUCCESS)
  567. TRACE_RET(chip, STATUS_FAIL);
  568. if (((rsp[3] & 0x1E) == state) &&
  569. ((rsp[3] & 0x01) == data_ready))
  570. return STATUS_SUCCESS;
  571. }
  572. TRACE_RET(chip, STATUS_FAIL);
  573. }
  574. static int sd_change_bank_voltage(struct rtsx_chip *chip, u8 voltage)
  575. {
  576. int retval;
  577. if (voltage == SD_IO_3V3) {
  578. if (chip->asic_code) {
  579. retval = rtsx_write_phy_register(chip, 0x08,
  580. 0x4FC0 |
  581. chip->phy_voltage);
  582. if (retval != STATUS_SUCCESS)
  583. TRACE_RET(chip, STATUS_FAIL);
  584. } else {
  585. RTSX_WRITE_REG(chip, SD_PAD_CTL, SD_IO_USING_1V8, 0);
  586. }
  587. } else if (voltage == SD_IO_1V8) {
  588. if (chip->asic_code) {
  589. retval = rtsx_write_phy_register(chip, 0x08,
  590. 0x4C40 |
  591. chip->phy_voltage);
  592. if (retval != STATUS_SUCCESS)
  593. TRACE_RET(chip, STATUS_FAIL);
  594. } else {
  595. RTSX_WRITE_REG(chip, SD_PAD_CTL, SD_IO_USING_1V8,
  596. SD_IO_USING_1V8);
  597. }
  598. } else {
  599. TRACE_RET(chip, STATUS_FAIL);
  600. }
  601. return STATUS_SUCCESS;
  602. }
  603. static int sd_voltage_switch(struct rtsx_chip *chip)
  604. {
  605. int retval;
  606. u8 stat;
  607. RTSX_WRITE_REG(chip, SD_BUS_STAT, SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP,
  608. SD_CLK_TOGGLE_EN);
  609. retval = sd_send_cmd_get_rsp(chip, VOLTAGE_SWITCH, 0, SD_RSP_TYPE_R1,
  610. NULL, 0);
  611. if (retval != STATUS_SUCCESS)
  612. TRACE_RET(chip, STATUS_FAIL);
  613. udelay(chip->sd_voltage_switch_delay);
  614. RTSX_READ_REG(chip, SD_BUS_STAT, &stat);
  615. if (stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
  616. SD_DAT1_STATUS | SD_DAT0_STATUS)) {
  617. TRACE_RET(chip, STATUS_FAIL);
  618. }
  619. RTSX_WRITE_REG(chip, SD_BUS_STAT, 0xFF, SD_CLK_FORCE_STOP);
  620. retval = sd_change_bank_voltage(chip, SD_IO_1V8);
  621. if (retval != STATUS_SUCCESS)
  622. TRACE_RET(chip, STATUS_FAIL);
  623. wait_timeout(50);
  624. RTSX_WRITE_REG(chip, SD_BUS_STAT, 0xFF, SD_CLK_TOGGLE_EN);
  625. wait_timeout(10);
  626. RTSX_READ_REG(chip, SD_BUS_STAT, &stat);
  627. if ((stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
  628. SD_DAT1_STATUS | SD_DAT0_STATUS)) !=
  629. (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
  630. SD_DAT1_STATUS | SD_DAT0_STATUS)) {
  631. dev_dbg(rtsx_dev(chip), "SD_BUS_STAT: 0x%x\n", stat);
  632. rtsx_write_register(chip, SD_BUS_STAT,
  633. SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0);
  634. rtsx_write_register(chip, CARD_CLK_EN, 0xFF, 0);
  635. TRACE_RET(chip, STATUS_FAIL);
  636. }
  637. RTSX_WRITE_REG(chip, SD_BUS_STAT, SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP,
  638. 0);
  639. return STATUS_SUCCESS;
  640. }
  641. static int sd_reset_dcm(struct rtsx_chip *chip, u8 tune_dir)
  642. {
  643. if (tune_dir == TUNE_RX) {
  644. RTSX_WRITE_REG(chip, DCM_DRP_CTL, 0xFF, DCM_RESET | DCM_RX);
  645. RTSX_WRITE_REG(chip, DCM_DRP_CTL, 0xFF, DCM_RX);
  646. } else {
  647. RTSX_WRITE_REG(chip, DCM_DRP_CTL, 0xFF, DCM_RESET | DCM_TX);
  648. RTSX_WRITE_REG(chip, DCM_DRP_CTL, 0xFF, DCM_TX);
  649. }
  650. return STATUS_SUCCESS;
  651. }
  652. static int sd_change_phase(struct rtsx_chip *chip, u8 sample_point, u8 tune_dir)
  653. {
  654. struct sd_info *sd_card = &(chip->sd_card);
  655. u16 SD_VP_CTL, SD_DCMPS_CTL;
  656. u8 val;
  657. int retval;
  658. int ddr_rx = 0;
  659. dev_dbg(rtsx_dev(chip), "sd_change_phase (sample_point = %d, tune_dir = %d)\n",
  660. sample_point, tune_dir);
  661. if (tune_dir == TUNE_RX) {
  662. SD_VP_CTL = SD_VPRX_CTL;
  663. SD_DCMPS_CTL = SD_DCMPS_RX_CTL;
  664. if (CHK_SD_DDR50(sd_card))
  665. ddr_rx = 1;
  666. } else {
  667. SD_VP_CTL = SD_VPTX_CTL;
  668. SD_DCMPS_CTL = SD_DCMPS_TX_CTL;
  669. }
  670. if (chip->asic_code) {
  671. RTSX_WRITE_REG(chip, CLK_CTL, CHANGE_CLK, CHANGE_CLK);
  672. RTSX_WRITE_REG(chip, SD_VP_CTL, 0x1F, sample_point);
  673. RTSX_WRITE_REG(chip, SD_VPCLK0_CTL, PHASE_NOT_RESET, 0);
  674. RTSX_WRITE_REG(chip, SD_VPCLK0_CTL, PHASE_NOT_RESET,
  675. PHASE_NOT_RESET);
  676. RTSX_WRITE_REG(chip, CLK_CTL, CHANGE_CLK, 0);
  677. } else {
  678. rtsx_read_register(chip, SD_VP_CTL, &val);
  679. dev_dbg(rtsx_dev(chip), "SD_VP_CTL: 0x%x\n", val);
  680. rtsx_read_register(chip, SD_DCMPS_CTL, &val);
  681. dev_dbg(rtsx_dev(chip), "SD_DCMPS_CTL: 0x%x\n", val);
  682. if (ddr_rx) {
  683. RTSX_WRITE_REG(chip, SD_VP_CTL, PHASE_CHANGE,
  684. PHASE_CHANGE);
  685. udelay(50);
  686. RTSX_WRITE_REG(chip, SD_VP_CTL, 0xFF,
  687. PHASE_CHANGE | PHASE_NOT_RESET | sample_point);
  688. } else {
  689. RTSX_WRITE_REG(chip, CLK_CTL, CHANGE_CLK, CHANGE_CLK);
  690. udelay(50);
  691. RTSX_WRITE_REG(chip, SD_VP_CTL, 0xFF,
  692. PHASE_NOT_RESET | sample_point);
  693. }
  694. udelay(100);
  695. rtsx_init_cmd(chip);
  696. rtsx_add_cmd(chip, WRITE_REG_CMD, SD_DCMPS_CTL, DCMPS_CHANGE,
  697. DCMPS_CHANGE);
  698. rtsx_add_cmd(chip, CHECK_REG_CMD, SD_DCMPS_CTL,
  699. DCMPS_CHANGE_DONE, DCMPS_CHANGE_DONE);
  700. retval = rtsx_send_cmd(chip, SD_CARD, 100);
  701. if (retval != STATUS_SUCCESS)
  702. TRACE_GOTO(chip, Fail);
  703. val = *rtsx_get_cmd_data(chip);
  704. if (val & DCMPS_ERROR)
  705. TRACE_GOTO(chip, Fail);
  706. if ((val & DCMPS_CURRENT_PHASE) != sample_point)
  707. TRACE_GOTO(chip, Fail);
  708. RTSX_WRITE_REG(chip, SD_DCMPS_CTL, DCMPS_CHANGE, 0);
  709. if (ddr_rx)
  710. RTSX_WRITE_REG(chip, SD_VP_CTL, PHASE_CHANGE, 0);
  711. else
  712. RTSX_WRITE_REG(chip, CLK_CTL, CHANGE_CLK, 0);
  713. udelay(50);
  714. }
  715. RTSX_WRITE_REG(chip, SD_CFG1, SD_ASYNC_FIFO_NOT_RST, 0);
  716. return STATUS_SUCCESS;
  717. Fail:
  718. rtsx_read_register(chip, SD_VP_CTL, &val);
  719. dev_dbg(rtsx_dev(chip), "SD_VP_CTL: 0x%x\n", val);
  720. rtsx_read_register(chip, SD_DCMPS_CTL, &val);
  721. dev_dbg(rtsx_dev(chip), "SD_DCMPS_CTL: 0x%x\n", val);
  722. rtsx_write_register(chip, SD_DCMPS_CTL, DCMPS_CHANGE, 0);
  723. rtsx_write_register(chip, SD_VP_CTL, PHASE_CHANGE, 0);
  724. wait_timeout(10);
  725. sd_reset_dcm(chip, tune_dir);
  726. return STATUS_FAIL;
  727. }
  728. static int sd_check_spec(struct rtsx_chip *chip, u8 bus_width)
  729. {
  730. struct sd_info *sd_card = &(chip->sd_card);
  731. int retval;
  732. u8 cmd[5], buf[8];
  733. retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
  734. SD_RSP_TYPE_R1, NULL, 0);
  735. if (retval != STATUS_SUCCESS)
  736. TRACE_RET(chip, STATUS_FAIL);
  737. cmd[0] = 0x40 | SEND_SCR;
  738. cmd[1] = 0;
  739. cmd[2] = 0;
  740. cmd[3] = 0;
  741. cmd[4] = 0;
  742. retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 8, 1, bus_width,
  743. buf, 8, 250);
  744. if (retval != STATUS_SUCCESS) {
  745. rtsx_clear_sd_error(chip);
  746. TRACE_RET(chip, STATUS_FAIL);
  747. }
  748. memcpy(sd_card->raw_scr, buf, 8);
  749. if ((buf[0] & 0x0F) == 0)
  750. TRACE_RET(chip, STATUS_FAIL);
  751. return STATUS_SUCCESS;
  752. }
  753. static int sd_query_switch_result(struct rtsx_chip *chip, u8 func_group,
  754. u8 func_to_switch, u8 *buf, int buf_len)
  755. {
  756. u8 support_mask = 0, query_switch = 0, switch_busy = 0;
  757. int support_offset = 0, query_switch_offset = 0, check_busy_offset = 0;
  758. if (func_group == SD_FUNC_GROUP_1) {
  759. support_offset = FUNCTION_GROUP1_SUPPORT_OFFSET;
  760. query_switch_offset = FUNCTION_GROUP1_QUERY_SWITCH_OFFSET;
  761. check_busy_offset = FUNCTION_GROUP1_CHECK_BUSY_OFFSET;
  762. switch (func_to_switch) {
  763. case HS_SUPPORT:
  764. support_mask = HS_SUPPORT_MASK;
  765. query_switch = HS_QUERY_SWITCH_OK;
  766. switch_busy = HS_SWITCH_BUSY;
  767. break;
  768. case SDR50_SUPPORT:
  769. support_mask = SDR50_SUPPORT_MASK;
  770. query_switch = SDR50_QUERY_SWITCH_OK;
  771. switch_busy = SDR50_SWITCH_BUSY;
  772. break;
  773. case SDR104_SUPPORT:
  774. support_mask = SDR104_SUPPORT_MASK;
  775. query_switch = SDR104_QUERY_SWITCH_OK;
  776. switch_busy = SDR104_SWITCH_BUSY;
  777. break;
  778. case DDR50_SUPPORT:
  779. support_mask = DDR50_SUPPORT_MASK;
  780. query_switch = DDR50_QUERY_SWITCH_OK;
  781. switch_busy = DDR50_SWITCH_BUSY;
  782. break;
  783. default:
  784. TRACE_RET(chip, STATUS_FAIL);
  785. }
  786. } else if (func_group == SD_FUNC_GROUP_3) {
  787. support_offset = FUNCTION_GROUP3_SUPPORT_OFFSET;
  788. query_switch_offset = FUNCTION_GROUP3_QUERY_SWITCH_OFFSET;
  789. check_busy_offset = FUNCTION_GROUP3_CHECK_BUSY_OFFSET;
  790. switch (func_to_switch) {
  791. case DRIVING_TYPE_A:
  792. support_mask = DRIVING_TYPE_A_MASK;
  793. query_switch = TYPE_A_QUERY_SWITCH_OK;
  794. switch_busy = TYPE_A_SWITCH_BUSY;
  795. break;
  796. case DRIVING_TYPE_C:
  797. support_mask = DRIVING_TYPE_C_MASK;
  798. query_switch = TYPE_C_QUERY_SWITCH_OK;
  799. switch_busy = TYPE_C_SWITCH_BUSY;
  800. break;
  801. case DRIVING_TYPE_D:
  802. support_mask = DRIVING_TYPE_D_MASK;
  803. query_switch = TYPE_D_QUERY_SWITCH_OK;
  804. switch_busy = TYPE_D_SWITCH_BUSY;
  805. break;
  806. default:
  807. TRACE_RET(chip, STATUS_FAIL);
  808. }
  809. } else if (func_group == SD_FUNC_GROUP_4) {
  810. support_offset = FUNCTION_GROUP4_SUPPORT_OFFSET;
  811. query_switch_offset = FUNCTION_GROUP4_QUERY_SWITCH_OFFSET;
  812. check_busy_offset = FUNCTION_GROUP4_CHECK_BUSY_OFFSET;
  813. switch (func_to_switch) {
  814. case CURRENT_LIMIT_400:
  815. support_mask = CURRENT_LIMIT_400_MASK;
  816. query_switch = CURRENT_LIMIT_400_QUERY_SWITCH_OK;
  817. switch_busy = CURRENT_LIMIT_400_SWITCH_BUSY;
  818. break;
  819. case CURRENT_LIMIT_600:
  820. support_mask = CURRENT_LIMIT_600_MASK;
  821. query_switch = CURRENT_LIMIT_600_QUERY_SWITCH_OK;
  822. switch_busy = CURRENT_LIMIT_600_SWITCH_BUSY;
  823. break;
  824. case CURRENT_LIMIT_800:
  825. support_mask = CURRENT_LIMIT_800_MASK;
  826. query_switch = CURRENT_LIMIT_800_QUERY_SWITCH_OK;
  827. switch_busy = CURRENT_LIMIT_800_SWITCH_BUSY;
  828. break;
  829. default:
  830. TRACE_RET(chip, STATUS_FAIL);
  831. }
  832. } else {
  833. TRACE_RET(chip, STATUS_FAIL);
  834. }
  835. if (func_group == SD_FUNC_GROUP_1) {
  836. if (!(buf[support_offset] & support_mask) ||
  837. ((buf[query_switch_offset] & 0x0F) != query_switch)) {
  838. TRACE_RET(chip, STATUS_FAIL);
  839. }
  840. }
  841. /* Check 'Busy Status' */
  842. if ((buf[DATA_STRUCTURE_VER_OFFSET] == 0x01) &&
  843. ((buf[check_busy_offset] & switch_busy) == switch_busy)) {
  844. TRACE_RET(chip, STATUS_FAIL);
  845. }
  846. return STATUS_SUCCESS;
  847. }
  848. static int sd_check_switch_mode(struct rtsx_chip *chip, u8 mode,
  849. u8 func_group, u8 func_to_switch, u8 bus_width)
  850. {
  851. struct sd_info *sd_card = &(chip->sd_card);
  852. int retval;
  853. u8 cmd[5], buf[64];
  854. dev_dbg(rtsx_dev(chip), "sd_check_switch_mode (mode = %d, func_group = %d, func_to_switch = %d)\n",
  855. mode, func_group, func_to_switch);
  856. cmd[0] = 0x40 | SWITCH;
  857. cmd[1] = mode;
  858. if (func_group == SD_FUNC_GROUP_1) {
  859. cmd[2] = 0xFF;
  860. cmd[3] = 0xFF;
  861. cmd[4] = 0xF0 + func_to_switch;
  862. } else if (func_group == SD_FUNC_GROUP_3) {
  863. cmd[2] = 0xFF;
  864. cmd[3] = 0xF0 + func_to_switch;
  865. cmd[4] = 0xFF;
  866. } else if (func_group == SD_FUNC_GROUP_4) {
  867. cmd[2] = 0xFF;
  868. cmd[3] = 0x0F + (func_to_switch << 4);
  869. cmd[4] = 0xFF;
  870. } else {
  871. cmd[1] = SD_CHECK_MODE;
  872. cmd[2] = 0xFF;
  873. cmd[3] = 0xFF;
  874. cmd[4] = 0xFF;
  875. }
  876. retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 64, 1, bus_width,
  877. buf, 64, 250);
  878. if (retval != STATUS_SUCCESS) {
  879. rtsx_clear_sd_error(chip);
  880. TRACE_RET(chip, STATUS_FAIL);
  881. }
  882. dev_dbg(rtsx_dev(chip), "%*ph\n", 64, buf);
  883. if (func_group == NO_ARGUMENT) {
  884. sd_card->func_group1_mask = buf[0x0D];
  885. sd_card->func_group2_mask = buf[0x0B];
  886. sd_card->func_group3_mask = buf[0x09];
  887. sd_card->func_group4_mask = buf[0x07];
  888. dev_dbg(rtsx_dev(chip), "func_group1_mask = 0x%02x\n",
  889. buf[0x0D]);
  890. dev_dbg(rtsx_dev(chip), "func_group2_mask = 0x%02x\n",
  891. buf[0x0B]);
  892. dev_dbg(rtsx_dev(chip), "func_group3_mask = 0x%02x\n",
  893. buf[0x09]);
  894. dev_dbg(rtsx_dev(chip), "func_group4_mask = 0x%02x\n",
  895. buf[0x07]);
  896. } else {
  897. /* Maximum current consumption, check whether current is
  898. * acceptable; bit[511:496] = 0x0000 means some error happened.
  899. */
  900. u16 cc = ((u16)buf[0] << 8) | buf[1];
  901. dev_dbg(rtsx_dev(chip), "Maximum current consumption: %dmA\n",
  902. cc);
  903. if ((cc == 0) || (cc > 800))
  904. TRACE_RET(chip, STATUS_FAIL);
  905. retval = sd_query_switch_result(chip, func_group,
  906. func_to_switch, buf, 64);
  907. if (retval != STATUS_SUCCESS)
  908. TRACE_RET(chip, STATUS_FAIL);
  909. if ((cc > 400) || (func_to_switch > CURRENT_LIMIT_400)) {
  910. RTSX_WRITE_REG(chip, OCPPARA2, SD_OCP_THD_MASK,
  911. chip->sd_800mA_ocp_thd);
  912. RTSX_WRITE_REG(chip, CARD_PWR_CTL, PMOS_STRG_MASK,
  913. PMOS_STRG_800mA);
  914. }
  915. }
  916. return STATUS_SUCCESS;
  917. }
  918. static u8 downgrade_switch_mode(u8 func_group, u8 func_to_switch)
  919. {
  920. if (func_group == SD_FUNC_GROUP_1) {
  921. if (func_to_switch > HS_SUPPORT)
  922. func_to_switch--;
  923. } else if (func_group == SD_FUNC_GROUP_4) {
  924. if (func_to_switch > CURRENT_LIMIT_200)
  925. func_to_switch--;
  926. }
  927. return func_to_switch;
  928. }
  929. static int sd_check_switch(struct rtsx_chip *chip,
  930. u8 func_group, u8 func_to_switch, u8 bus_width)
  931. {
  932. int retval;
  933. int i;
  934. int switch_good = 0;
  935. for (i = 0; i < 3; i++) {
  936. if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
  937. sd_set_err_code(chip, SD_NO_CARD);
  938. TRACE_RET(chip, STATUS_FAIL);
  939. }
  940. retval = sd_check_switch_mode(chip, SD_CHECK_MODE, func_group,
  941. func_to_switch, bus_width);
  942. if (retval == STATUS_SUCCESS) {
  943. u8 stat;
  944. retval = sd_check_switch_mode(chip, SD_SWITCH_MODE,
  945. func_group, func_to_switch, bus_width);
  946. if (retval == STATUS_SUCCESS) {
  947. switch_good = 1;
  948. break;
  949. }
  950. RTSX_READ_REG(chip, SD_STAT1, &stat);
  951. if (stat & SD_CRC16_ERR) {
  952. dev_dbg(rtsx_dev(chip), "SD CRC16 error when switching mode\n");
  953. TRACE_RET(chip, STATUS_FAIL);
  954. }
  955. }
  956. func_to_switch = downgrade_switch_mode(func_group,
  957. func_to_switch);
  958. wait_timeout(20);
  959. }
  960. if (!switch_good)
  961. TRACE_RET(chip, STATUS_FAIL);
  962. return STATUS_SUCCESS;
  963. }
  964. static int sd_switch_function(struct rtsx_chip *chip, u8 bus_width)
  965. {
  966. struct sd_info *sd_card = &(chip->sd_card);
  967. int retval;
  968. int i;
  969. u8 func_to_switch = 0;
  970. /* Get supported functions */
  971. retval = sd_check_switch_mode(chip, SD_CHECK_MODE,
  972. NO_ARGUMENT, NO_ARGUMENT, bus_width);
  973. if (retval != STATUS_SUCCESS)
  974. TRACE_RET(chip, STATUS_FAIL);
  975. sd_card->func_group1_mask &= ~(sd_card->sd_switch_fail);
  976. /* Function Group 1: Access Mode */
  977. for (i = 0; i < 4; i++) {
  978. switch ((u8)(chip->sd_speed_prior >> (i*8))) {
  979. case SDR104_SUPPORT:
  980. if ((sd_card->func_group1_mask & SDR104_SUPPORT_MASK)
  981. && chip->sdr104_en) {
  982. func_to_switch = SDR104_SUPPORT;
  983. }
  984. break;
  985. case DDR50_SUPPORT:
  986. if ((sd_card->func_group1_mask & DDR50_SUPPORT_MASK)
  987. && chip->ddr50_en) {
  988. func_to_switch = DDR50_SUPPORT;
  989. }
  990. break;
  991. case SDR50_SUPPORT:
  992. if ((sd_card->func_group1_mask & SDR50_SUPPORT_MASK)
  993. && chip->sdr50_en) {
  994. func_to_switch = SDR50_SUPPORT;
  995. }
  996. break;
  997. case HS_SUPPORT:
  998. if (sd_card->func_group1_mask & HS_SUPPORT_MASK)
  999. func_to_switch = HS_SUPPORT;
  1000. break;
  1001. default:
  1002. continue;
  1003. }
  1004. if (func_to_switch)
  1005. break;
  1006. }
  1007. dev_dbg(rtsx_dev(chip), "SD_FUNC_GROUP_1: func_to_switch = 0x%02x",
  1008. func_to_switch);
  1009. #ifdef SUPPORT_SD_LOCK
  1010. if ((sd_card->sd_lock_status & SD_SDR_RST)
  1011. && (DDR50_SUPPORT == func_to_switch)
  1012. && (sd_card->func_group1_mask & SDR50_SUPPORT_MASK)) {
  1013. func_to_switch = SDR50_SUPPORT;
  1014. dev_dbg(rtsx_dev(chip), "Using SDR50 instead of DDR50 for SD Lock\n");
  1015. }
  1016. #endif
  1017. if (func_to_switch) {
  1018. retval = sd_check_switch(chip, SD_FUNC_GROUP_1, func_to_switch,
  1019. bus_width);
  1020. if (retval != STATUS_SUCCESS) {
  1021. if (func_to_switch == SDR104_SUPPORT) {
  1022. sd_card->sd_switch_fail = SDR104_SUPPORT_MASK;
  1023. } else if (func_to_switch == DDR50_SUPPORT) {
  1024. sd_card->sd_switch_fail = SDR104_SUPPORT_MASK |
  1025. DDR50_SUPPORT_MASK;
  1026. } else if (func_to_switch == SDR50_SUPPORT) {
  1027. sd_card->sd_switch_fail = SDR104_SUPPORT_MASK |
  1028. DDR50_SUPPORT_MASK | SDR50_SUPPORT_MASK;
  1029. }
  1030. TRACE_RET(chip, STATUS_FAIL);
  1031. }
  1032. if (func_to_switch == SDR104_SUPPORT)
  1033. SET_SD_SDR104(sd_card);
  1034. else if (func_to_switch == DDR50_SUPPORT)
  1035. SET_SD_DDR50(sd_card);
  1036. else if (func_to_switch == SDR50_SUPPORT)
  1037. SET_SD_SDR50(sd_card);
  1038. else
  1039. SET_SD_HS(sd_card);
  1040. }
  1041. if (CHK_SD_DDR50(sd_card)) {
  1042. RTSX_WRITE_REG(chip, SD_PUSH_POINT_CTL, 0x06, 0x04);
  1043. retval = sd_set_sample_push_timing(chip);
  1044. if (retval != STATUS_SUCCESS)
  1045. TRACE_RET(chip, STATUS_FAIL);
  1046. }
  1047. if (!func_to_switch || (func_to_switch == HS_SUPPORT)) {
  1048. /* Do not try to switch current limit if the card doesn't
  1049. * support UHS mode or we don't want it to support UHS mode
  1050. */
  1051. return STATUS_SUCCESS;
  1052. }
  1053. /* Function Group 4: Current Limit */
  1054. func_to_switch = 0xFF;
  1055. for (i = 0; i < 4; i++) {
  1056. switch ((u8)(chip->sd_current_prior >> (i*8))) {
  1057. case CURRENT_LIMIT_800:
  1058. if (sd_card->func_group4_mask & CURRENT_LIMIT_800_MASK)
  1059. func_to_switch = CURRENT_LIMIT_800;
  1060. break;
  1061. case CURRENT_LIMIT_600:
  1062. if (sd_card->func_group4_mask & CURRENT_LIMIT_600_MASK)
  1063. func_to_switch = CURRENT_LIMIT_600;
  1064. break;
  1065. case CURRENT_LIMIT_400:
  1066. if (sd_card->func_group4_mask & CURRENT_LIMIT_400_MASK)
  1067. func_to_switch = CURRENT_LIMIT_400;
  1068. break;
  1069. case CURRENT_LIMIT_200:
  1070. if (sd_card->func_group4_mask & CURRENT_LIMIT_200_MASK)
  1071. func_to_switch = CURRENT_LIMIT_200;
  1072. break;
  1073. default:
  1074. continue;
  1075. }
  1076. if (func_to_switch != 0xFF)
  1077. break;
  1078. }
  1079. dev_dbg(rtsx_dev(chip), "SD_FUNC_GROUP_4: func_to_switch = 0x%02x",
  1080. func_to_switch);
  1081. if (func_to_switch <= CURRENT_LIMIT_800) {
  1082. retval = sd_check_switch(chip, SD_FUNC_GROUP_4, func_to_switch,
  1083. bus_width);
  1084. if (retval != STATUS_SUCCESS) {
  1085. if (sd_check_err_code(chip, SD_NO_CARD))
  1086. TRACE_RET(chip, STATUS_FAIL);
  1087. }
  1088. dev_dbg(rtsx_dev(chip), "Switch current limit finished! (%d)\n",
  1089. retval);
  1090. }
  1091. if (CHK_SD_DDR50(sd_card))
  1092. RTSX_WRITE_REG(chip, SD_PUSH_POINT_CTL, 0x06, 0);
  1093. return STATUS_SUCCESS;
  1094. }
  1095. static int sd_wait_data_idle(struct rtsx_chip *chip)
  1096. {
  1097. int retval = STATUS_TIMEDOUT;
  1098. int i;
  1099. u8 val = 0;
  1100. for (i = 0; i < 100; i++) {
  1101. RTSX_READ_REG(chip, SD_DATA_STATE, &val);
  1102. if (val & SD_DATA_IDLE) {
  1103. retval = STATUS_SUCCESS;
  1104. break;
  1105. }
  1106. udelay(100);
  1107. }
  1108. dev_dbg(rtsx_dev(chip), "SD_DATA_STATE: 0x%02x\n", val);
  1109. return retval;
  1110. }
  1111. static int sd_sdr_tuning_rx_cmd(struct rtsx_chip *chip, u8 sample_point)
  1112. {
  1113. int retval;
  1114. u8 cmd[5];
  1115. retval = sd_change_phase(chip, sample_point, TUNE_RX);
  1116. if (retval != STATUS_SUCCESS)
  1117. TRACE_RET(chip, STATUS_FAIL);
  1118. cmd[0] = 0x40 | SEND_TUNING_PATTERN;
  1119. cmd[1] = 0;
  1120. cmd[2] = 0;
  1121. cmd[3] = 0;
  1122. cmd[4] = 0;
  1123. retval = sd_read_data(chip, SD_TM_AUTO_TUNING,
  1124. cmd, 5, 0x40, 1, SD_BUS_WIDTH_4, NULL, 0, 100);
  1125. if (retval != STATUS_SUCCESS) {
  1126. (void)sd_wait_data_idle(chip);
  1127. rtsx_clear_sd_error(chip);
  1128. TRACE_RET(chip, STATUS_FAIL);
  1129. }
  1130. return STATUS_SUCCESS;
  1131. }
  1132. static int sd_ddr_tuning_rx_cmd(struct rtsx_chip *chip, u8 sample_point)
  1133. {
  1134. struct sd_info *sd_card = &(chip->sd_card);
  1135. int retval;
  1136. u8 cmd[5];
  1137. retval = sd_change_phase(chip, sample_point, TUNE_RX);
  1138. if (retval != STATUS_SUCCESS)
  1139. TRACE_RET(chip, STATUS_FAIL);
  1140. dev_dbg(rtsx_dev(chip), "sd ddr tuning rx\n");
  1141. retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
  1142. SD_RSP_TYPE_R1, NULL, 0);
  1143. if (retval != STATUS_SUCCESS)
  1144. TRACE_RET(chip, STATUS_FAIL);
  1145. cmd[0] = 0x40 | SD_STATUS;
  1146. cmd[1] = 0;
  1147. cmd[2] = 0;
  1148. cmd[3] = 0;
  1149. cmd[4] = 0;
  1150. retval = sd_read_data(chip, SD_TM_NORMAL_READ,
  1151. cmd, 5, 64, 1, SD_BUS_WIDTH_4, NULL, 0, 100);
  1152. if (retval != STATUS_SUCCESS) {
  1153. (void)sd_wait_data_idle(chip);
  1154. rtsx_clear_sd_error(chip);
  1155. TRACE_RET(chip, STATUS_FAIL);
  1156. }
  1157. return STATUS_SUCCESS;
  1158. }
  1159. static int mmc_ddr_tunning_rx_cmd(struct rtsx_chip *chip, u8 sample_point)
  1160. {
  1161. struct sd_info *sd_card = &(chip->sd_card);
  1162. int retval;
  1163. u8 cmd[5], bus_width;
  1164. if (CHK_MMC_8BIT(sd_card))
  1165. bus_width = SD_BUS_WIDTH_8;
  1166. else if (CHK_MMC_4BIT(sd_card))
  1167. bus_width = SD_BUS_WIDTH_4;
  1168. else
  1169. bus_width = SD_BUS_WIDTH_1;
  1170. retval = sd_change_phase(chip, sample_point, TUNE_RX);
  1171. if (retval != STATUS_SUCCESS)
  1172. TRACE_RET(chip, STATUS_FAIL);
  1173. dev_dbg(rtsx_dev(chip), "mmc ddr tuning rx\n");
  1174. cmd[0] = 0x40 | SEND_EXT_CSD;
  1175. cmd[1] = 0;
  1176. cmd[2] = 0;
  1177. cmd[3] = 0;
  1178. cmd[4] = 0;
  1179. retval = sd_read_data(chip, SD_TM_NORMAL_READ,
  1180. cmd, 5, 0x200, 1, bus_width, NULL, 0, 100);
  1181. if (retval != STATUS_SUCCESS) {
  1182. (void)sd_wait_data_idle(chip);
  1183. rtsx_clear_sd_error(chip);
  1184. TRACE_RET(chip, STATUS_FAIL);
  1185. }
  1186. return STATUS_SUCCESS;
  1187. }
  1188. static int sd_sdr_tuning_tx_cmd(struct rtsx_chip *chip, u8 sample_point)
  1189. {
  1190. struct sd_info *sd_card = &(chip->sd_card);
  1191. int retval;
  1192. retval = sd_change_phase(chip, sample_point, TUNE_TX);
  1193. if (retval != STATUS_SUCCESS)
  1194. TRACE_RET(chip, STATUS_FAIL);
  1195. RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
  1196. SD_RSP_80CLK_TIMEOUT_EN);
  1197. retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
  1198. SD_RSP_TYPE_R1, NULL, 0);
  1199. if (retval != STATUS_SUCCESS) {
  1200. if (sd_check_err_code(chip, SD_RSP_TIMEOUT)) {
  1201. rtsx_write_register(chip, SD_CFG3,
  1202. SD_RSP_80CLK_TIMEOUT_EN, 0);
  1203. TRACE_RET(chip, STATUS_FAIL);
  1204. }
  1205. }
  1206. RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
  1207. return STATUS_SUCCESS;
  1208. }
  1209. static int sd_ddr_tuning_tx_cmd(struct rtsx_chip *chip, u8 sample_point)
  1210. {
  1211. struct sd_info *sd_card = &(chip->sd_card);
  1212. int retval;
  1213. u8 cmd[5], bus_width;
  1214. retval = sd_change_phase(chip, sample_point, TUNE_TX);
  1215. if (retval != STATUS_SUCCESS)
  1216. TRACE_RET(chip, STATUS_FAIL);
  1217. if (CHK_SD(sd_card)) {
  1218. bus_width = SD_BUS_WIDTH_4;
  1219. } else {
  1220. if (CHK_MMC_8BIT(sd_card))
  1221. bus_width = SD_BUS_WIDTH_8;
  1222. else if (CHK_MMC_4BIT(sd_card))
  1223. bus_width = SD_BUS_WIDTH_4;
  1224. else
  1225. bus_width = SD_BUS_WIDTH_1;
  1226. }
  1227. retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
  1228. if (retval != STATUS_SUCCESS)
  1229. TRACE_RET(chip, STATUS_FAIL);
  1230. RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
  1231. SD_RSP_80CLK_TIMEOUT_EN);
  1232. cmd[0] = 0x40 | PROGRAM_CSD;
  1233. cmd[1] = 0;
  1234. cmd[2] = 0;
  1235. cmd[3] = 0;
  1236. cmd[4] = 0;
  1237. retval = sd_write_data(chip, SD_TM_AUTO_WRITE_2,
  1238. cmd, 5, 16, 1, bus_width, sd_card->raw_csd, 16, 100);
  1239. if (retval != STATUS_SUCCESS) {
  1240. rtsx_clear_sd_error(chip);
  1241. rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
  1242. TRACE_RET(chip, STATUS_FAIL);
  1243. }
  1244. RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
  1245. sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, SD_RSP_TYPE_R1,
  1246. NULL, 0);
  1247. return STATUS_SUCCESS;
  1248. }
  1249. static u8 sd_search_final_phase(struct rtsx_chip *chip, u32 phase_map,
  1250. u8 tune_dir)
  1251. {
  1252. struct sd_info *sd_card = &(chip->sd_card);
  1253. struct timing_phase_path path[MAX_PHASE + 1];
  1254. int i, j, cont_path_cnt;
  1255. int new_block, max_len, final_path_idx;
  1256. u8 final_phase = 0xFF;
  1257. if (phase_map == 0xFFFFFFFF) {
  1258. if (tune_dir == TUNE_RX)
  1259. final_phase = (u8)chip->sd_default_rx_phase;
  1260. else
  1261. final_phase = (u8)chip->sd_default_tx_phase;
  1262. goto Search_Finish;
  1263. }
  1264. cont_path_cnt = 0;
  1265. new_block = 1;
  1266. j = 0;
  1267. for (i = 0; i < MAX_PHASE + 1; i++) {
  1268. if (phase_map & (1 << i)) {
  1269. if (new_block) {
  1270. new_block = 0;
  1271. j = cont_path_cnt++;
  1272. path[j].start = i;
  1273. path[j].end = i;
  1274. } else {
  1275. path[j].end = i;
  1276. }
  1277. } else {
  1278. new_block = 1;
  1279. if (cont_path_cnt) {
  1280. int idx = cont_path_cnt - 1;
  1281. path[idx].len = path[idx].end -
  1282. path[idx].start + 1;
  1283. path[idx].mid = path[idx].start +
  1284. path[idx].len / 2;
  1285. }
  1286. }
  1287. }
  1288. if (cont_path_cnt == 0) {
  1289. dev_dbg(rtsx_dev(chip), "No continuous phase path\n");
  1290. goto Search_Finish;
  1291. } else {
  1292. int idx = cont_path_cnt - 1;
  1293. path[idx].len = path[idx].end - path[idx].start + 1;
  1294. path[idx].mid = path[idx].start + path[idx].len / 2;
  1295. }
  1296. if ((path[0].start == 0) &&
  1297. (path[cont_path_cnt - 1].end == MAX_PHASE)) {
  1298. path[0].start = path[cont_path_cnt - 1].start - MAX_PHASE - 1;
  1299. path[0].len += path[cont_path_cnt - 1].len;
  1300. path[0].mid = path[0].start + path[0].len / 2;
  1301. if (path[0].mid < 0)
  1302. path[0].mid += MAX_PHASE + 1;
  1303. cont_path_cnt--;
  1304. }
  1305. max_len = 0;
  1306. final_phase = 0;
  1307. final_path_idx = 0;
  1308. for (i = 0; i < cont_path_cnt; i++) {
  1309. if (path[i].len > max_len) {
  1310. max_len = path[i].len;
  1311. final_phase = (u8)path[i].mid;
  1312. final_path_idx = i;
  1313. }
  1314. dev_dbg(rtsx_dev(chip), "path[%d].start = %d\n",
  1315. i, path[i].start);
  1316. dev_dbg(rtsx_dev(chip), "path[%d].end = %d\n", i, path[i].end);
  1317. dev_dbg(rtsx_dev(chip), "path[%d].len = %d\n", i, path[i].len);
  1318. dev_dbg(rtsx_dev(chip), "path[%d].mid = %d\n", i, path[i].mid);
  1319. dev_dbg(rtsx_dev(chip), "\n");
  1320. }
  1321. if (tune_dir == TUNE_TX) {
  1322. if (CHK_SD_SDR104(sd_card)) {
  1323. if (max_len > 15) {
  1324. int temp_mid = (max_len - 16) / 2;
  1325. int temp_final_phase =
  1326. path[final_path_idx].end -
  1327. (max_len - (6 + temp_mid));
  1328. if (temp_final_phase < 0)
  1329. final_phase = (u8)(temp_final_phase +
  1330. MAX_PHASE + 1);
  1331. else
  1332. final_phase = (u8)temp_final_phase;
  1333. }
  1334. } else if (CHK_SD_SDR50(sd_card)) {
  1335. if (max_len > 12) {
  1336. int temp_mid = (max_len - 13) / 2;
  1337. int temp_final_phase =
  1338. path[final_path_idx].end -
  1339. (max_len - (3 + temp_mid));
  1340. if (temp_final_phase < 0)
  1341. final_phase = (u8)(temp_final_phase +
  1342. MAX_PHASE + 1);
  1343. else
  1344. final_phase = (u8)temp_final_phase;
  1345. }
  1346. }
  1347. }
  1348. Search_Finish:
  1349. dev_dbg(rtsx_dev(chip), "Final chosen phase: %d\n", final_phase);
  1350. return final_phase;
  1351. }
  1352. static int sd_tuning_rx(struct rtsx_chip *chip)
  1353. {
  1354. struct sd_info *sd_card = &(chip->sd_card);
  1355. int retval;
  1356. int i, j;
  1357. u32 raw_phase_map[3], phase_map;
  1358. u8 final_phase;
  1359. int (*tuning_cmd)(struct rtsx_chip *chip, u8 sample_point);
  1360. if (CHK_SD(sd_card)) {
  1361. if (CHK_SD_DDR50(sd_card))
  1362. tuning_cmd = sd_ddr_tuning_rx_cmd;
  1363. else
  1364. tuning_cmd = sd_sdr_tuning_rx_cmd;
  1365. } else {
  1366. if (CHK_MMC_DDR52(sd_card))
  1367. tuning_cmd = mmc_ddr_tunning_rx_cmd;
  1368. else
  1369. TRACE_RET(chip, STATUS_FAIL);
  1370. }
  1371. for (i = 0; i < 3; i++) {
  1372. raw_phase_map[i] = 0;
  1373. for (j = MAX_PHASE; j >= 0; j--) {
  1374. if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
  1375. sd_set_err_code(chip, SD_NO_CARD);
  1376. TRACE_RET(chip, STATUS_FAIL);
  1377. }
  1378. retval = tuning_cmd(chip, (u8)j);
  1379. if (retval == STATUS_SUCCESS)
  1380. raw_phase_map[i] |= 1 << j;
  1381. }
  1382. }
  1383. phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2];
  1384. for (i = 0; i < 3; i++)
  1385. dev_dbg(rtsx_dev(chip), "RX raw_phase_map[%d] = 0x%08x\n",
  1386. i, raw_phase_map[i]);
  1387. dev_dbg(rtsx_dev(chip), "RX phase_map = 0x%08x\n", phase_map);
  1388. final_phase = sd_search_final_phase(chip, phase_map, TUNE_RX);
  1389. if (final_phase == 0xFF)
  1390. TRACE_RET(chip, STATUS_FAIL);
  1391. retval = sd_change_phase(chip, final_phase, TUNE_RX);
  1392. if (retval != STATUS_SUCCESS)
  1393. TRACE_RET(chip, STATUS_FAIL);
  1394. return STATUS_SUCCESS;
  1395. }
  1396. static int sd_ddr_pre_tuning_tx(struct rtsx_chip *chip)
  1397. {
  1398. struct sd_info *sd_card = &(chip->sd_card);
  1399. int retval;
  1400. int i;
  1401. u32 phase_map;
  1402. u8 final_phase;
  1403. RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
  1404. SD_RSP_80CLK_TIMEOUT_EN);
  1405. phase_map = 0;
  1406. for (i = MAX_PHASE; i >= 0; i--) {
  1407. if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
  1408. sd_set_err_code(chip, SD_NO_CARD);
  1409. rtsx_write_register(chip, SD_CFG3,
  1410. SD_RSP_80CLK_TIMEOUT_EN, 0);
  1411. TRACE_RET(chip, STATUS_FAIL);
  1412. }
  1413. retval = sd_change_phase(chip, (u8)i, TUNE_TX);
  1414. if (retval != STATUS_SUCCESS)
  1415. continue;
  1416. retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
  1417. sd_card->sd_addr, SD_RSP_TYPE_R1, NULL,
  1418. 0);
  1419. if ((retval == STATUS_SUCCESS) ||
  1420. !sd_check_err_code(chip, SD_RSP_TIMEOUT))
  1421. phase_map |= 1 << i;
  1422. }
  1423. RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
  1424. dev_dbg(rtsx_dev(chip), "DDR TX pre tune phase_map = 0x%08x\n",
  1425. phase_map);
  1426. final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX);
  1427. if (final_phase == 0xFF)
  1428. TRACE_RET(chip, STATUS_FAIL);
  1429. retval = sd_change_phase(chip, final_phase, TUNE_TX);
  1430. if (retval != STATUS_SUCCESS)
  1431. TRACE_RET(chip, STATUS_FAIL);
  1432. dev_dbg(rtsx_dev(chip), "DDR TX pre tune phase: %d\n",
  1433. (int)final_phase);
  1434. return STATUS_SUCCESS;
  1435. }
  1436. static int sd_tuning_tx(struct rtsx_chip *chip)
  1437. {
  1438. struct sd_info *sd_card = &(chip->sd_card);
  1439. int retval;
  1440. int i, j;
  1441. u32 raw_phase_map[3], phase_map;
  1442. u8 final_phase;
  1443. int (*tuning_cmd)(struct rtsx_chip *chip, u8 sample_point);
  1444. if (CHK_SD(sd_card)) {
  1445. if (CHK_SD_DDR50(sd_card))
  1446. tuning_cmd = sd_ddr_tuning_tx_cmd;
  1447. else
  1448. tuning_cmd = sd_sdr_tuning_tx_cmd;
  1449. } else {
  1450. if (CHK_MMC_DDR52(sd_card))
  1451. tuning_cmd = sd_ddr_tuning_tx_cmd;
  1452. else
  1453. TRACE_RET(chip, STATUS_FAIL);
  1454. }
  1455. for (i = 0; i < 3; i++) {
  1456. raw_phase_map[i] = 0;
  1457. for (j = MAX_PHASE; j >= 0; j--) {
  1458. if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
  1459. sd_set_err_code(chip, SD_NO_CARD);
  1460. rtsx_write_register(chip, SD_CFG3,
  1461. SD_RSP_80CLK_TIMEOUT_EN, 0);
  1462. TRACE_RET(chip, STATUS_FAIL);
  1463. }
  1464. retval = tuning_cmd(chip, (u8)j);
  1465. if (retval == STATUS_SUCCESS)
  1466. raw_phase_map[i] |= 1 << j;
  1467. }
  1468. }
  1469. phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2];
  1470. for (i = 0; i < 3; i++)
  1471. dev_dbg(rtsx_dev(chip), "TX raw_phase_map[%d] = 0x%08x\n",
  1472. i, raw_phase_map[i]);
  1473. dev_dbg(rtsx_dev(chip), "TX phase_map = 0x%08x\n", phase_map);
  1474. final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX);
  1475. if (final_phase == 0xFF)
  1476. TRACE_RET(chip, STATUS_FAIL);
  1477. retval = sd_change_phase(chip, final_phase, TUNE_TX);
  1478. if (retval != STATUS_SUCCESS)
  1479. TRACE_RET(chip, STATUS_FAIL);
  1480. return STATUS_SUCCESS;
  1481. }
  1482. static int sd_sdr_tuning(struct rtsx_chip *chip)
  1483. {
  1484. int retval;
  1485. retval = sd_tuning_tx(chip);
  1486. if (retval != STATUS_SUCCESS)
  1487. TRACE_RET(chip, STATUS_FAIL);
  1488. retval = sd_tuning_rx(chip);
  1489. if (retval != STATUS_SUCCESS)
  1490. TRACE_RET(chip, STATUS_FAIL);
  1491. return STATUS_SUCCESS;
  1492. }
  1493. static int sd_ddr_tuning(struct rtsx_chip *chip)
  1494. {
  1495. int retval;
  1496. if (!(chip->sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) {
  1497. retval = sd_ddr_pre_tuning_tx(chip);
  1498. if (retval != STATUS_SUCCESS)
  1499. TRACE_RET(chip, STATUS_FAIL);
  1500. } else {
  1501. retval = sd_change_phase(chip, (u8)chip->sd_ddr_tx_phase,
  1502. TUNE_TX);
  1503. if (retval != STATUS_SUCCESS)
  1504. TRACE_RET(chip, STATUS_FAIL);
  1505. }
  1506. retval = sd_tuning_rx(chip);
  1507. if (retval != STATUS_SUCCESS)
  1508. TRACE_RET(chip, STATUS_FAIL);
  1509. if (!(chip->sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) {
  1510. retval = sd_tuning_tx(chip);
  1511. if (retval != STATUS_SUCCESS)
  1512. TRACE_RET(chip, STATUS_FAIL);
  1513. }
  1514. return STATUS_SUCCESS;
  1515. }
  1516. static int mmc_ddr_tuning(struct rtsx_chip *chip)
  1517. {
  1518. int retval;
  1519. if (!(chip->sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) {
  1520. retval = sd_ddr_pre_tuning_tx(chip);
  1521. if (retval != STATUS_SUCCESS)
  1522. TRACE_RET(chip, STATUS_FAIL);
  1523. } else {
  1524. retval = sd_change_phase(chip, (u8)chip->mmc_ddr_tx_phase,
  1525. TUNE_TX);
  1526. if (retval != STATUS_SUCCESS)
  1527. TRACE_RET(chip, STATUS_FAIL);
  1528. }
  1529. retval = sd_tuning_rx(chip);
  1530. if (retval != STATUS_SUCCESS)
  1531. TRACE_RET(chip, STATUS_FAIL);
  1532. if (!(chip->sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) {
  1533. retval = sd_tuning_tx(chip);
  1534. if (retval != STATUS_SUCCESS)
  1535. TRACE_RET(chip, STATUS_FAIL);
  1536. }
  1537. return STATUS_SUCCESS;
  1538. }
  1539. int sd_switch_clock(struct rtsx_chip *chip)
  1540. {
  1541. struct sd_info *sd_card = &(chip->sd_card);
  1542. int retval;
  1543. int re_tuning = 0;
  1544. retval = select_card(chip, SD_CARD);
  1545. if (retval != STATUS_SUCCESS)
  1546. TRACE_RET(chip, STATUS_FAIL);
  1547. retval = switch_clock(chip, sd_card->sd_clock);
  1548. if (retval != STATUS_SUCCESS)
  1549. TRACE_RET(chip, STATUS_FAIL);
  1550. if (re_tuning) {
  1551. if (CHK_SD(sd_card)) {
  1552. if (CHK_SD_DDR50(sd_card))
  1553. retval = sd_ddr_tuning(chip);
  1554. else
  1555. retval = sd_sdr_tuning(chip);
  1556. } else {
  1557. if (CHK_MMC_DDR52(sd_card))
  1558. retval = mmc_ddr_tuning(chip);
  1559. }
  1560. if (retval != STATUS_SUCCESS)
  1561. TRACE_RET(chip, STATUS_FAIL);
  1562. }
  1563. return STATUS_SUCCESS;
  1564. }
  1565. static int sd_prepare_reset(struct rtsx_chip *chip)
  1566. {
  1567. struct sd_info *sd_card = &(chip->sd_card);
  1568. int retval;
  1569. if (chip->asic_code)
  1570. sd_card->sd_clock = 29;
  1571. else
  1572. sd_card->sd_clock = CLK_30;
  1573. sd_card->sd_type = 0;
  1574. sd_card->seq_mode = 0;
  1575. sd_card->sd_data_buf_ready = 0;
  1576. sd_card->capacity = 0;
  1577. #ifdef SUPPORT_SD_LOCK
  1578. sd_card->sd_lock_status = 0;
  1579. sd_card->sd_erase_status = 0;
  1580. #endif
  1581. chip->capacity[chip->card2lun[SD_CARD]] = 0;
  1582. chip->sd_io = 0;
  1583. retval = sd_set_init_para(chip);
  1584. if (retval != STATUS_SUCCESS)
  1585. TRACE_RET(chip, retval);
  1586. RTSX_WRITE_REG(chip, REG_SD_CFG1, 0xFF, 0x40);
  1587. RTSX_WRITE_REG(chip, CARD_STOP, SD_STOP | SD_CLR_ERR,
  1588. SD_STOP | SD_CLR_ERR);
  1589. retval = select_card(chip, SD_CARD);
  1590. if (retval != STATUS_SUCCESS)
  1591. TRACE_RET(chip, STATUS_FAIL);
  1592. return STATUS_SUCCESS;
  1593. }
  1594. static int sd_pull_ctl_disable(struct rtsx_chip *chip)
  1595. {
  1596. if (CHECK_PID(chip, 0x5208)) {
  1597. RTSX_WRITE_REG(chip, CARD_PULL_CTL1, 0xFF,
  1598. XD_D3_PD | SD_D7_PD | SD_CLK_PD | SD_D5_PD);
  1599. RTSX_WRITE_REG(chip, CARD_PULL_CTL2, 0xFF,
  1600. SD_D6_PD | SD_D0_PD | SD_D1_PD | XD_D5_PD);
  1601. RTSX_WRITE_REG(chip, CARD_PULL_CTL3, 0xFF,
  1602. SD_D4_PD | XD_CE_PD | XD_CLE_PD | XD_CD_PU);
  1603. RTSX_WRITE_REG(chip, CARD_PULL_CTL4, 0xFF,
  1604. XD_RDY_PD | SD_D3_PD | SD_D2_PD | XD_ALE_PD);
  1605. RTSX_WRITE_REG(chip, CARD_PULL_CTL5, 0xFF,
  1606. MS_INS_PU | SD_WP_PD | SD_CD_PU | SD_CMD_PD);
  1607. RTSX_WRITE_REG(chip, CARD_PULL_CTL6, 0xFF, MS_D5_PD | MS_D4_PD);
  1608. } else if (CHECK_PID(chip, 0x5288)) {
  1609. if (CHECK_BARO_PKG(chip, QFN)) {
  1610. RTSX_WRITE_REG(chip, CARD_PULL_CTL1, 0xFF, 0x55);
  1611. RTSX_WRITE_REG(chip, CARD_PULL_CTL2, 0xFF, 0x55);
  1612. RTSX_WRITE_REG(chip, CARD_PULL_CTL3, 0xFF, 0x4B);
  1613. RTSX_WRITE_REG(chip, CARD_PULL_CTL4, 0xFF, 0x69);
  1614. }
  1615. }
  1616. return STATUS_SUCCESS;
  1617. }
  1618. int sd_pull_ctl_enable(struct rtsx_chip *chip)
  1619. {
  1620. int retval;
  1621. rtsx_init_cmd(chip);
  1622. if (CHECK_PID(chip, 0x5208)) {
  1623. rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF,
  1624. XD_D3_PD | SD_DAT7_PU | SD_CLK_NP | SD_D5_PU);
  1625. rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF,
  1626. SD_D6_PU | SD_D0_PU | SD_D1_PU | XD_D5_PD);
  1627. rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF,
  1628. SD_D4_PU | XD_CE_PD | XD_CLE_PD | XD_CD_PU);
  1629. rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF,
  1630. XD_RDY_PD | SD_D3_PU | SD_D2_PU | XD_ALE_PD);
  1631. rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL5, 0xFF,
  1632. MS_INS_PU | SD_WP_PU | SD_CD_PU | SD_CMD_PU);
  1633. rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL6, 0xFF,
  1634. MS_D5_PD | MS_D4_PD);
  1635. } else if (CHECK_PID(chip, 0x5288)) {
  1636. if (CHECK_BARO_PKG(chip, QFN)) {
  1637. rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF,
  1638. 0xA8);
  1639. rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF,
  1640. 0x5A);
  1641. rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF,
  1642. 0x95);
  1643. rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF,
  1644. 0xAA);
  1645. }
  1646. }
  1647. retval = rtsx_send_cmd(chip, SD_CARD, 100);
  1648. if (retval < 0)
  1649. TRACE_RET(chip, STATUS_FAIL);
  1650. return STATUS_SUCCESS;
  1651. }
  1652. static int sd_init_power(struct rtsx_chip *chip)
  1653. {
  1654. int retval;
  1655. retval = sd_power_off_card3v3(chip);
  1656. if (retval != STATUS_SUCCESS)
  1657. TRACE_RET(chip, STATUS_FAIL);
  1658. if (!chip->ft2_fast_mode)
  1659. wait_timeout(250);
  1660. retval = enable_card_clock(chip, SD_CARD);
  1661. if (retval != STATUS_SUCCESS)
  1662. TRACE_RET(chip, STATUS_FAIL);
  1663. if (chip->asic_code) {
  1664. retval = sd_pull_ctl_enable(chip);
  1665. if (retval != STATUS_SUCCESS)
  1666. TRACE_RET(chip, STATUS_FAIL);
  1667. } else {
  1668. RTSX_WRITE_REG(chip, FPGA_PULL_CTL, FPGA_SD_PULL_CTL_BIT | 0x20,
  1669. 0);
  1670. }
  1671. if (!chip->ft2_fast_mode) {
  1672. retval = card_power_on(chip, SD_CARD);
  1673. if (retval != STATUS_SUCCESS)
  1674. TRACE_RET(chip, STATUS_FAIL);
  1675. wait_timeout(260);
  1676. #ifdef SUPPORT_OCP
  1677. if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) {
  1678. dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n",
  1679. chip->ocp_stat);
  1680. TRACE_RET(chip, STATUS_FAIL);
  1681. }
  1682. #endif
  1683. }
  1684. RTSX_WRITE_REG(chip, CARD_OE, SD_OUTPUT_EN, SD_OUTPUT_EN);
  1685. return STATUS_SUCCESS;
  1686. }
  1687. static int sd_dummy_clock(struct rtsx_chip *chip)
  1688. {
  1689. RTSX_WRITE_REG(chip, REG_SD_CFG3, 0x01, 0x01);
  1690. wait_timeout(5);
  1691. RTSX_WRITE_REG(chip, REG_SD_CFG3, 0x01, 0);
  1692. return STATUS_SUCCESS;
  1693. }
  1694. static int sd_read_lba0(struct rtsx_chip *chip)
  1695. {
  1696. struct sd_info *sd_card = &(chip->sd_card);
  1697. int retval;
  1698. u8 cmd[5], bus_width;
  1699. cmd[0] = 0x40 | READ_SINGLE_BLOCK;
  1700. cmd[1] = 0;
  1701. cmd[2] = 0;
  1702. cmd[3] = 0;
  1703. cmd[4] = 0;
  1704. if (CHK_SD(sd_card)) {
  1705. bus_width = SD_BUS_WIDTH_4;
  1706. } else {
  1707. if (CHK_MMC_8BIT(sd_card))
  1708. bus_width = SD_BUS_WIDTH_8;
  1709. else if (CHK_MMC_4BIT(sd_card))
  1710. bus_width = SD_BUS_WIDTH_4;
  1711. else
  1712. bus_width = SD_BUS_WIDTH_1;
  1713. }
  1714. retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd,
  1715. 5, 512, 1, bus_width, NULL, 0, 100);
  1716. if (retval != STATUS_SUCCESS) {
  1717. rtsx_clear_sd_error(chip);
  1718. TRACE_RET(chip, STATUS_FAIL);
  1719. }
  1720. return STATUS_SUCCESS;
  1721. }
  1722. static int sd_check_wp_state(struct rtsx_chip *chip)
  1723. {
  1724. struct sd_info *sd_card = &(chip->sd_card);
  1725. int retval;
  1726. u32 val;
  1727. u16 sd_card_type;
  1728. u8 cmd[5], buf[64];
  1729. retval = sd_send_cmd_get_rsp(chip, APP_CMD,
  1730. sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
  1731. if (retval != STATUS_SUCCESS)
  1732. TRACE_RET(chip, STATUS_FAIL);
  1733. cmd[0] = 0x40 | SD_STATUS;
  1734. cmd[1] = 0;
  1735. cmd[2] = 0;
  1736. cmd[3] = 0;
  1737. cmd[4] = 0;
  1738. retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 64, 1,
  1739. SD_BUS_WIDTH_4, buf, 64, 250);
  1740. if (retval != STATUS_SUCCESS) {
  1741. rtsx_clear_sd_error(chip);
  1742. sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
  1743. SD_RSP_TYPE_R1, NULL, 0);
  1744. TRACE_RET(chip, STATUS_FAIL);
  1745. }
  1746. dev_dbg(rtsx_dev(chip), "ACMD13:\n");
  1747. dev_dbg(rtsx_dev(chip), "%*ph\n", 64, buf);
  1748. sd_card_type = ((u16)buf[2] << 8) | buf[3];
  1749. dev_dbg(rtsx_dev(chip), "sd_card_type = 0x%04x\n", sd_card_type);
  1750. if ((sd_card_type == 0x0001) || (sd_card_type == 0x0002)) {
  1751. /* ROM card or OTP */
  1752. chip->card_wp |= SD_CARD;
  1753. }
  1754. /* Check SD Machanical Write-Protect Switch */
  1755. val = rtsx_readl(chip, RTSX_BIPR);
  1756. if (val & SD_WRITE_PROTECT)
  1757. chip->card_wp |= SD_CARD;
  1758. return STATUS_SUCCESS;
  1759. }
  1760. static int reset_sd(struct rtsx_chip *chip)
  1761. {
  1762. struct sd_info *sd_card = &(chip->sd_card);
  1763. int retval, i = 0, j = 0, k = 0, hi_cap_flow = 0;
  1764. int sd_dont_switch = 0;
  1765. int support_1v8 = 0;
  1766. int try_sdio = 1;
  1767. u8 rsp[16];
  1768. u8 switch_bus_width;
  1769. u32 voltage = 0;
  1770. int sd20_mode = 0;
  1771. SET_SD(sd_card);
  1772. Switch_Fail:
  1773. i = 0;
  1774. j = 0;
  1775. k = 0;
  1776. hi_cap_flow = 0;
  1777. #ifdef SUPPORT_SD_LOCK
  1778. if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON)
  1779. goto SD_UNLOCK_ENTRY;
  1780. #endif
  1781. retval = sd_prepare_reset(chip);
  1782. if (retval != STATUS_SUCCESS)
  1783. TRACE_RET(chip, STATUS_FAIL);
  1784. retval = sd_dummy_clock(chip);
  1785. if (retval != STATUS_SUCCESS)
  1786. TRACE_RET(chip, STATUS_FAIL);
  1787. if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip) && try_sdio) {
  1788. int rty_cnt = 0;
  1789. for (; rty_cnt < chip->sdio_retry_cnt; rty_cnt++) {
  1790. if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
  1791. sd_set_err_code(chip, SD_NO_CARD);
  1792. TRACE_RET(chip, STATUS_FAIL);
  1793. }
  1794. retval = sd_send_cmd_get_rsp(chip, IO_SEND_OP_COND, 0,
  1795. SD_RSP_TYPE_R4, rsp, 5);
  1796. if (retval == STATUS_SUCCESS) {
  1797. int func_num = (rsp[1] >> 4) & 0x07;
  1798. if (func_num) {
  1799. dev_dbg(rtsx_dev(chip), "SD_IO card (Function number: %d)!\n",
  1800. func_num);
  1801. chip->sd_io = 1;
  1802. TRACE_RET(chip, STATUS_FAIL);
  1803. }
  1804. break;
  1805. }
  1806. sd_init_power(chip);
  1807. sd_dummy_clock(chip);
  1808. }
  1809. dev_dbg(rtsx_dev(chip), "Normal card!\n");
  1810. }
  1811. /* Start Initialization Process of SD Card */
  1812. RTY_SD_RST:
  1813. retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0,
  1814. NULL, 0);
  1815. if (retval != STATUS_SUCCESS)
  1816. TRACE_RET(chip, STATUS_FAIL);
  1817. wait_timeout(20);
  1818. retval = sd_send_cmd_get_rsp(chip, SEND_IF_COND, 0x000001AA,
  1819. SD_RSP_TYPE_R7, rsp, 5);
  1820. if (retval == STATUS_SUCCESS) {
  1821. if ((rsp[4] == 0xAA) && ((rsp[3] & 0x0f) == 0x01)) {
  1822. hi_cap_flow = 1;
  1823. voltage = SUPPORT_VOLTAGE | 0x40000000;
  1824. }
  1825. }
  1826. if (!hi_cap_flow) {
  1827. voltage = SUPPORT_VOLTAGE;
  1828. retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0,
  1829. SD_RSP_TYPE_R0, NULL, 0);
  1830. if (retval != STATUS_SUCCESS)
  1831. TRACE_RET(chip, STATUS_FAIL);
  1832. wait_timeout(20);
  1833. }
  1834. do {
  1835. retval = sd_send_cmd_get_rsp(chip, APP_CMD, 0, SD_RSP_TYPE_R1,
  1836. NULL, 0);
  1837. if (retval != STATUS_SUCCESS) {
  1838. if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
  1839. sd_set_err_code(chip, SD_NO_CARD);
  1840. TRACE_RET(chip, STATUS_FAIL);
  1841. }
  1842. j++;
  1843. if (j < 3)
  1844. goto RTY_SD_RST;
  1845. else
  1846. TRACE_RET(chip, STATUS_FAIL);
  1847. }
  1848. retval = sd_send_cmd_get_rsp(chip, SD_APP_OP_COND, voltage,
  1849. SD_RSP_TYPE_R3, rsp, 5);
  1850. if (retval != STATUS_SUCCESS) {
  1851. k++;
  1852. if (k < 3)
  1853. goto RTY_SD_RST;
  1854. else
  1855. TRACE_RET(chip, STATUS_FAIL);
  1856. }
  1857. i++;
  1858. wait_timeout(20);
  1859. } while (!(rsp[1] & 0x80) && (i < 255));
  1860. if (i == 255)
  1861. TRACE_RET(chip, STATUS_FAIL);
  1862. if (hi_cap_flow) {
  1863. if (rsp[1] & 0x40)
  1864. SET_SD_HCXC(sd_card);
  1865. else
  1866. CLR_SD_HCXC(sd_card);
  1867. support_1v8 = 0;
  1868. } else {
  1869. CLR_SD_HCXC(sd_card);
  1870. support_1v8 = 0;
  1871. }
  1872. dev_dbg(rtsx_dev(chip), "support_1v8 = %d\n", support_1v8);
  1873. if (support_1v8) {
  1874. retval = sd_voltage_switch(chip);
  1875. if (retval != STATUS_SUCCESS)
  1876. TRACE_RET(chip, STATUS_FAIL);
  1877. }
  1878. retval = sd_send_cmd_get_rsp(chip, ALL_SEND_CID, 0, SD_RSP_TYPE_R2,
  1879. NULL, 0);
  1880. if (retval != STATUS_SUCCESS)
  1881. TRACE_RET(chip, STATUS_FAIL);
  1882. for (i = 0; i < 3; i++) {
  1883. retval = sd_send_cmd_get_rsp(chip, SEND_RELATIVE_ADDR, 0,
  1884. SD_RSP_TYPE_R6, rsp, 5);
  1885. if (retval != STATUS_SUCCESS)
  1886. TRACE_RET(chip, STATUS_FAIL);
  1887. sd_card->sd_addr = (u32)rsp[1] << 24;
  1888. sd_card->sd_addr += (u32)rsp[2] << 16;
  1889. if (sd_card->sd_addr)
  1890. break;
  1891. }
  1892. retval = sd_check_csd(chip, 1);
  1893. if (retval != STATUS_SUCCESS)
  1894. TRACE_RET(chip, STATUS_FAIL);
  1895. retval = sd_select_card(chip, 1);
  1896. if (retval != STATUS_SUCCESS)
  1897. TRACE_RET(chip, STATUS_FAIL);
  1898. #ifdef SUPPORT_SD_LOCK
  1899. SD_UNLOCK_ENTRY:
  1900. retval = sd_update_lock_status(chip);
  1901. if (retval != STATUS_SUCCESS)
  1902. TRACE_RET(chip, STATUS_FAIL);
  1903. if (sd_card->sd_lock_status & SD_LOCKED) {
  1904. sd_card->sd_lock_status |= (SD_LOCK_1BIT_MODE | SD_PWD_EXIST);
  1905. return STATUS_SUCCESS;
  1906. } else if (!(sd_card->sd_lock_status & SD_UNLOCK_POW_ON)) {
  1907. sd_card->sd_lock_status &= ~SD_PWD_EXIST;
  1908. }
  1909. #endif
  1910. retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
  1911. SD_RSP_TYPE_R1, NULL, 0);
  1912. if (retval != STATUS_SUCCESS)
  1913. TRACE_RET(chip, STATUS_FAIL);
  1914. retval = sd_send_cmd_get_rsp(chip, SET_CLR_CARD_DETECT, 0,
  1915. SD_RSP_TYPE_R1, NULL, 0);
  1916. if (retval != STATUS_SUCCESS)
  1917. TRACE_RET(chip, STATUS_FAIL);
  1918. if (support_1v8) {
  1919. retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
  1920. SD_RSP_TYPE_R1, NULL, 0);
  1921. if (retval != STATUS_SUCCESS)
  1922. TRACE_RET(chip, STATUS_FAIL);
  1923. retval = sd_send_cmd_get_rsp(chip, SET_BUS_WIDTH, 2,
  1924. SD_RSP_TYPE_R1, NULL, 0);
  1925. if (retval != STATUS_SUCCESS)
  1926. TRACE_RET(chip, STATUS_FAIL);
  1927. switch_bus_width = SD_BUS_WIDTH_4;
  1928. } else {
  1929. switch_bus_width = SD_BUS_WIDTH_1;
  1930. }
  1931. retval = sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, SD_RSP_TYPE_R1,
  1932. NULL, 0);
  1933. if (retval != STATUS_SUCCESS)
  1934. TRACE_RET(chip, STATUS_FAIL);
  1935. retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
  1936. if (retval != STATUS_SUCCESS)
  1937. TRACE_RET(chip, STATUS_FAIL);
  1938. if (!(sd_card->raw_csd[4] & 0x40))
  1939. sd_dont_switch = 1;
  1940. if (!sd_dont_switch) {
  1941. if (sd20_mode) {
  1942. /* Set sd_switch_fail here, because we needn't
  1943. * switch to UHS mode
  1944. */
  1945. sd_card->sd_switch_fail = SDR104_SUPPORT_MASK |
  1946. DDR50_SUPPORT_MASK | SDR50_SUPPORT_MASK;
  1947. }
  1948. /* Check the card whether follow SD1.1 spec or higher */
  1949. retval = sd_check_spec(chip, switch_bus_width);
  1950. if (retval == STATUS_SUCCESS) {
  1951. retval = sd_switch_function(chip, switch_bus_width);
  1952. if (retval != STATUS_SUCCESS) {
  1953. sd_init_power(chip);
  1954. sd_dont_switch = 1;
  1955. try_sdio = 0;
  1956. goto Switch_Fail;
  1957. }
  1958. } else {
  1959. if (support_1v8) {
  1960. sd_init_power(chip);
  1961. sd_dont_switch = 1;
  1962. try_sdio = 0;
  1963. goto Switch_Fail;
  1964. }
  1965. }
  1966. }
  1967. if (!support_1v8) {
  1968. retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
  1969. SD_RSP_TYPE_R1, NULL, 0);
  1970. if (retval != STATUS_SUCCESS)
  1971. TRACE_RET(chip, STATUS_FAIL);
  1972. retval = sd_send_cmd_get_rsp(chip, SET_BUS_WIDTH, 2,
  1973. SD_RSP_TYPE_R1, NULL, 0);
  1974. if (retval != STATUS_SUCCESS)
  1975. TRACE_RET(chip, STATUS_FAIL);
  1976. }
  1977. #ifdef SUPPORT_SD_LOCK
  1978. sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
  1979. #endif
  1980. if (!sd20_mode && CHK_SD30_SPEED(sd_card)) {
  1981. int read_lba0 = 1;
  1982. RTSX_WRITE_REG(chip, SD30_DRIVE_SEL, 0x07,
  1983. chip->sd30_drive_sel_1v8);
  1984. retval = sd_set_init_para(chip);
  1985. if (retval != STATUS_SUCCESS)
  1986. TRACE_RET(chip, STATUS_FAIL);
  1987. if (CHK_SD_DDR50(sd_card))
  1988. retval = sd_ddr_tuning(chip);
  1989. else
  1990. retval = sd_sdr_tuning(chip);
  1991. if (retval != STATUS_SUCCESS) {
  1992. if (sd20_mode) {
  1993. TRACE_RET(chip, STATUS_FAIL);
  1994. } else {
  1995. retval = sd_init_power(chip);
  1996. if (retval != STATUS_SUCCESS)
  1997. TRACE_RET(chip, STATUS_FAIL);
  1998. try_sdio = 0;
  1999. sd20_mode = 1;
  2000. goto Switch_Fail;
  2001. }
  2002. }
  2003. sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
  2004. SD_RSP_TYPE_R1, NULL, 0);
  2005. if (CHK_SD_DDR50(sd_card)) {
  2006. retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
  2007. if (retval != STATUS_SUCCESS)
  2008. read_lba0 = 0;
  2009. }
  2010. if (read_lba0) {
  2011. retval = sd_read_lba0(chip);
  2012. if (retval != STATUS_SUCCESS) {
  2013. if (sd20_mode) {
  2014. TRACE_RET(chip, STATUS_FAIL);
  2015. } else {
  2016. retval = sd_init_power(chip);
  2017. if (retval != STATUS_SUCCESS)
  2018. TRACE_RET(chip, STATUS_FAIL);
  2019. try_sdio = 0;
  2020. sd20_mode = 1;
  2021. goto Switch_Fail;
  2022. }
  2023. }
  2024. }
  2025. }
  2026. retval = sd_check_wp_state(chip);
  2027. if (retval != STATUS_SUCCESS)
  2028. TRACE_RET(chip, STATUS_FAIL);
  2029. chip->card_bus_width[chip->card2lun[SD_CARD]] = 4;
  2030. #ifdef SUPPORT_SD_LOCK
  2031. if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) {
  2032. RTSX_WRITE_REG(chip, REG_SD_BLOCK_CNT_H, 0xFF, 0x02);
  2033. RTSX_WRITE_REG(chip, REG_SD_BLOCK_CNT_L, 0xFF, 0x00);
  2034. }
  2035. #endif
  2036. return STATUS_SUCCESS;
  2037. }
  2038. static int mmc_test_switch_bus(struct rtsx_chip *chip, u8 width)
  2039. {
  2040. struct sd_info *sd_card = &(chip->sd_card);
  2041. int retval;
  2042. u8 buf[8] = {0}, bus_width, *ptr;
  2043. u16 byte_cnt;
  2044. int len;
  2045. retval = sd_send_cmd_get_rsp(chip, BUSTEST_W, 0, SD_RSP_TYPE_R1, NULL,
  2046. 0);
  2047. if (retval != STATUS_SUCCESS)
  2048. TRACE_RET(chip, SWITCH_FAIL);
  2049. if (width == MMC_8BIT_BUS) {
  2050. buf[0] = 0x55;
  2051. buf[1] = 0xAA;
  2052. len = 8;
  2053. byte_cnt = 8;
  2054. bus_width = SD_BUS_WIDTH_8;
  2055. } else {
  2056. buf[0] = 0x5A;
  2057. len = 4;
  2058. byte_cnt = 4;
  2059. bus_width = SD_BUS_WIDTH_4;
  2060. }
  2061. retval = rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0x02);
  2062. if (retval != STATUS_SUCCESS)
  2063. TRACE_RET(chip, SWITCH_ERR);
  2064. retval = sd_write_data(chip, SD_TM_AUTO_WRITE_3,
  2065. NULL, 0, byte_cnt, 1, bus_width, buf, len, 100);
  2066. if (retval != STATUS_SUCCESS) {
  2067. rtsx_clear_sd_error(chip);
  2068. rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0);
  2069. TRACE_RET(chip, SWITCH_ERR);
  2070. }
  2071. retval = rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0);
  2072. if (retval != STATUS_SUCCESS)
  2073. TRACE_RET(chip, SWITCH_ERR);
  2074. dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", BUSTEST_R);
  2075. rtsx_init_cmd(chip);
  2076. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | BUSTEST_R);
  2077. if (width == MMC_8BIT_BUS)
  2078. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L,
  2079. 0xFF, 0x08);
  2080. else
  2081. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L,
  2082. 0xFF, 0x04);
  2083. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 1);
  2084. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 0);
  2085. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
  2086. SD_CALCULATE_CRC7 | SD_NO_CHECK_CRC16 | SD_NO_WAIT_BUSY_END|
  2087. SD_CHECK_CRC7 | SD_RSP_LEN_6);
  2088. rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
  2089. PINGPONG_BUFFER);
  2090. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
  2091. SD_TM_NORMAL_READ | SD_TRANSFER_START);
  2092. rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
  2093. SD_TRANSFER_END);
  2094. rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2, 0, 0);
  2095. if (width == MMC_8BIT_BUS)
  2096. rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 1, 0, 0);
  2097. retval = rtsx_send_cmd(chip, SD_CARD, 100);
  2098. if (retval < 0) {
  2099. rtsx_clear_sd_error(chip);
  2100. TRACE_RET(chip, SWITCH_ERR);
  2101. }
  2102. ptr = rtsx_get_cmd_data(chip) + 1;
  2103. if (width == MMC_8BIT_BUS) {
  2104. dev_dbg(rtsx_dev(chip), "BUSTEST_R [8bits]: 0x%02x 0x%02x\n",
  2105. ptr[0], ptr[1]);
  2106. if ((ptr[0] == 0xAA) && (ptr[1] == 0x55)) {
  2107. u8 rsp[5];
  2108. u32 arg;
  2109. if (CHK_MMC_DDR52(sd_card))
  2110. arg = 0x03B70600;
  2111. else
  2112. arg = 0x03B70200;
  2113. retval = sd_send_cmd_get_rsp(chip, SWITCH, arg,
  2114. SD_RSP_TYPE_R1b, rsp, 5);
  2115. if ((retval == STATUS_SUCCESS) &&
  2116. !(rsp[4] & MMC_SWITCH_ERR))
  2117. return SWITCH_SUCCESS;
  2118. }
  2119. } else {
  2120. dev_dbg(rtsx_dev(chip), "BUSTEST_R [4bits]: 0x%02x\n", ptr[0]);
  2121. if (ptr[0] == 0xA5) {
  2122. u8 rsp[5];
  2123. u32 arg;
  2124. if (CHK_MMC_DDR52(sd_card))
  2125. arg = 0x03B70500;
  2126. else
  2127. arg = 0x03B70100;
  2128. retval = sd_send_cmd_get_rsp(chip, SWITCH, arg,
  2129. SD_RSP_TYPE_R1b, rsp, 5);
  2130. if ((retval == STATUS_SUCCESS) &&
  2131. !(rsp[4] & MMC_SWITCH_ERR))
  2132. return SWITCH_SUCCESS;
  2133. }
  2134. }
  2135. TRACE_RET(chip, SWITCH_FAIL);
  2136. }
  2137. static int mmc_switch_timing_bus(struct rtsx_chip *chip, int switch_ddr)
  2138. {
  2139. struct sd_info *sd_card = &(chip->sd_card);
  2140. int retval;
  2141. u8 *ptr, card_type, card_type_mask = 0;
  2142. CLR_MMC_HS(sd_card);
  2143. dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", SEND_EXT_CSD);
  2144. rtsx_init_cmd(chip);
  2145. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF,
  2146. 0x40 | SEND_EXT_CSD);
  2147. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, 0);
  2148. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, 0);
  2149. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, 0);
  2150. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, 0);
  2151. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 0);
  2152. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 2);
  2153. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 1);
  2154. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 0);
  2155. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
  2156. SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END|
  2157. SD_CHECK_CRC7 | SD_RSP_LEN_6);
  2158. rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
  2159. PINGPONG_BUFFER);
  2160. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
  2161. SD_TM_NORMAL_READ | SD_TRANSFER_START);
  2162. rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
  2163. SD_TRANSFER_END);
  2164. rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 196, 0xFF, 0);
  2165. rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 212, 0xFF, 0);
  2166. rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 213, 0xFF, 0);
  2167. rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 214, 0xFF, 0);
  2168. rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 215, 0xFF, 0);
  2169. retval = rtsx_send_cmd(chip, SD_CARD, 1000);
  2170. if (retval < 0) {
  2171. if (retval == -ETIMEDOUT) {
  2172. rtsx_clear_sd_error(chip);
  2173. sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
  2174. SD_RSP_TYPE_R1, NULL, 0);
  2175. }
  2176. TRACE_RET(chip, STATUS_FAIL);
  2177. }
  2178. ptr = rtsx_get_cmd_data(chip);
  2179. if (ptr[0] & SD_TRANSFER_ERR) {
  2180. sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
  2181. SD_RSP_TYPE_R1, NULL, 0);
  2182. TRACE_RET(chip, STATUS_FAIL);
  2183. }
  2184. if (CHK_MMC_SECTOR_MODE(sd_card)) {
  2185. sd_card->capacity = ((u32)ptr[5] << 24) | ((u32)ptr[4] << 16) |
  2186. ((u32)ptr[3] << 8) | ((u32)ptr[2]);
  2187. }
  2188. card_type_mask = 0x03;
  2189. card_type = ptr[1] & card_type_mask;
  2190. if (card_type) {
  2191. u8 rsp[5];
  2192. if (card_type & 0x04) {
  2193. if (switch_ddr)
  2194. SET_MMC_DDR52(sd_card);
  2195. else
  2196. SET_MMC_52M(sd_card);
  2197. } else if (card_type & 0x02) {
  2198. SET_MMC_52M(sd_card);
  2199. } else {
  2200. SET_MMC_26M(sd_card);
  2201. }
  2202. retval = sd_send_cmd_get_rsp(chip, SWITCH,
  2203. 0x03B90100, SD_RSP_TYPE_R1b, rsp, 5);
  2204. if ((retval != STATUS_SUCCESS) || (rsp[4] & MMC_SWITCH_ERR))
  2205. CLR_MMC_HS(sd_card);
  2206. }
  2207. sd_choose_proper_clock(chip);
  2208. retval = switch_clock(chip, sd_card->sd_clock);
  2209. if (retval != STATUS_SUCCESS)
  2210. TRACE_RET(chip, STATUS_FAIL);
  2211. /* Test Bus Procedure */
  2212. retval = mmc_test_switch_bus(chip, MMC_8BIT_BUS);
  2213. if (retval == SWITCH_SUCCESS) {
  2214. SET_MMC_8BIT(sd_card);
  2215. chip->card_bus_width[chip->card2lun[SD_CARD]] = 8;
  2216. #ifdef SUPPORT_SD_LOCK
  2217. sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
  2218. #endif
  2219. } else if (retval == SWITCH_FAIL) {
  2220. retval = mmc_test_switch_bus(chip, MMC_4BIT_BUS);
  2221. if (retval == SWITCH_SUCCESS) {
  2222. SET_MMC_4BIT(sd_card);
  2223. chip->card_bus_width[chip->card2lun[SD_CARD]] = 4;
  2224. #ifdef SUPPORT_SD_LOCK
  2225. sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
  2226. #endif
  2227. } else if (retval == SWITCH_FAIL) {
  2228. CLR_MMC_8BIT(sd_card);
  2229. CLR_MMC_4BIT(sd_card);
  2230. } else {
  2231. TRACE_RET(chip, STATUS_FAIL);
  2232. }
  2233. } else {
  2234. TRACE_RET(chip, STATUS_FAIL);
  2235. }
  2236. return STATUS_SUCCESS;
  2237. }
  2238. static int reset_mmc(struct rtsx_chip *chip)
  2239. {
  2240. struct sd_info *sd_card = &(chip->sd_card);
  2241. int retval, i = 0, j = 0, k = 0;
  2242. int switch_ddr = 1;
  2243. u8 rsp[16];
  2244. u8 spec_ver = 0;
  2245. u32 temp;
  2246. #ifdef SUPPORT_SD_LOCK
  2247. if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON)
  2248. goto MMC_UNLOCK_ENTRY;
  2249. #endif
  2250. Switch_Fail:
  2251. retval = sd_prepare_reset(chip);
  2252. if (retval != STATUS_SUCCESS)
  2253. TRACE_RET(chip, retval);
  2254. SET_MMC(sd_card);
  2255. RTY_MMC_RST:
  2256. retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0,
  2257. NULL, 0);
  2258. if (retval != STATUS_SUCCESS)
  2259. TRACE_RET(chip, STATUS_FAIL);
  2260. do {
  2261. if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
  2262. sd_set_err_code(chip, SD_NO_CARD);
  2263. TRACE_RET(chip, STATUS_FAIL);
  2264. }
  2265. retval = sd_send_cmd_get_rsp(chip, SEND_OP_COND,
  2266. (SUPPORT_VOLTAGE | 0x40000000),
  2267. SD_RSP_TYPE_R3, rsp, 5);
  2268. if (retval != STATUS_SUCCESS) {
  2269. if (sd_check_err_code(chip, SD_BUSY) ||
  2270. sd_check_err_code(chip, SD_TO_ERR)) {
  2271. k++;
  2272. if (k < 20) {
  2273. sd_clr_err_code(chip);
  2274. goto RTY_MMC_RST;
  2275. } else {
  2276. TRACE_RET(chip, STATUS_FAIL);
  2277. }
  2278. } else {
  2279. j++;
  2280. if (j < 100) {
  2281. sd_clr_err_code(chip);
  2282. goto RTY_MMC_RST;
  2283. } else {
  2284. TRACE_RET(chip, STATUS_FAIL);
  2285. }
  2286. }
  2287. }
  2288. wait_timeout(20);
  2289. i++;
  2290. } while (!(rsp[1] & 0x80) && (i < 255));
  2291. if (i == 255)
  2292. TRACE_RET(chip, STATUS_FAIL);
  2293. if ((rsp[1] & 0x60) == 0x40)
  2294. SET_MMC_SECTOR_MODE(sd_card);
  2295. else
  2296. CLR_MMC_SECTOR_MODE(sd_card);
  2297. retval = sd_send_cmd_get_rsp(chip, ALL_SEND_CID, 0, SD_RSP_TYPE_R2,
  2298. NULL, 0);
  2299. if (retval != STATUS_SUCCESS)
  2300. TRACE_RET(chip, STATUS_FAIL);
  2301. sd_card->sd_addr = 0x00100000;
  2302. retval = sd_send_cmd_get_rsp(chip, SET_RELATIVE_ADDR, sd_card->sd_addr,
  2303. SD_RSP_TYPE_R6, rsp, 5);
  2304. if (retval != STATUS_SUCCESS)
  2305. TRACE_RET(chip, STATUS_FAIL);
  2306. retval = sd_check_csd(chip, 1);
  2307. if (retval != STATUS_SUCCESS)
  2308. TRACE_RET(chip, STATUS_FAIL);
  2309. spec_ver = (sd_card->raw_csd[0] & 0x3C) >> 2;
  2310. retval = sd_select_card(chip, 1);
  2311. if (retval != STATUS_SUCCESS)
  2312. TRACE_RET(chip, STATUS_FAIL);
  2313. retval = sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, SD_RSP_TYPE_R1,
  2314. NULL, 0);
  2315. if (retval != STATUS_SUCCESS)
  2316. TRACE_RET(chip, STATUS_FAIL);
  2317. #ifdef SUPPORT_SD_LOCK
  2318. MMC_UNLOCK_ENTRY:
  2319. retval = sd_update_lock_status(chip);
  2320. if (retval != STATUS_SUCCESS)
  2321. TRACE_RET(chip, STATUS_FAIL);
  2322. #endif
  2323. retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
  2324. if (retval != STATUS_SUCCESS)
  2325. TRACE_RET(chip, STATUS_FAIL);
  2326. chip->card_bus_width[chip->card2lun[SD_CARD]] = 1;
  2327. if (!sd_card->mmc_dont_switch_bus) {
  2328. if (spec_ver == 4) {
  2329. /* MMC 4.x Cards */
  2330. retval = mmc_switch_timing_bus(chip, switch_ddr);
  2331. if (retval != STATUS_SUCCESS) {
  2332. retval = sd_init_power(chip);
  2333. if (retval != STATUS_SUCCESS)
  2334. TRACE_RET(chip, STATUS_FAIL);
  2335. sd_card->mmc_dont_switch_bus = 1;
  2336. TRACE_GOTO(chip, Switch_Fail);
  2337. }
  2338. }
  2339. if (CHK_MMC_SECTOR_MODE(sd_card) && (sd_card->capacity == 0))
  2340. TRACE_RET(chip, STATUS_FAIL);
  2341. if (switch_ddr && CHK_MMC_DDR52(sd_card)) {
  2342. retval = sd_set_init_para(chip);
  2343. if (retval != STATUS_SUCCESS)
  2344. TRACE_RET(chip, STATUS_FAIL);
  2345. retval = mmc_ddr_tuning(chip);
  2346. if (retval != STATUS_SUCCESS) {
  2347. retval = sd_init_power(chip);
  2348. if (retval != STATUS_SUCCESS)
  2349. TRACE_RET(chip, STATUS_FAIL);
  2350. switch_ddr = 0;
  2351. TRACE_GOTO(chip, Switch_Fail);
  2352. }
  2353. retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
  2354. if (retval == STATUS_SUCCESS) {
  2355. retval = sd_read_lba0(chip);
  2356. if (retval != STATUS_SUCCESS) {
  2357. retval = sd_init_power(chip);
  2358. if (retval != STATUS_SUCCESS)
  2359. TRACE_RET(chip, STATUS_FAIL);
  2360. switch_ddr = 0;
  2361. TRACE_GOTO(chip, Switch_Fail);
  2362. }
  2363. }
  2364. }
  2365. }
  2366. #ifdef SUPPORT_SD_LOCK
  2367. if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) {
  2368. RTSX_WRITE_REG(chip, REG_SD_BLOCK_CNT_H, 0xFF, 0x02);
  2369. RTSX_WRITE_REG(chip, REG_SD_BLOCK_CNT_L, 0xFF, 0x00);
  2370. }
  2371. #endif
  2372. temp = rtsx_readl(chip, RTSX_BIPR);
  2373. if (temp & SD_WRITE_PROTECT)
  2374. chip->card_wp |= SD_CARD;
  2375. return STATUS_SUCCESS;
  2376. }
  2377. int reset_sd_card(struct rtsx_chip *chip)
  2378. {
  2379. struct sd_info *sd_card = &(chip->sd_card);
  2380. int retval;
  2381. sd_init_reg_addr(chip);
  2382. memset(sd_card, 0, sizeof(struct sd_info));
  2383. chip->capacity[chip->card2lun[SD_CARD]] = 0;
  2384. retval = enable_card_clock(chip, SD_CARD);
  2385. if (retval != STATUS_SUCCESS)
  2386. TRACE_RET(chip, STATUS_FAIL);
  2387. if (chip->ignore_sd && CHK_SDIO_EXIST(chip) &&
  2388. !CHK_SDIO_IGNORED(chip)) {
  2389. if (chip->asic_code) {
  2390. retval = sd_pull_ctl_enable(chip);
  2391. if (retval != STATUS_SUCCESS)
  2392. TRACE_RET(chip, STATUS_FAIL);
  2393. } else {
  2394. retval = rtsx_write_register(chip, FPGA_PULL_CTL,
  2395. FPGA_SD_PULL_CTL_BIT | 0x20, 0);
  2396. if (retval != STATUS_SUCCESS)
  2397. TRACE_RET(chip, STATUS_FAIL);
  2398. }
  2399. retval = card_share_mode(chip, SD_CARD);
  2400. if (retval != STATUS_SUCCESS)
  2401. TRACE_RET(chip, STATUS_FAIL);
  2402. chip->sd_io = 1;
  2403. TRACE_RET(chip, STATUS_FAIL);
  2404. }
  2405. retval = sd_init_power(chip);
  2406. if (retval != STATUS_SUCCESS)
  2407. TRACE_RET(chip, STATUS_FAIL);
  2408. if (chip->sd_ctl & RESET_MMC_FIRST) {
  2409. retval = reset_mmc(chip);
  2410. if (retval != STATUS_SUCCESS) {
  2411. if (sd_check_err_code(chip, SD_NO_CARD))
  2412. TRACE_RET(chip, STATUS_FAIL);
  2413. retval = reset_sd(chip);
  2414. if (retval != STATUS_SUCCESS)
  2415. TRACE_RET(chip, STATUS_FAIL);
  2416. }
  2417. } else {
  2418. retval = reset_sd(chip);
  2419. if (retval != STATUS_SUCCESS) {
  2420. if (sd_check_err_code(chip, SD_NO_CARD))
  2421. TRACE_RET(chip, STATUS_FAIL);
  2422. if (chip->sd_io) {
  2423. TRACE_RET(chip, STATUS_FAIL);
  2424. } else {
  2425. retval = reset_mmc(chip);
  2426. if (retval != STATUS_SUCCESS)
  2427. TRACE_RET(chip, STATUS_FAIL);
  2428. }
  2429. }
  2430. }
  2431. retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
  2432. if (retval != STATUS_SUCCESS)
  2433. TRACE_RET(chip, STATUS_FAIL);
  2434. RTSX_WRITE_REG(chip, REG_SD_BYTE_CNT_L, 0xFF, 0);
  2435. RTSX_WRITE_REG(chip, REG_SD_BYTE_CNT_H, 0xFF, 2);
  2436. chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity;
  2437. retval = sd_set_init_para(chip);
  2438. if (retval != STATUS_SUCCESS)
  2439. TRACE_RET(chip, STATUS_FAIL);
  2440. dev_dbg(rtsx_dev(chip), "sd_card->sd_type = 0x%x\n", sd_card->sd_type);
  2441. return STATUS_SUCCESS;
  2442. }
  2443. static int reset_mmc_only(struct rtsx_chip *chip)
  2444. {
  2445. struct sd_info *sd_card = &(chip->sd_card);
  2446. int retval;
  2447. sd_card->sd_type = 0;
  2448. sd_card->seq_mode = 0;
  2449. sd_card->sd_data_buf_ready = 0;
  2450. sd_card->capacity = 0;
  2451. sd_card->sd_switch_fail = 0;
  2452. #ifdef SUPPORT_SD_LOCK
  2453. sd_card->sd_lock_status = 0;
  2454. sd_card->sd_erase_status = 0;
  2455. #endif
  2456. chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity = 0;
  2457. retval = enable_card_clock(chip, SD_CARD);
  2458. if (retval != STATUS_SUCCESS)
  2459. TRACE_RET(chip, STATUS_FAIL);
  2460. retval = sd_init_power(chip);
  2461. if (retval != STATUS_SUCCESS)
  2462. TRACE_RET(chip, STATUS_FAIL);
  2463. retval = reset_mmc(chip);
  2464. if (retval != STATUS_SUCCESS)
  2465. TRACE_RET(chip, STATUS_FAIL);
  2466. retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
  2467. if (retval != STATUS_SUCCESS)
  2468. TRACE_RET(chip, STATUS_FAIL);
  2469. RTSX_WRITE_REG(chip, REG_SD_BYTE_CNT_L, 0xFF, 0);
  2470. RTSX_WRITE_REG(chip, REG_SD_BYTE_CNT_H, 0xFF, 2);
  2471. chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity;
  2472. retval = sd_set_init_para(chip);
  2473. if (retval != STATUS_SUCCESS)
  2474. TRACE_RET(chip, STATUS_FAIL);
  2475. dev_dbg(rtsx_dev(chip), "In reset_mmc_only, sd_card->sd_type = 0x%x\n",
  2476. sd_card->sd_type);
  2477. return STATUS_SUCCESS;
  2478. }
  2479. #define WAIT_DATA_READY_RTY_CNT 255
  2480. static int wait_data_buf_ready(struct rtsx_chip *chip)
  2481. {
  2482. struct sd_info *sd_card = &(chip->sd_card);
  2483. int i, retval;
  2484. for (i = 0; i < WAIT_DATA_READY_RTY_CNT; i++) {
  2485. if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
  2486. sd_set_err_code(chip, SD_NO_CARD);
  2487. TRACE_RET(chip, STATUS_FAIL);
  2488. }
  2489. sd_card->sd_data_buf_ready = 0;
  2490. retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
  2491. sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
  2492. if (retval != STATUS_SUCCESS)
  2493. TRACE_RET(chip, STATUS_FAIL);
  2494. if (sd_card->sd_data_buf_ready) {
  2495. return sd_send_cmd_get_rsp(chip, SEND_STATUS,
  2496. sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
  2497. }
  2498. }
  2499. sd_set_err_code(chip, SD_TO_ERR);
  2500. TRACE_RET(chip, STATUS_FAIL);
  2501. }
  2502. void sd_stop_seq_mode(struct rtsx_chip *chip)
  2503. {
  2504. struct sd_info *sd_card = &(chip->sd_card);
  2505. int retval;
  2506. if (sd_card->seq_mode) {
  2507. retval = sd_switch_clock(chip);
  2508. if (retval != STATUS_SUCCESS)
  2509. return;
  2510. retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0,
  2511. SD_RSP_TYPE_R1b, NULL, 0);
  2512. if (retval != STATUS_SUCCESS)
  2513. sd_set_err_code(chip, SD_STS_ERR);
  2514. retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
  2515. if (retval != STATUS_SUCCESS)
  2516. sd_set_err_code(chip, SD_STS_ERR);
  2517. sd_card->seq_mode = 0;
  2518. rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH);
  2519. }
  2520. }
  2521. static inline int sd_auto_tune_clock(struct rtsx_chip *chip)
  2522. {
  2523. struct sd_info *sd_card = &(chip->sd_card);
  2524. int retval;
  2525. if (chip->asic_code) {
  2526. if (sd_card->sd_clock > 30)
  2527. sd_card->sd_clock -= 20;
  2528. } else {
  2529. switch (sd_card->sd_clock) {
  2530. case CLK_200:
  2531. sd_card->sd_clock = CLK_150;
  2532. break;
  2533. case CLK_150:
  2534. sd_card->sd_clock = CLK_120;
  2535. break;
  2536. case CLK_120:
  2537. sd_card->sd_clock = CLK_100;
  2538. break;
  2539. case CLK_100:
  2540. sd_card->sd_clock = CLK_80;
  2541. break;
  2542. case CLK_80:
  2543. sd_card->sd_clock = CLK_60;
  2544. break;
  2545. case CLK_60:
  2546. sd_card->sd_clock = CLK_50;
  2547. break;
  2548. default:
  2549. break;
  2550. }
  2551. }
  2552. retval = sd_switch_clock(chip);
  2553. if (retval != STATUS_SUCCESS)
  2554. TRACE_RET(chip, STATUS_FAIL);
  2555. return STATUS_SUCCESS;
  2556. }
  2557. int sd_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip, u32 start_sector,
  2558. u16 sector_cnt)
  2559. {
  2560. struct sd_info *sd_card = &(chip->sd_card);
  2561. u32 data_addr;
  2562. u8 cfg2;
  2563. int retval;
  2564. if (srb->sc_data_direction == DMA_FROM_DEVICE) {
  2565. dev_dbg(rtsx_dev(chip), "sd_rw: Read %d %s from 0x%x\n",
  2566. sector_cnt, (sector_cnt > 1) ? "sectors" : "sector",
  2567. start_sector);
  2568. } else {
  2569. dev_dbg(rtsx_dev(chip), "sd_rw: Write %d %s to 0x%x\n",
  2570. sector_cnt, (sector_cnt > 1) ? "sectors" : "sector",
  2571. start_sector);
  2572. }
  2573. sd_card->cleanup_counter = 0;
  2574. if (!(chip->card_ready & SD_CARD)) {
  2575. sd_card->seq_mode = 0;
  2576. retval = reset_sd_card(chip);
  2577. if (retval == STATUS_SUCCESS) {
  2578. chip->card_ready |= SD_CARD;
  2579. chip->card_fail &= ~SD_CARD;
  2580. } else {
  2581. chip->card_ready &= ~SD_CARD;
  2582. chip->card_fail |= SD_CARD;
  2583. chip->capacity[chip->card2lun[SD_CARD]] = 0;
  2584. chip->rw_need_retry = 1;
  2585. TRACE_RET(chip, STATUS_FAIL);
  2586. }
  2587. }
  2588. if (!CHK_SD_HCXC(sd_card) && !CHK_MMC_SECTOR_MODE(sd_card))
  2589. data_addr = start_sector << 9;
  2590. else
  2591. data_addr = start_sector;
  2592. sd_clr_err_code(chip);
  2593. retval = sd_switch_clock(chip);
  2594. if (retval != STATUS_SUCCESS) {
  2595. sd_set_err_code(chip, SD_IO_ERR);
  2596. TRACE_GOTO(chip, RW_FAIL);
  2597. }
  2598. if (sd_card->seq_mode &&
  2599. ((sd_card->pre_dir != srb->sc_data_direction) ||
  2600. ((sd_card->pre_sec_addr + sd_card->pre_sec_cnt) !=
  2601. start_sector))) {
  2602. if ((sd_card->pre_sec_cnt < 0x80)
  2603. && (sd_card->pre_dir == DMA_FROM_DEVICE)
  2604. && !CHK_SD30_SPEED(sd_card)
  2605. && !CHK_SD_HS(sd_card)
  2606. && !CHK_MMC_HS(sd_card)) {
  2607. sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
  2608. SD_RSP_TYPE_R1, NULL, 0);
  2609. }
  2610. retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION,
  2611. 0, SD_RSP_TYPE_R1b, NULL, 0);
  2612. if (retval != STATUS_SUCCESS) {
  2613. chip->rw_need_retry = 1;
  2614. sd_set_err_code(chip, SD_STS_ERR);
  2615. TRACE_GOTO(chip, RW_FAIL);
  2616. }
  2617. sd_card->seq_mode = 0;
  2618. retval = rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH);
  2619. if (retval != STATUS_SUCCESS) {
  2620. sd_set_err_code(chip, SD_IO_ERR);
  2621. TRACE_GOTO(chip, RW_FAIL);
  2622. }
  2623. if ((sd_card->pre_sec_cnt < 0x80)
  2624. && !CHK_SD30_SPEED(sd_card)
  2625. && !CHK_SD_HS(sd_card)
  2626. && !CHK_MMC_HS(sd_card)) {
  2627. sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
  2628. SD_RSP_TYPE_R1, NULL, 0);
  2629. }
  2630. }
  2631. rtsx_init_cmd(chip);
  2632. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 0x00);
  2633. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 0x02);
  2634. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF,
  2635. (u8)sector_cnt);
  2636. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF,
  2637. (u8)(sector_cnt >> 8));
  2638. rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01, RING_BUFFER);
  2639. if (CHK_MMC_8BIT(sd_card))
  2640. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1,
  2641. 0x03, SD_BUS_WIDTH_8);
  2642. else if (CHK_MMC_4BIT(sd_card) || CHK_SD(sd_card))
  2643. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1,
  2644. 0x03, SD_BUS_WIDTH_4);
  2645. else
  2646. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1,
  2647. 0x03, SD_BUS_WIDTH_1);
  2648. if (sd_card->seq_mode) {
  2649. cfg2 = SD_NO_CALCULATE_CRC7 | SD_CHECK_CRC16|
  2650. SD_NO_WAIT_BUSY_END | SD_NO_CHECK_CRC7 |
  2651. SD_RSP_LEN_0;
  2652. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, cfg2);
  2653. trans_dma_enable(srb->sc_data_direction, chip, sector_cnt * 512,
  2654. DMA_512);
  2655. if (srb->sc_data_direction == DMA_FROM_DEVICE) {
  2656. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
  2657. SD_TM_AUTO_READ_3 | SD_TRANSFER_START);
  2658. } else {
  2659. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
  2660. SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
  2661. }
  2662. rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
  2663. SD_TRANSFER_END, SD_TRANSFER_END);
  2664. rtsx_send_cmd_no_wait(chip);
  2665. } else {
  2666. if (srb->sc_data_direction == DMA_FROM_DEVICE) {
  2667. dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n",
  2668. READ_MULTIPLE_BLOCK);
  2669. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF,
  2670. 0x40 | READ_MULTIPLE_BLOCK);
  2671. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF,
  2672. (u8)(data_addr >> 24));
  2673. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF,
  2674. (u8)(data_addr >> 16));
  2675. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF,
  2676. (u8)(data_addr >> 8));
  2677. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF,
  2678. (u8)data_addr);
  2679. cfg2 = SD_CALCULATE_CRC7 | SD_CHECK_CRC16 |
  2680. SD_NO_WAIT_BUSY_END | SD_CHECK_CRC7 |
  2681. SD_RSP_LEN_6;
  2682. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
  2683. cfg2);
  2684. trans_dma_enable(srb->sc_data_direction, chip,
  2685. sector_cnt * 512, DMA_512);
  2686. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
  2687. SD_TM_AUTO_READ_2 | SD_TRANSFER_START);
  2688. rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
  2689. SD_TRANSFER_END, SD_TRANSFER_END);
  2690. rtsx_send_cmd_no_wait(chip);
  2691. } else {
  2692. retval = rtsx_send_cmd(chip, SD_CARD, 50);
  2693. if (retval < 0) {
  2694. rtsx_clear_sd_error(chip);
  2695. chip->rw_need_retry = 1;
  2696. sd_set_err_code(chip, SD_TO_ERR);
  2697. TRACE_GOTO(chip, RW_FAIL);
  2698. }
  2699. retval = wait_data_buf_ready(chip);
  2700. if (retval != STATUS_SUCCESS) {
  2701. chip->rw_need_retry = 1;
  2702. sd_set_err_code(chip, SD_TO_ERR);
  2703. TRACE_GOTO(chip, RW_FAIL);
  2704. }
  2705. retval = sd_send_cmd_get_rsp(chip, WRITE_MULTIPLE_BLOCK,
  2706. data_addr, SD_RSP_TYPE_R1, NULL, 0);
  2707. if (retval != STATUS_SUCCESS) {
  2708. chip->rw_need_retry = 1;
  2709. TRACE_GOTO(chip, RW_FAIL);
  2710. }
  2711. rtsx_init_cmd(chip);
  2712. cfg2 = SD_NO_CALCULATE_CRC7 | SD_CHECK_CRC16 |
  2713. SD_NO_WAIT_BUSY_END |
  2714. SD_NO_CHECK_CRC7 | SD_RSP_LEN_0;
  2715. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
  2716. cfg2);
  2717. trans_dma_enable(srb->sc_data_direction, chip,
  2718. sector_cnt * 512, DMA_512);
  2719. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
  2720. SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
  2721. rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
  2722. SD_TRANSFER_END, SD_TRANSFER_END);
  2723. rtsx_send_cmd_no_wait(chip);
  2724. }
  2725. sd_card->seq_mode = 1;
  2726. }
  2727. retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb),
  2728. scsi_bufflen(srb), scsi_sg_count(srb),
  2729. srb->sc_data_direction, chip->sd_timeout);
  2730. if (retval < 0) {
  2731. u8 stat = 0;
  2732. int err;
  2733. sd_card->seq_mode = 0;
  2734. if (retval == -ETIMEDOUT)
  2735. err = STATUS_TIMEDOUT;
  2736. else
  2737. err = STATUS_FAIL;
  2738. rtsx_read_register(chip, REG_SD_STAT1, &stat);
  2739. rtsx_clear_sd_error(chip);
  2740. if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
  2741. chip->rw_need_retry = 0;
  2742. dev_dbg(rtsx_dev(chip), "No card exist, exit sd_rw\n");
  2743. TRACE_RET(chip, STATUS_FAIL);
  2744. }
  2745. chip->rw_need_retry = 1;
  2746. retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0,
  2747. SD_RSP_TYPE_R1b, NULL, 0);
  2748. if (retval != STATUS_SUCCESS) {
  2749. sd_set_err_code(chip, SD_STS_ERR);
  2750. TRACE_GOTO(chip, RW_FAIL);
  2751. }
  2752. if (stat & (SD_CRC7_ERR | SD_CRC16_ERR | SD_CRC_WRITE_ERR)) {
  2753. dev_dbg(rtsx_dev(chip), "SD CRC error, tune clock!\n");
  2754. sd_set_err_code(chip, SD_CRC_ERR);
  2755. TRACE_GOTO(chip, RW_FAIL);
  2756. }
  2757. if (err == STATUS_TIMEDOUT) {
  2758. sd_set_err_code(chip, SD_TO_ERR);
  2759. TRACE_GOTO(chip, RW_FAIL);
  2760. }
  2761. TRACE_RET(chip, err);
  2762. }
  2763. sd_card->pre_sec_addr = start_sector;
  2764. sd_card->pre_sec_cnt = sector_cnt;
  2765. sd_card->pre_dir = srb->sc_data_direction;
  2766. return STATUS_SUCCESS;
  2767. RW_FAIL:
  2768. sd_card->seq_mode = 0;
  2769. if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
  2770. chip->rw_need_retry = 0;
  2771. dev_dbg(rtsx_dev(chip), "No card exist, exit sd_rw\n");
  2772. TRACE_RET(chip, STATUS_FAIL);
  2773. }
  2774. if (sd_check_err_code(chip, SD_CRC_ERR)) {
  2775. if (CHK_MMC_4BIT(sd_card) || CHK_MMC_8BIT(sd_card)) {
  2776. sd_card->mmc_dont_switch_bus = 1;
  2777. reset_mmc_only(chip);
  2778. sd_card->mmc_dont_switch_bus = 0;
  2779. } else {
  2780. sd_card->need_retune = 1;
  2781. sd_auto_tune_clock(chip);
  2782. }
  2783. } else if (sd_check_err_code(chip, SD_TO_ERR | SD_STS_ERR)) {
  2784. retval = reset_sd_card(chip);
  2785. if (retval != STATUS_SUCCESS) {
  2786. chip->card_ready &= ~SD_CARD;
  2787. chip->card_fail |= SD_CARD;
  2788. chip->capacity[chip->card2lun[SD_CARD]] = 0;
  2789. }
  2790. }
  2791. TRACE_RET(chip, STATUS_FAIL);
  2792. }
  2793. #ifdef SUPPORT_CPRM
  2794. int soft_reset_sd_card(struct rtsx_chip *chip)
  2795. {
  2796. return reset_sd(chip);
  2797. }
  2798. int ext_sd_send_cmd_get_rsp(struct rtsx_chip *chip, u8 cmd_idx,
  2799. u32 arg, u8 rsp_type, u8 *rsp, int rsp_len, int special_check)
  2800. {
  2801. int retval;
  2802. int timeout = 100;
  2803. u16 reg_addr;
  2804. u8 *ptr;
  2805. int stat_idx = 0;
  2806. int rty_cnt = 0;
  2807. dev_dbg(rtsx_dev(chip), "EXT SD/MMC CMD %d\n", cmd_idx);
  2808. if (rsp_type == SD_RSP_TYPE_R1b)
  2809. timeout = 3000;
  2810. RTY_SEND_CMD:
  2811. rtsx_init_cmd(chip);
  2812. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | cmd_idx);
  2813. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, (u8)(arg >> 24));
  2814. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, (u8)(arg >> 16));
  2815. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, (u8)(arg >> 8));
  2816. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, (u8)arg);
  2817. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type);
  2818. rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE,
  2819. 0x01, PINGPONG_BUFFER);
  2820. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER,
  2821. 0xFF, SD_TM_CMD_RSP | SD_TRANSFER_START);
  2822. rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
  2823. SD_TRANSFER_END);
  2824. if (rsp_type == SD_RSP_TYPE_R2) {
  2825. for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16;
  2826. reg_addr++)
  2827. rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
  2828. stat_idx = 17;
  2829. } else if (rsp_type != SD_RSP_TYPE_R0) {
  2830. for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4;
  2831. reg_addr++)
  2832. rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
  2833. stat_idx = 6;
  2834. }
  2835. rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_CMD5, 0, 0);
  2836. rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_STAT1, 0, 0);
  2837. retval = rtsx_send_cmd(chip, SD_CARD, timeout);
  2838. if (retval < 0) {
  2839. if (retval == -ETIMEDOUT) {
  2840. rtsx_clear_sd_error(chip);
  2841. if (rsp_type & SD_WAIT_BUSY_END) {
  2842. retval = sd_check_data0_status(chip);
  2843. if (retval != STATUS_SUCCESS)
  2844. TRACE_RET(chip, retval);
  2845. } else {
  2846. sd_set_err_code(chip, SD_TO_ERR);
  2847. }
  2848. }
  2849. TRACE_RET(chip, STATUS_FAIL);
  2850. }
  2851. if (rsp_type == SD_RSP_TYPE_R0)
  2852. return STATUS_SUCCESS;
  2853. ptr = rtsx_get_cmd_data(chip) + 1;
  2854. if ((ptr[0] & 0xC0) != 0) {
  2855. sd_set_err_code(chip, SD_STS_ERR);
  2856. TRACE_RET(chip, STATUS_FAIL);
  2857. }
  2858. if (!(rsp_type & SD_NO_CHECK_CRC7)) {
  2859. if (ptr[stat_idx] & SD_CRC7_ERR) {
  2860. if (cmd_idx == WRITE_MULTIPLE_BLOCK) {
  2861. sd_set_err_code(chip, SD_CRC_ERR);
  2862. TRACE_RET(chip, STATUS_FAIL);
  2863. }
  2864. if (rty_cnt < SD_MAX_RETRY_COUNT) {
  2865. wait_timeout(20);
  2866. rty_cnt++;
  2867. goto RTY_SEND_CMD;
  2868. } else {
  2869. sd_set_err_code(chip, SD_CRC_ERR);
  2870. TRACE_RET(chip, STATUS_FAIL);
  2871. }
  2872. }
  2873. }
  2874. if ((cmd_idx == SELECT_CARD) || (cmd_idx == APP_CMD) ||
  2875. (cmd_idx == SEND_STATUS) || (cmd_idx == STOP_TRANSMISSION)) {
  2876. if ((cmd_idx != STOP_TRANSMISSION) && (special_check == 0)) {
  2877. if (ptr[1] & 0x80)
  2878. TRACE_RET(chip, STATUS_FAIL);
  2879. }
  2880. #ifdef SUPPORT_SD_LOCK
  2881. if (ptr[1] & 0x7D)
  2882. #else
  2883. if (ptr[1] & 0x7F)
  2884. #endif
  2885. {
  2886. TRACE_RET(chip, STATUS_FAIL);
  2887. }
  2888. if (ptr[2] & 0xF8)
  2889. TRACE_RET(chip, STATUS_FAIL);
  2890. if (cmd_idx == SELECT_CARD) {
  2891. if (rsp_type == SD_RSP_TYPE_R2) {
  2892. if ((ptr[3] & 0x1E) != 0x04)
  2893. TRACE_RET(chip, STATUS_FAIL);
  2894. } else if (rsp_type == SD_RSP_TYPE_R0) {
  2895. if ((ptr[3] & 0x1E) != 0x03)
  2896. TRACE_RET(chip, STATUS_FAIL);
  2897. }
  2898. }
  2899. }
  2900. if (rsp && rsp_len)
  2901. memcpy(rsp, ptr, rsp_len);
  2902. return STATUS_SUCCESS;
  2903. }
  2904. int ext_sd_get_rsp(struct rtsx_chip *chip, int len, u8 *rsp, u8 rsp_type)
  2905. {
  2906. int retval, rsp_len;
  2907. u16 reg_addr;
  2908. if (rsp_type == SD_RSP_TYPE_R0)
  2909. return STATUS_SUCCESS;
  2910. rtsx_init_cmd(chip);
  2911. if (rsp_type == SD_RSP_TYPE_R2) {
  2912. for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16;
  2913. reg_addr++)
  2914. rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0xFF, 0);
  2915. rsp_len = 17;
  2916. } else if (rsp_type != SD_RSP_TYPE_R0) {
  2917. for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4;
  2918. reg_addr++)
  2919. rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0xFF, 0);
  2920. rsp_len = 6;
  2921. }
  2922. rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_CMD5, 0xFF, 0);
  2923. retval = rtsx_send_cmd(chip, SD_CARD, 100);
  2924. if (retval != STATUS_SUCCESS)
  2925. TRACE_RET(chip, STATUS_FAIL);
  2926. if (rsp) {
  2927. int min_len = (rsp_len < len) ? rsp_len : len;
  2928. memcpy(rsp, rtsx_get_cmd_data(chip), min_len);
  2929. dev_dbg(rtsx_dev(chip), "min_len = %d\n", min_len);
  2930. dev_dbg(rtsx_dev(chip), "Response in cmd buf: 0x%x 0x%x 0x%x 0x%x\n",
  2931. rsp[0], rsp[1], rsp[2], rsp[3]);
  2932. }
  2933. return STATUS_SUCCESS;
  2934. }
  2935. int sd_pass_thru_mode(struct scsi_cmnd *srb, struct rtsx_chip *chip)
  2936. {
  2937. struct sd_info *sd_card = &(chip->sd_card);
  2938. unsigned int lun = SCSI_LUN(srb);
  2939. int len;
  2940. u8 buf[18] = {
  2941. 0x00,
  2942. 0x00,
  2943. 0x00,
  2944. 0x0E,
  2945. 0x00,
  2946. 0x00,
  2947. 0x00,
  2948. 0x00,
  2949. 0x53,
  2950. 0x44,
  2951. 0x20,
  2952. 0x43,
  2953. 0x61,
  2954. 0x72,
  2955. 0x64,
  2956. 0x00,
  2957. 0x00,
  2958. 0x00,
  2959. };
  2960. sd_card->pre_cmd_err = 0;
  2961. if (!(CHK_BIT(chip->lun_mc, lun))) {
  2962. SET_BIT(chip->lun_mc, lun);
  2963. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
  2964. TRACE_RET(chip, TRANSPORT_FAILED);
  2965. }
  2966. if ((0x53 != srb->cmnd[2]) || (0x44 != srb->cmnd[3]) ||
  2967. (0x20 != srb->cmnd[4]) || (0x43 != srb->cmnd[5]) ||
  2968. (0x61 != srb->cmnd[6]) || (0x72 != srb->cmnd[7]) ||
  2969. (0x64 != srb->cmnd[8])) {
  2970. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
  2971. TRACE_RET(chip, TRANSPORT_FAILED);
  2972. }
  2973. switch (srb->cmnd[1] & 0x0F) {
  2974. case 0:
  2975. sd_card->sd_pass_thru_en = 0;
  2976. break;
  2977. case 1:
  2978. sd_card->sd_pass_thru_en = 1;
  2979. break;
  2980. default:
  2981. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
  2982. TRACE_RET(chip, TRANSPORT_FAILED);
  2983. }
  2984. buf[5] = (1 == CHK_SD(sd_card)) ? 0x01 : 0x02;
  2985. if (chip->card_wp & SD_CARD)
  2986. buf[5] |= 0x80;
  2987. buf[6] = (u8)(sd_card->sd_addr >> 16);
  2988. buf[7] = (u8)(sd_card->sd_addr >> 24);
  2989. buf[15] = chip->max_lun;
  2990. len = min_t(int, 18, scsi_bufflen(srb));
  2991. rtsx_stor_set_xfer_buf(buf, len, srb);
  2992. return TRANSPORT_GOOD;
  2993. }
  2994. static inline int get_rsp_type(struct scsi_cmnd *srb, u8 *rsp_type,
  2995. int *rsp_len)
  2996. {
  2997. if (!rsp_type || !rsp_len)
  2998. return STATUS_FAIL;
  2999. switch (srb->cmnd[10]) {
  3000. case 0x03:
  3001. *rsp_type = SD_RSP_TYPE_R0;
  3002. *rsp_len = 0;
  3003. break;
  3004. case 0x04:
  3005. *rsp_type = SD_RSP_TYPE_R1;
  3006. *rsp_len = 6;
  3007. break;
  3008. case 0x05:
  3009. *rsp_type = SD_RSP_TYPE_R1b;
  3010. *rsp_len = 6;
  3011. break;
  3012. case 0x06:
  3013. *rsp_type = SD_RSP_TYPE_R2;
  3014. *rsp_len = 17;
  3015. break;
  3016. case 0x07:
  3017. *rsp_type = SD_RSP_TYPE_R3;
  3018. *rsp_len = 6;
  3019. break;
  3020. default:
  3021. return STATUS_FAIL;
  3022. }
  3023. return STATUS_SUCCESS;
  3024. }
  3025. int sd_execute_no_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
  3026. {
  3027. struct sd_info *sd_card = &(chip->sd_card);
  3028. unsigned int lun = SCSI_LUN(srb);
  3029. int retval, rsp_len;
  3030. u8 cmd_idx, rsp_type;
  3031. u8 standby = 0, acmd = 0;
  3032. u32 arg;
  3033. if (!sd_card->sd_pass_thru_en) {
  3034. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
  3035. TRACE_RET(chip, TRANSPORT_FAILED);
  3036. }
  3037. retval = sd_switch_clock(chip);
  3038. if (retval != STATUS_SUCCESS)
  3039. TRACE_RET(chip, TRANSPORT_FAILED);
  3040. if (sd_card->pre_cmd_err) {
  3041. sd_card->pre_cmd_err = 0;
  3042. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
  3043. TRACE_RET(chip, TRANSPORT_FAILED);
  3044. }
  3045. cmd_idx = srb->cmnd[2] & 0x3F;
  3046. if (srb->cmnd[1] & 0x02)
  3047. standby = 1;
  3048. if (srb->cmnd[1] & 0x01)
  3049. acmd = 1;
  3050. arg = ((u32)srb->cmnd[3] << 24) | ((u32)srb->cmnd[4] << 16) |
  3051. ((u32)srb->cmnd[5] << 8) | srb->cmnd[6];
  3052. retval = get_rsp_type(srb, &rsp_type, &rsp_len);
  3053. if (retval != STATUS_SUCCESS) {
  3054. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
  3055. TRACE_RET(chip, TRANSPORT_FAILED);
  3056. }
  3057. sd_card->last_rsp_type = rsp_type;
  3058. retval = sd_switch_clock(chip);
  3059. if (retval != STATUS_SUCCESS)
  3060. TRACE_RET(chip, TRANSPORT_FAILED);
  3061. #ifdef SUPPORT_SD_LOCK
  3062. if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
  3063. if (CHK_MMC_8BIT(sd_card)) {
  3064. retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
  3065. SD_BUS_WIDTH_8);
  3066. if (retval != STATUS_SUCCESS)
  3067. TRACE_RET(chip, TRANSPORT_FAILED);
  3068. } else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) {
  3069. retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
  3070. SD_BUS_WIDTH_4);
  3071. if (retval != STATUS_SUCCESS)
  3072. TRACE_RET(chip, TRANSPORT_FAILED);
  3073. }
  3074. }
  3075. #else
  3076. retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
  3077. if (retval != STATUS_SUCCESS)
  3078. TRACE_RET(chip, TRANSPORT_FAILED);
  3079. #endif
  3080. if (standby) {
  3081. retval = sd_select_card(chip, 0);
  3082. if (retval != STATUS_SUCCESS)
  3083. TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
  3084. }
  3085. if (acmd) {
  3086. retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD,
  3087. sd_card->sd_addr,
  3088. SD_RSP_TYPE_R1, NULL, 0, 0);
  3089. if (retval != STATUS_SUCCESS)
  3090. TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
  3091. }
  3092. retval = ext_sd_send_cmd_get_rsp(chip, cmd_idx, arg, rsp_type,
  3093. sd_card->rsp, rsp_len, 0);
  3094. if (retval != STATUS_SUCCESS)
  3095. TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
  3096. if (standby) {
  3097. retval = sd_select_card(chip, 1);
  3098. if (retval != STATUS_SUCCESS)
  3099. TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
  3100. }
  3101. #ifdef SUPPORT_SD_LOCK
  3102. retval = sd_update_lock_status(chip);
  3103. if (retval != STATUS_SUCCESS)
  3104. TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
  3105. #endif
  3106. scsi_set_resid(srb, 0);
  3107. return TRANSPORT_GOOD;
  3108. SD_Execute_Cmd_Failed:
  3109. sd_card->pre_cmd_err = 1;
  3110. set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
  3111. release_sd_card(chip);
  3112. do_reset_sd_card(chip);
  3113. if (!(chip->card_ready & SD_CARD))
  3114. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
  3115. TRACE_RET(chip, TRANSPORT_FAILED);
  3116. }
  3117. int sd_execute_read_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
  3118. {
  3119. struct sd_info *sd_card = &(chip->sd_card);
  3120. unsigned int lun = SCSI_LUN(srb);
  3121. int retval, rsp_len, i;
  3122. int cmd13_checkbit = 0, read_err = 0;
  3123. u8 cmd_idx, rsp_type, bus_width;
  3124. u8 send_cmd12 = 0, standby = 0, acmd = 0;
  3125. u32 data_len;
  3126. if (!sd_card->sd_pass_thru_en) {
  3127. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
  3128. TRACE_RET(chip, TRANSPORT_FAILED);
  3129. }
  3130. if (sd_card->pre_cmd_err) {
  3131. sd_card->pre_cmd_err = 0;
  3132. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
  3133. TRACE_RET(chip, TRANSPORT_FAILED);
  3134. }
  3135. retval = sd_switch_clock(chip);
  3136. if (retval != STATUS_SUCCESS)
  3137. TRACE_RET(chip, TRANSPORT_FAILED);
  3138. cmd_idx = srb->cmnd[2] & 0x3F;
  3139. if (srb->cmnd[1] & 0x04)
  3140. send_cmd12 = 1;
  3141. if (srb->cmnd[1] & 0x02)
  3142. standby = 1;
  3143. if (srb->cmnd[1] & 0x01)
  3144. acmd = 1;
  3145. data_len = ((u32)srb->cmnd[7] << 16) | ((u32)srb->cmnd[8]
  3146. << 8) | srb->cmnd[9];
  3147. retval = get_rsp_type(srb, &rsp_type, &rsp_len);
  3148. if (retval != STATUS_SUCCESS) {
  3149. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
  3150. TRACE_RET(chip, TRANSPORT_FAILED);
  3151. }
  3152. sd_card->last_rsp_type = rsp_type;
  3153. retval = sd_switch_clock(chip);
  3154. if (retval != STATUS_SUCCESS)
  3155. TRACE_RET(chip, TRANSPORT_FAILED);
  3156. #ifdef SUPPORT_SD_LOCK
  3157. if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
  3158. if (CHK_MMC_8BIT(sd_card))
  3159. bus_width = SD_BUS_WIDTH_8;
  3160. else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card))
  3161. bus_width = SD_BUS_WIDTH_4;
  3162. else
  3163. bus_width = SD_BUS_WIDTH_1;
  3164. } else {
  3165. bus_width = SD_BUS_WIDTH_4;
  3166. }
  3167. dev_dbg(rtsx_dev(chip), "bus_width = %d\n", bus_width);
  3168. #else
  3169. bus_width = SD_BUS_WIDTH_4;
  3170. #endif
  3171. if (data_len < 512) {
  3172. retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, data_len,
  3173. SD_RSP_TYPE_R1, NULL, 0, 0);
  3174. if (retval != STATUS_SUCCESS)
  3175. TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
  3176. }
  3177. if (standby) {
  3178. retval = sd_select_card(chip, 0);
  3179. if (retval != STATUS_SUCCESS)
  3180. TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
  3181. }
  3182. if (acmd) {
  3183. retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD,
  3184. sd_card->sd_addr,
  3185. SD_RSP_TYPE_R1, NULL, 0, 0);
  3186. if (retval != STATUS_SUCCESS)
  3187. TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
  3188. }
  3189. if (data_len <= 512) {
  3190. int min_len;
  3191. u8 *buf;
  3192. u16 byte_cnt, blk_cnt;
  3193. u8 cmd[5];
  3194. byte_cnt = ((u16)(srb->cmnd[8] & 0x03) << 8) | srb->cmnd[9];
  3195. blk_cnt = 1;
  3196. cmd[0] = 0x40 | cmd_idx;
  3197. cmd[1] = srb->cmnd[3];
  3198. cmd[2] = srb->cmnd[4];
  3199. cmd[3] = srb->cmnd[5];
  3200. cmd[4] = srb->cmnd[6];
  3201. buf = kmalloc(data_len, GFP_KERNEL);
  3202. if (buf == NULL)
  3203. TRACE_RET(chip, TRANSPORT_ERROR);
  3204. retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, byte_cnt,
  3205. blk_cnt, bus_width, buf, data_len, 2000);
  3206. if (retval != STATUS_SUCCESS) {
  3207. read_err = 1;
  3208. kfree(buf);
  3209. rtsx_clear_sd_error(chip);
  3210. TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
  3211. }
  3212. min_len = min(data_len, scsi_bufflen(srb));
  3213. rtsx_stor_set_xfer_buf(buf, min_len, srb);
  3214. kfree(buf);
  3215. } else if (!(data_len & 0x1FF)) {
  3216. rtsx_init_cmd(chip);
  3217. trans_dma_enable(DMA_FROM_DEVICE, chip, data_len, DMA_512);
  3218. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
  3219. 0x02);
  3220. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
  3221. 0x00);
  3222. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H,
  3223. 0xFF, (srb->cmnd[7] & 0xFE) >> 1);
  3224. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L,
  3225. 0xFF, (u8)((data_len & 0x0001FE00) >> 9));
  3226. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF,
  3227. 0x40 | cmd_idx);
  3228. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF,
  3229. srb->cmnd[3]);
  3230. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF,
  3231. srb->cmnd[4]);
  3232. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF,
  3233. srb->cmnd[5]);
  3234. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF,
  3235. srb->cmnd[6]);
  3236. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width);
  3237. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type);
  3238. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER,
  3239. 0xFF, SD_TM_AUTO_READ_2 | SD_TRANSFER_START);
  3240. rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
  3241. SD_TRANSFER_END, SD_TRANSFER_END);
  3242. rtsx_send_cmd_no_wait(chip);
  3243. retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb),
  3244. scsi_bufflen(srb), scsi_sg_count(srb),
  3245. DMA_FROM_DEVICE, 10000);
  3246. if (retval < 0) {
  3247. read_err = 1;
  3248. rtsx_clear_sd_error(chip);
  3249. TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
  3250. }
  3251. } else {
  3252. TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
  3253. }
  3254. retval = ext_sd_get_rsp(chip, rsp_len, sd_card->rsp, rsp_type);
  3255. if (retval != STATUS_SUCCESS)
  3256. TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
  3257. if (standby) {
  3258. retval = sd_select_card(chip, 1);
  3259. if (retval != STATUS_SUCCESS)
  3260. TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
  3261. }
  3262. if (send_cmd12) {
  3263. retval = ext_sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION,
  3264. 0, SD_RSP_TYPE_R1b, NULL, 0, 0);
  3265. if (retval != STATUS_SUCCESS)
  3266. TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
  3267. }
  3268. if (data_len < 512) {
  3269. retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200,
  3270. SD_RSP_TYPE_R1, NULL, 0, 0);
  3271. if (retval != STATUS_SUCCESS)
  3272. TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
  3273. retval = rtsx_write_register(chip, SD_BYTE_CNT_H, 0xFF, 0x02);
  3274. if (retval != STATUS_SUCCESS)
  3275. TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
  3276. retval = rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
  3277. if (retval != STATUS_SUCCESS)
  3278. TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
  3279. }
  3280. if ((srb->cmnd[1] & 0x02) || (srb->cmnd[1] & 0x04))
  3281. cmd13_checkbit = 1;
  3282. for (i = 0; i < 3; i++) {
  3283. retval = ext_sd_send_cmd_get_rsp(chip, SEND_STATUS,
  3284. sd_card->sd_addr,
  3285. SD_RSP_TYPE_R1, NULL, 0,
  3286. cmd13_checkbit);
  3287. if (retval == STATUS_SUCCESS)
  3288. break;
  3289. }
  3290. if (retval != STATUS_SUCCESS)
  3291. TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
  3292. scsi_set_resid(srb, 0);
  3293. return TRANSPORT_GOOD;
  3294. SD_Execute_Read_Cmd_Failed:
  3295. sd_card->pre_cmd_err = 1;
  3296. set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
  3297. if (read_err)
  3298. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
  3299. release_sd_card(chip);
  3300. do_reset_sd_card(chip);
  3301. if (!(chip->card_ready & SD_CARD))
  3302. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
  3303. TRACE_RET(chip, TRANSPORT_FAILED);
  3304. }
  3305. int sd_execute_write_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
  3306. {
  3307. struct sd_info *sd_card = &(chip->sd_card);
  3308. unsigned int lun = SCSI_LUN(srb);
  3309. int retval, rsp_len, i;
  3310. int cmd13_checkbit = 0, write_err = 0;
  3311. u8 cmd_idx, rsp_type;
  3312. u8 send_cmd12 = 0, standby = 0, acmd = 0;
  3313. u32 data_len, arg;
  3314. #ifdef SUPPORT_SD_LOCK
  3315. int lock_cmd_fail = 0;
  3316. u8 sd_lock_state = 0;
  3317. u8 lock_cmd_type = 0;
  3318. #endif
  3319. if (!sd_card->sd_pass_thru_en) {
  3320. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
  3321. TRACE_RET(chip, TRANSPORT_FAILED);
  3322. }
  3323. if (sd_card->pre_cmd_err) {
  3324. sd_card->pre_cmd_err = 0;
  3325. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
  3326. TRACE_RET(chip, TRANSPORT_FAILED);
  3327. }
  3328. retval = sd_switch_clock(chip);
  3329. if (retval != STATUS_SUCCESS)
  3330. TRACE_RET(chip, TRANSPORT_FAILED);
  3331. cmd_idx = srb->cmnd[2] & 0x3F;
  3332. if (srb->cmnd[1] & 0x04)
  3333. send_cmd12 = 1;
  3334. if (srb->cmnd[1] & 0x02)
  3335. standby = 1;
  3336. if (srb->cmnd[1] & 0x01)
  3337. acmd = 1;
  3338. data_len = ((u32)srb->cmnd[7] << 16) | ((u32)srb->cmnd[8]
  3339. << 8) | srb->cmnd[9];
  3340. arg = ((u32)srb->cmnd[3] << 24) | ((u32)srb->cmnd[4] << 16) |
  3341. ((u32)srb->cmnd[5] << 8) | srb->cmnd[6];
  3342. #ifdef SUPPORT_SD_LOCK
  3343. if (cmd_idx == LOCK_UNLOCK) {
  3344. sd_lock_state = sd_card->sd_lock_status;
  3345. sd_lock_state &= SD_LOCKED;
  3346. }
  3347. #endif
  3348. retval = get_rsp_type(srb, &rsp_type, &rsp_len);
  3349. if (retval != STATUS_SUCCESS) {
  3350. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
  3351. TRACE_RET(chip, TRANSPORT_FAILED);
  3352. }
  3353. sd_card->last_rsp_type = rsp_type;
  3354. retval = sd_switch_clock(chip);
  3355. if (retval != STATUS_SUCCESS)
  3356. TRACE_RET(chip, TRANSPORT_FAILED);
  3357. #ifdef SUPPORT_SD_LOCK
  3358. if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
  3359. if (CHK_MMC_8BIT(sd_card)) {
  3360. retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
  3361. SD_BUS_WIDTH_8);
  3362. if (retval != STATUS_SUCCESS)
  3363. TRACE_RET(chip, TRANSPORT_FAILED);
  3364. } else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) {
  3365. retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
  3366. SD_BUS_WIDTH_4);
  3367. if (retval != STATUS_SUCCESS)
  3368. TRACE_RET(chip, TRANSPORT_FAILED);
  3369. }
  3370. }
  3371. #else
  3372. retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
  3373. if (retval != STATUS_SUCCESS)
  3374. TRACE_RET(chip, TRANSPORT_FAILED);
  3375. #endif
  3376. if (data_len < 512) {
  3377. retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, data_len,
  3378. SD_RSP_TYPE_R1, NULL, 0, 0);
  3379. if (retval != STATUS_SUCCESS)
  3380. TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
  3381. }
  3382. if (standby) {
  3383. retval = sd_select_card(chip, 0);
  3384. if (retval != STATUS_SUCCESS)
  3385. TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
  3386. }
  3387. if (acmd) {
  3388. retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD,
  3389. sd_card->sd_addr,
  3390. SD_RSP_TYPE_R1, NULL, 0, 0);
  3391. if (retval != STATUS_SUCCESS)
  3392. TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
  3393. }
  3394. retval = ext_sd_send_cmd_get_rsp(chip, cmd_idx, arg, rsp_type,
  3395. sd_card->rsp, rsp_len, 0);
  3396. if (retval != STATUS_SUCCESS)
  3397. TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
  3398. if (data_len <= 512) {
  3399. u16 i;
  3400. u8 *buf;
  3401. buf = kmalloc(data_len, GFP_KERNEL);
  3402. if (buf == NULL)
  3403. TRACE_RET(chip, TRANSPORT_ERROR);
  3404. rtsx_stor_get_xfer_buf(buf, data_len, srb);
  3405. #ifdef SUPPORT_SD_LOCK
  3406. if (cmd_idx == LOCK_UNLOCK)
  3407. lock_cmd_type = buf[0] & 0x0F;
  3408. #endif
  3409. if (data_len > 256) {
  3410. rtsx_init_cmd(chip);
  3411. for (i = 0; i < 256; i++) {
  3412. rtsx_add_cmd(chip, WRITE_REG_CMD,
  3413. PPBUF_BASE2 + i, 0xFF, buf[i]);
  3414. }
  3415. retval = rtsx_send_cmd(chip, 0, 250);
  3416. if (retval != STATUS_SUCCESS) {
  3417. kfree(buf);
  3418. TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
  3419. }
  3420. rtsx_init_cmd(chip);
  3421. for (i = 256; i < data_len; i++) {
  3422. rtsx_add_cmd(chip, WRITE_REG_CMD,
  3423. PPBUF_BASE2 + i, 0xFF, buf[i]);
  3424. }
  3425. retval = rtsx_send_cmd(chip, 0, 250);
  3426. if (retval != STATUS_SUCCESS) {
  3427. kfree(buf);
  3428. TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
  3429. }
  3430. } else {
  3431. rtsx_init_cmd(chip);
  3432. for (i = 0; i < data_len; i++) {
  3433. rtsx_add_cmd(chip, WRITE_REG_CMD,
  3434. PPBUF_BASE2 + i, 0xFF, buf[i]);
  3435. }
  3436. retval = rtsx_send_cmd(chip, 0, 250);
  3437. if (retval != STATUS_SUCCESS) {
  3438. kfree(buf);
  3439. TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
  3440. }
  3441. }
  3442. kfree(buf);
  3443. rtsx_init_cmd(chip);
  3444. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
  3445. srb->cmnd[8] & 0x03);
  3446. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
  3447. srb->cmnd[9]);
  3448. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF,
  3449. 0x00);
  3450. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF,
  3451. 0x01);
  3452. rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
  3453. PINGPONG_BUFFER);
  3454. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
  3455. SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
  3456. rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
  3457. SD_TRANSFER_END, SD_TRANSFER_END);
  3458. retval = rtsx_send_cmd(chip, SD_CARD, 250);
  3459. } else if (!(data_len & 0x1FF)) {
  3460. rtsx_init_cmd(chip);
  3461. trans_dma_enable(DMA_TO_DEVICE, chip, data_len, DMA_512);
  3462. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
  3463. 0x02);
  3464. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
  3465. 0x00);
  3466. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H,
  3467. 0xFF, (srb->cmnd[7] & 0xFE) >> 1);
  3468. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L,
  3469. 0xFF, (u8)((data_len & 0x0001FE00) >> 9));
  3470. rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
  3471. SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
  3472. rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
  3473. SD_TRANSFER_END, SD_TRANSFER_END);
  3474. rtsx_send_cmd_no_wait(chip);
  3475. retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb),
  3476. scsi_bufflen(srb), scsi_sg_count(srb),
  3477. DMA_TO_DEVICE, 10000);
  3478. } else {
  3479. TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
  3480. }
  3481. if (retval < 0) {
  3482. write_err = 1;
  3483. rtsx_clear_sd_error(chip);
  3484. TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
  3485. }
  3486. #ifdef SUPPORT_SD_LOCK
  3487. if (cmd_idx == LOCK_UNLOCK) {
  3488. if (lock_cmd_type == SD_ERASE) {
  3489. sd_card->sd_erase_status = SD_UNDER_ERASING;
  3490. scsi_set_resid(srb, 0);
  3491. return TRANSPORT_GOOD;
  3492. }
  3493. rtsx_init_cmd(chip);
  3494. rtsx_add_cmd(chip, CHECK_REG_CMD, 0xFD30, 0x02, 0x02);
  3495. rtsx_send_cmd(chip, SD_CARD, 250);
  3496. retval = sd_update_lock_status(chip);
  3497. if (retval != STATUS_SUCCESS) {
  3498. dev_dbg(rtsx_dev(chip), "Lock command fail!\n");
  3499. lock_cmd_fail = 1;
  3500. }
  3501. }
  3502. #endif /* SUPPORT_SD_LOCK */
  3503. if (standby) {
  3504. retval = sd_select_card(chip, 1);
  3505. if (retval != STATUS_SUCCESS)
  3506. TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
  3507. }
  3508. if (send_cmd12) {
  3509. retval = ext_sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION,
  3510. 0, SD_RSP_TYPE_R1b, NULL, 0, 0);
  3511. if (retval != STATUS_SUCCESS)
  3512. TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
  3513. }
  3514. if (data_len < 512) {
  3515. retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200,
  3516. SD_RSP_TYPE_R1, NULL, 0, 0);
  3517. if (retval != STATUS_SUCCESS)
  3518. TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
  3519. retval = rtsx_write_register(chip, SD_BYTE_CNT_H, 0xFF, 0x02);
  3520. if (retval != STATUS_SUCCESS)
  3521. TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
  3522. rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
  3523. if (retval != STATUS_SUCCESS)
  3524. TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
  3525. }
  3526. if ((srb->cmnd[1] & 0x02) || (srb->cmnd[1] & 0x04))
  3527. cmd13_checkbit = 1;
  3528. for (i = 0; i < 3; i++) {
  3529. retval = ext_sd_send_cmd_get_rsp(chip, SEND_STATUS,
  3530. sd_card->sd_addr,
  3531. SD_RSP_TYPE_R1, NULL, 0,
  3532. cmd13_checkbit);
  3533. if (retval == STATUS_SUCCESS)
  3534. break;
  3535. }
  3536. if (retval != STATUS_SUCCESS)
  3537. TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
  3538. #ifdef SUPPORT_SD_LOCK
  3539. if (cmd_idx == LOCK_UNLOCK) {
  3540. if (!lock_cmd_fail) {
  3541. dev_dbg(rtsx_dev(chip), "lock_cmd_type = 0x%x\n",
  3542. lock_cmd_type);
  3543. if (lock_cmd_type & SD_CLR_PWD)
  3544. sd_card->sd_lock_status &= ~SD_PWD_EXIST;
  3545. if (lock_cmd_type & SD_SET_PWD)
  3546. sd_card->sd_lock_status |= SD_PWD_EXIST;
  3547. }
  3548. dev_dbg(rtsx_dev(chip), "sd_lock_state = 0x%x, sd_card->sd_lock_status = 0x%x\n",
  3549. sd_lock_state, sd_card->sd_lock_status);
  3550. if (sd_lock_state ^ (sd_card->sd_lock_status & SD_LOCKED)) {
  3551. sd_card->sd_lock_notify = 1;
  3552. if (sd_lock_state) {
  3553. if (sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) {
  3554. sd_card->sd_lock_status |= (
  3555. SD_UNLOCK_POW_ON | SD_SDR_RST);
  3556. if (CHK_SD(sd_card)) {
  3557. retval = reset_sd(chip);
  3558. if (retval != STATUS_SUCCESS) {
  3559. sd_card->sd_lock_status &= ~(SD_UNLOCK_POW_ON | SD_SDR_RST);
  3560. TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
  3561. }
  3562. }
  3563. sd_card->sd_lock_status &= ~(SD_UNLOCK_POW_ON | SD_SDR_RST);
  3564. }
  3565. }
  3566. }
  3567. }
  3568. if (lock_cmd_fail) {
  3569. scsi_set_resid(srb, 0);
  3570. set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
  3571. TRACE_RET(chip, TRANSPORT_FAILED);
  3572. }
  3573. #endif /* SUPPORT_SD_LOCK */
  3574. scsi_set_resid(srb, 0);
  3575. return TRANSPORT_GOOD;
  3576. SD_Execute_Write_Cmd_Failed:
  3577. sd_card->pre_cmd_err = 1;
  3578. set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
  3579. if (write_err)
  3580. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
  3581. release_sd_card(chip);
  3582. do_reset_sd_card(chip);
  3583. if (!(chip->card_ready & SD_CARD))
  3584. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
  3585. TRACE_RET(chip, TRANSPORT_FAILED);
  3586. }
  3587. int sd_get_cmd_rsp(struct scsi_cmnd *srb, struct rtsx_chip *chip)
  3588. {
  3589. struct sd_info *sd_card = &(chip->sd_card);
  3590. unsigned int lun = SCSI_LUN(srb);
  3591. int count;
  3592. u16 data_len;
  3593. if (!sd_card->sd_pass_thru_en) {
  3594. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
  3595. TRACE_RET(chip, TRANSPORT_FAILED);
  3596. }
  3597. if (sd_card->pre_cmd_err) {
  3598. sd_card->pre_cmd_err = 0;
  3599. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
  3600. TRACE_RET(chip, TRANSPORT_FAILED);
  3601. }
  3602. data_len = ((u16)srb->cmnd[7] << 8) | srb->cmnd[8];
  3603. if (sd_card->last_rsp_type == SD_RSP_TYPE_R0) {
  3604. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
  3605. TRACE_RET(chip, TRANSPORT_FAILED);
  3606. } else if (sd_card->last_rsp_type == SD_RSP_TYPE_R2) {
  3607. count = (data_len < 17) ? data_len : 17;
  3608. } else {
  3609. count = (data_len < 6) ? data_len : 6;
  3610. }
  3611. rtsx_stor_set_xfer_buf(sd_card->rsp, count, srb);
  3612. dev_dbg(rtsx_dev(chip), "Response length: %d\n", data_len);
  3613. dev_dbg(rtsx_dev(chip), "Response: 0x%x 0x%x 0x%x 0x%x\n",
  3614. sd_card->rsp[0], sd_card->rsp[1],
  3615. sd_card->rsp[2], sd_card->rsp[3]);
  3616. scsi_set_resid(srb, 0);
  3617. return TRANSPORT_GOOD;
  3618. }
  3619. int sd_hw_rst(struct scsi_cmnd *srb, struct rtsx_chip *chip)
  3620. {
  3621. struct sd_info *sd_card = &(chip->sd_card);
  3622. unsigned int lun = SCSI_LUN(srb);
  3623. int retval;
  3624. if (!sd_card->sd_pass_thru_en) {
  3625. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
  3626. TRACE_RET(chip, TRANSPORT_FAILED);
  3627. }
  3628. if (sd_card->pre_cmd_err) {
  3629. sd_card->pre_cmd_err = 0;
  3630. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
  3631. TRACE_RET(chip, TRANSPORT_FAILED);
  3632. }
  3633. if ((0x53 != srb->cmnd[2]) || (0x44 != srb->cmnd[3]) ||
  3634. (0x20 != srb->cmnd[4]) || (0x43 != srb->cmnd[5]) ||
  3635. (0x61 != srb->cmnd[6]) || (0x72 != srb->cmnd[7]) ||
  3636. (0x64 != srb->cmnd[8])) {
  3637. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
  3638. TRACE_RET(chip, TRANSPORT_FAILED);
  3639. }
  3640. switch (srb->cmnd[1] & 0x0F) {
  3641. case 0:
  3642. #ifdef SUPPORT_SD_LOCK
  3643. if (0x64 == srb->cmnd[9])
  3644. sd_card->sd_lock_status |= SD_SDR_RST;
  3645. #endif
  3646. retval = reset_sd_card(chip);
  3647. if (retval != STATUS_SUCCESS) {
  3648. #ifdef SUPPORT_SD_LOCK
  3649. sd_card->sd_lock_status &= ~SD_SDR_RST;
  3650. #endif
  3651. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
  3652. sd_card->pre_cmd_err = 1;
  3653. TRACE_RET(chip, TRANSPORT_FAILED);
  3654. }
  3655. #ifdef SUPPORT_SD_LOCK
  3656. sd_card->sd_lock_status &= ~SD_SDR_RST;
  3657. #endif
  3658. break;
  3659. case 1:
  3660. retval = soft_reset_sd_card(chip);
  3661. if (retval != STATUS_SUCCESS) {
  3662. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
  3663. sd_card->pre_cmd_err = 1;
  3664. TRACE_RET(chip, TRANSPORT_FAILED);
  3665. }
  3666. break;
  3667. default:
  3668. set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
  3669. TRACE_RET(chip, TRANSPORT_FAILED);
  3670. }
  3671. scsi_set_resid(srb, 0);
  3672. return TRANSPORT_GOOD;
  3673. }
  3674. #endif
  3675. void sd_cleanup_work(struct rtsx_chip *chip)
  3676. {
  3677. struct sd_info *sd_card = &(chip->sd_card);
  3678. if (sd_card->seq_mode) {
  3679. dev_dbg(rtsx_dev(chip), "SD: stop transmission\n");
  3680. sd_stop_seq_mode(chip);
  3681. sd_card->cleanup_counter = 0;
  3682. }
  3683. }
  3684. int sd_power_off_card3v3(struct rtsx_chip *chip)
  3685. {
  3686. int retval;
  3687. retval = disable_card_clock(chip, SD_CARD);
  3688. if (retval != STATUS_SUCCESS)
  3689. TRACE_RET(chip, STATUS_FAIL);
  3690. RTSX_WRITE_REG(chip, CARD_OE, SD_OUTPUT_EN, 0);
  3691. if (!chip->ft2_fast_mode) {
  3692. retval = card_power_off(chip, SD_CARD);
  3693. if (retval != STATUS_SUCCESS)
  3694. TRACE_RET(chip, STATUS_FAIL);
  3695. wait_timeout(50);
  3696. }
  3697. if (chip->asic_code) {
  3698. retval = sd_pull_ctl_disable(chip);
  3699. if (retval != STATUS_SUCCESS)
  3700. TRACE_RET(chip, STATUS_FAIL);
  3701. } else {
  3702. RTSX_WRITE_REG(chip, FPGA_PULL_CTL,
  3703. FPGA_SD_PULL_CTL_BIT | 0x20, FPGA_SD_PULL_CTL_BIT);
  3704. }
  3705. return STATUS_SUCCESS;
  3706. }
  3707. int release_sd_card(struct rtsx_chip *chip)
  3708. {
  3709. struct sd_info *sd_card = &(chip->sd_card);
  3710. int retval;
  3711. chip->card_ready &= ~SD_CARD;
  3712. chip->card_fail &= ~SD_CARD;
  3713. chip->card_wp &= ~SD_CARD;
  3714. chip->sd_io = 0;
  3715. chip->sd_int = 0;
  3716. #ifdef SUPPORT_SD_LOCK
  3717. sd_card->sd_lock_status = 0;
  3718. sd_card->sd_erase_status = 0;
  3719. #endif
  3720. memset(sd_card->raw_csd, 0, 16);
  3721. memset(sd_card->raw_scr, 0, 8);
  3722. retval = sd_power_off_card3v3(chip);
  3723. if (retval != STATUS_SUCCESS)
  3724. TRACE_RET(chip, STATUS_FAIL);
  3725. return STATUS_SUCCESS;
  3726. }