)]}'
{"id":"openocd~master~I80c0632da686d49856fdbf9e05d908846dd44316","project":"openocd","branch":"master","hashtags":[],"change_id":"I80c0632da686d49856fdbf9e05d908846dd44316","subject":"mdr32fx: support for Milandr\u0027s MDR32Fx internal flash memory","status":"MERGED","created":"2013-07-29 13:39:19.000000000","updated":"2013-10-27 12:38:51.000000000","submitted":"2013-08-07 21:02:51.000000000","submitter":{"_account_id":1000000,"name":"Spencer Oliver","email":"spen@spen-soft.co.uk","username":"ntfreak"},"total_comment_count":0,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"907f7e6f6b84acd2f8c0c7994d9e53a4b6372480","_number":1532,"owner":{"_account_id":1000160,"name":"Paul Fertser","email":"fercerpav@gmail.com","username":"pfertser"},"actions":{},"labels":{"Verified":{"approved":{"_account_id":1000014,"name":"jenkins","username":"jenkins","tags":["SERVICE_USER"]},"all":[{"value":0,"date":"2013-08-07 21:02:51.000000000","permitted_voting_range":{"min":0,"max":1},"_account_id":1000000,"name":"Spencer Oliver","email":"spen@spen-soft.co.uk","username":"ntfreak"},{"value":0,"_account_id":1000554,"name":"demokmail","email":"demokmail@gmail.com","username":"eldar"},{"value":1,"date":"2013-08-07 21:02:51.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":1000014,"name":"jenkins","username":"jenkins","tags":["SERVICE_USER"]}],"values":{"-1":"Fails"," 0":"No score","+1":"Verified"},"description":"","default_value":0},"Code-Review":{"approved":{"_account_id":1000000,"name":"Spencer Oliver","email":"spen@spen-soft.co.uk","username":"ntfreak"},"all":[{"value":2,"date":"2013-08-07 21:02:51.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":1000000,"name":"Spencer Oliver","email":"spen@spen-soft.co.uk","username":"ntfreak"},{"value":0,"date":"2013-10-27 12:38:51.000000000","post_submit":true,"permitted_voting_range":{"min":0,"max":1},"_account_id":1000554,"name":"demokmail","email":"demokmail@gmail.com","username":"eldar"},{"value":0,"date":"2013-08-07 21:02:51.000000000","permitted_voting_range":{"min":0,"max":1},"_account_id":1000014,"name":"jenkins","username":"jenkins","tags":["SERVICE_USER"]}],"values":{"-2":"This shall not be merged","-1":"I would prefer this is not merged as is"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me, approved"},"description":"","default_value":0}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":1000000,"name":"Spencer Oliver","email":"spen@spen-soft.co.uk","username":"ntfreak"},{"_account_id":1000014,"name":"jenkins","username":"jenkins","tags":["SERVICE_USER"]},{"_account_id":1000554,"name":"demokmail","email":"demokmail@gmail.com","username":"eldar"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2013-07-31 10:32:27.000000000","updated_by":{"_account_id":1000014,"name":"jenkins","username":"jenkins","tags":["SERVICE_USER"]},"reviewer":{"_account_id":1000014,"name":"jenkins","username":"jenkins","tags":["SERVICE_USER"]},"state":"REVIEWER"},{"updated":"2013-08-05 20:14:55.000000000","updated_by":{"_account_id":1000000,"name":"Spencer Oliver","email":"spen@spen-soft.co.uk","username":"ntfreak"},"reviewer":{"_account_id":1000000,"name":"Spencer Oliver","email":"spen@spen-soft.co.uk","username":"ntfreak"},"state":"REVIEWER"},{"updated":"2013-10-27 12:38:51.000000000","updated_by":{"_account_id":1000554,"name":"demokmail","email":"demokmail@gmail.com","username":"eldar"},"reviewer":{"_account_id":1000554,"name":"demokmail","email":"demokmail@gmail.com","username":"eldar"},"state":"REVIEWER"}],"messages":[{"id":"917cdb1a06e8f35e6a06b518abd0a94d17eb3d0f","author":{"_account_id":1000014,"name":"jenkins","username":"jenkins","tags":["SERVICE_USER"]},"real_author":{"_account_id":1000014,"name":"jenkins","username":"jenkins","tags":["SERVICE_USER"]},"date":"2013-07-29 13:42:15.000000000","message":"Patch Set 1: Fails\n\nBuild Failed \n\nhttp://openocd.zylin.com/jenkins/job/openocd-gerrit/3193/ : FAILURE\n\nhttp://openocd.zylin.com/jenkins/job/openocd-gerrit-build/2643/ : FAILURE","accounts_in_message":[],"_revision_number":1},{"id":"47f76daf1270ddb8c211d07d5e24519d55dea8a6","author":{"_account_id":1000160,"name":"Paul Fertser","email":"fercerpav@gmail.com","username":"pfertser"},"real_author":{"_account_id":1000160,"name":"Paul Fertser","email":"fercerpav@gmail.com","username":"pfertser"},"date":"2013-07-29 13:47:34.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"4871c12d06155bac73bb657f3aabbfe66bc59372","author":{"_account_id":1000014,"name":"jenkins","username":"jenkins","tags":["SERVICE_USER"]},"real_author":{"_account_id":1000014,"name":"jenkins","username":"jenkins","tags":["SERVICE_USER"]},"date":"2013-07-29 13:57:32.000000000","message":"Patch Set 2: Verified\n\nBuild Successful \n\nhttp://openocd.zylin.com/jenkins/job/openocd-gerrit/3194/ : SUCCESS\n\nhttp://openocd.zylin.com/jenkins/job/openocd-gerrit-build/2644/ : SUCCESS","accounts_in_message":[],"_revision_number":2},{"id":"de783f5b4905b03d6008f376fd92076b9590adf4","author":{"_account_id":1000160,"name":"Paul Fertser","email":"fercerpav@gmail.com","username":"pfertser"},"real_author":{"_account_id":1000160,"name":"Paul Fertser","email":"fercerpav@gmail.com","username":"pfertser"},"date":"2013-07-31 09:54:14.000000000","message":"Uploaded patch set 3.","accounts_in_message":[],"_revision_number":3},{"id":"6f95074b7014511e7946714de63069e7b5a308f7","author":{"_account_id":1000014,"name":"jenkins","username":"jenkins","tags":["SERVICE_USER"]},"real_author":{"_account_id":1000014,"name":"jenkins","username":"jenkins","tags":["SERVICE_USER"]},"date":"2013-07-31 09:54:47.000000000","message":"Patch Set 3: Fails\n\nBuild Failed \n\nhttp://openocd.zylin.com/jenkins/job/openocd-gerrit/3200/ : FAILURE\n\nhttp://openocd.zylin.com/jenkins/job/openocd-gerrit-build/2650/ : FAILURE","accounts_in_message":[],"_revision_number":3},{"id":"6b13125efd5beb0dd31f6e83e7682f6891293be6","author":{"_account_id":1000160,"name":"Paul Fertser","email":"fercerpav@gmail.com","username":"pfertser"},"real_author":{"_account_id":1000160,"name":"Paul Fertser","email":"fercerpav@gmail.com","username":"pfertser"},"date":"2013-07-31 10:22:27.000000000","message":"Uploaded patch set 4.","accounts_in_message":[],"_revision_number":4},{"id":"8e9849ff1166ca2898512c8531b12cb60bf548d0","author":{"_account_id":1000014,"name":"jenkins","username":"jenkins","tags":["SERVICE_USER"]},"real_author":{"_account_id":1000014,"name":"jenkins","username":"jenkins","tags":["SERVICE_USER"]},"date":"2013-07-31 10:32:27.000000000","message":"Patch Set 4: Verified\n\nBuild Successful \n\nhttp://openocd.zylin.com/jenkins/job/openocd-gerrit/3201/ : SUCCESS\n\nhttp://openocd.zylin.com/jenkins/job/openocd-gerrit-build/2651/ : SUCCESS","accounts_in_message":[],"_revision_number":4},{"id":"1f1a0582e1196f97037eb2f9ca21dd4b8acf71bf","author":{"_account_id":1000000,"name":"Spencer Oliver","email":"spen@spen-soft.co.uk","username":"ntfreak"},"real_author":{"_account_id":1000000,"name":"Spencer Oliver","email":"spen@spen-soft.co.uk","username":"ntfreak"},"date":"2013-08-05 20:14:55.000000000","message":"Patch Set 4: Looks good to me, approved\n\n","accounts_in_message":[],"_revision_number":4},{"id":"3075b532719b535f0216b0d91759734d670756b1","author":{"_account_id":1000000,"name":"Spencer Oliver","email":"spen@spen-soft.co.uk","username":"ntfreak"},"real_author":{"_account_id":1000000,"name":"Spencer Oliver","email":"spen@spen-soft.co.uk","username":"ntfreak"},"date":"2013-08-07 21:02:51.000000000","message":"Change has been successfully cherry-picked as fccc55225a7f874ee9d795286e9d92dc051b5b9d","accounts_in_message":[],"_revision_number":5}],"current_revision":"fccc55225a7f874ee9d795286e9d92dc051b5b9d","revisions":{"a5686f6df64f6b46642689d94e8d4b8de220ed69":{"kind":"REWORK","_number":4,"created":"2013-07-31 10:22:27.000000000","uploader":{"_account_id":1000160,"name":"Paul Fertser","email":"fercerpav@gmail.com","username":"pfertser"},"ref":"refs/changes/32/1532/4","fetch":{"anonymous http":{"url":"https://review.openocd.org/openocd","ref":"refs/changes/32/1532/4","commands":{"Branch":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/4 \u0026\u0026 git checkout -b change-1532 FETCH_HEAD","Checkout":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.openocd.org/openocd refs/changes/32/1532/4","Reset To":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/4 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"c658229f92612a7c3862b2e9ba1a8d6496a8be8a","subject":"target: fix halt and wait_halt timeout units"}],"author":{"name":"Paul Fertser","email":"fercerpav@gmail.com","date":"2013-07-29 13:22:07.000000000","tz":240},"committer":{"name":"Paul Fertser","email":"fercerpav@gmail.com","date":"2013-07-31 10:21:48.000000000","tz":240},"subject":"mdr32fx: support for Milandr\u0027s MDR32Fx internal flash memory","message":"mdr32fx: support for Milandr\u0027s MDR32Fx internal flash memory\n\nThis adds example config and flash driver for russian Cortex-M3\nmicrocontroller model.\n\nRun-time tested on MDR32F9Q2I evaluation board; the flash driver\nshould be compatible with MDR32F2x (Cortex-M0) too but I lack hardware\nto test.\n\nThere\u0027re no status bits at all, the datasheets specifies some delays\nfor flash operations instead. All being in \u003c100us range, they\u0027re hard\nto violate with JTAG, I hope. There\u0027re also no flash identification\nregisters so the flash size and type has to be hardcoded into the\nconfig.\n\nThe flashing is considerably complicated because the flash is split\ninto pages, and each page consists of 4 interleaved non-consecutive\n\"sectors\" (on MDR32F9 only, MDR32F2 is single-sectored), so the\nfastest way is to latch the page and sector address and then write\nonly the part that should go into the current page and current sector.\n\nPerformance testing results with adapter_khz 1000 and the chip running\non its default HSI 8MHz oscillator:\n\nWhen working area is specified, a target helper algorithm is used:\nwrote 131072 bytes from file testfile.bin in 3.698427s (34.609 KiB/s)\n\nThis can theoretically be sped up by ~1.4 times if the helper\nalgorithm is fed some kind of \"loader instructions stream\" to allow\nsector-by-sector writing.\n\nPure JTAG implementation (when target memory area is not available)\nflashes all the 128k memory in 49.5s.\n\nFlashing \"info\" memory region is also implemented, but due to the\noverlapping memory addresses (resulting in incorrect memory map\ncalculations for GDB) it can\u0027t be used at the same time, so OpenOCD\nneeds to be started this way: -c \"set IMEMORY true\" -f\ntarget/mdr32f9q2i.cfg\n\nIt also can\u0027t be read/verified because it\u0027s not memory-mapped anywhere\never, and OpenOCD NOR framework doesn\u0027t really allow to provide a\ncustom handler that would be used when verifying.\n\nChange-Id: I80c0632da686d49856fdbf9e05d908846dd44316\nSigned-off-by: Paul Fertser \u003cfercerpav@gmail.com\u003e\n"}},"fccc55225a7f874ee9d795286e9d92dc051b5b9d":{"kind":"REWORK","_number":5,"created":"2013-08-07 21:02:51.000000000","uploader":{"_account_id":1000000,"name":"Spencer Oliver","email":"spen@spen-soft.co.uk","username":"ntfreak"},"ref":"refs/changes/32/1532/5","fetch":{"anonymous http":{"url":"https://review.openocd.org/openocd","ref":"refs/changes/32/1532/5","commands":{"Branch":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/5 \u0026\u0026 git checkout -b change-1532 FETCH_HEAD","Checkout":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/5 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/5 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/5 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.openocd.org/openocd refs/changes/32/1532/5","Reset To":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/5 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"d998ea40f3a323cfbc7b80d9c9d5057fbc76c6a9","subject":"stlink: add SWO tracing support"}],"author":{"name":"Paul Fertser","email":"fercerpav@gmail.com","date":"2013-07-29 13:22:07.000000000","tz":240},"committer":{"name":"Spencer Oliver","email":"spen@spen-soft.co.uk","date":"2013-08-07 21:02:51.000000000","tz":0},"subject":"mdr32fx: support for Milandr\u0027s MDR32Fx internal flash memory","message":"mdr32fx: support for Milandr\u0027s MDR32Fx internal flash memory\n\nThis adds example config and flash driver for russian Cortex-M3\nmicrocontroller model.\n\nRun-time tested on MDR32F9Q2I evaluation board; the flash driver\nshould be compatible with MDR32F2x (Cortex-M0) too but I lack hardware\nto test.\n\nThere\u0027re no status bits at all, the datasheets specifies some delays\nfor flash operations instead. All being in \u003c100us range, they\u0027re hard\nto violate with JTAG, I hope. There\u0027re also no flash identification\nregisters so the flash size and type has to be hardcoded into the\nconfig.\n\nThe flashing is considerably complicated because the flash is split\ninto pages, and each page consists of 4 interleaved non-consecutive\n\"sectors\" (on MDR32F9 only, MDR32F2 is single-sectored), so the\nfastest way is to latch the page and sector address and then write\nonly the part that should go into the current page and current sector.\n\nPerformance testing results with adapter_khz 1000 and the chip running\non its default HSI 8MHz oscillator:\n\nWhen working area is specified, a target helper algorithm is used:\nwrote 131072 bytes from file testfile.bin in 3.698427s (34.609 KiB/s)\n\nThis can theoretically be sped up by ~1.4 times if the helper\nalgorithm is fed some kind of \"loader instructions stream\" to allow\nsector-by-sector writing.\n\nPure JTAG implementation (when target memory area is not available)\nflashes all the 128k memory in 49.5s.\n\nFlashing \"info\" memory region is also implemented, but due to the\noverlapping memory addresses (resulting in incorrect memory map\ncalculations for GDB) it can\u0027t be used at the same time, so OpenOCD\nneeds to be started this way: -c \"set IMEMORY true\" -f\ntarget/mdr32f9q2i.cfg\n\nIt also can\u0027t be read/verified because it\u0027s not memory-mapped anywhere\never, and OpenOCD NOR framework doesn\u0027t really allow to provide a\ncustom handler that would be used when verifying.\n\nChange-Id: I80c0632da686d49856fdbf9e05d908846dd44316\nSigned-off-by: Paul Fertser \u003cfercerpav@gmail.com\u003e\nReviewed-on: http://openocd.zylin.com/1532\nTested-by: jenkins\nReviewed-by: Spencer Oliver \u003cspen@spen-soft.co.uk\u003e\n"}},"0d9e76cc39ab29853be7b8fb9f69475292643eb9":{"kind":"REWORK","_number":1,"created":"2013-07-29 13:39:19.000000000","uploader":{"_account_id":1000160,"name":"Paul Fertser","email":"fercerpav@gmail.com","username":"pfertser"},"ref":"refs/changes/32/1532/1","fetch":{"anonymous http":{"url":"https://review.openocd.org/openocd","ref":"refs/changes/32/1532/1","commands":{"Branch":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/1 \u0026\u0026 git checkout -b change-1532 FETCH_HEAD","Checkout":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.openocd.org/openocd refs/changes/32/1532/1","Reset To":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/1 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"c658229f92612a7c3862b2e9ba1a8d6496a8be8a","subject":"target: fix halt and wait_halt timeout units"}],"author":{"name":"Paul Fertser","email":"fercerpav@gmail.com","date":"2013-07-29 13:22:07.000000000","tz":240},"committer":{"name":"Paul Fertser","email":"fercerpav@gmail.com","date":"2013-07-29 13:36:55.000000000","tz":240},"subject":"[PoC] mdr32: preliminary support for Milandr\u0027s MDR32Fx","message":"[PoC] mdr32: preliminary support for Milandr\u0027s MDR32Fx\n\nThis adds example config and preliminary flash driver for russian\nCortex-M3 microcontroller model.\n\nRun-time tested on MDR32F9Q2I evaluation board; the flash driver\nshould be compatible with MDR32F2x (Cortex-M0) too but I lack hardware\nto test.\n\nThere\u0027re no status bits at all, the datasheets specifies some delays\nfor flash operations instead. All being in \u003c100us range, they\u0027re hard\nto violate with JTAG, I hope. There\u0027re also no flash identification\nregisters so the flash size and type has to be hardcoded into the\nconfig.\n\nThe flashing is considerably complicated because the flash is split\ninto pages, and each page consists of 4 interleaved non-consecutive\n\"sectors\" (on MDR32F9 only, MDR32F2 is single-sectored), so the\nfastest way is to latch the page and sector address and then write\nonly the part that should go into the current page and current sector.\n\nWith adapter_khz 1000 the current code flashes all the 128k memory in\n49.5s, the real performance should be reached when the target flash\nalgorithm is written.\n\nChange-Id: I80c0632da686d49856fdbf9e05d908846dd44316\nSigned-off-by: Paul Fertser \u003cfercerpav@gmail.com\u003e\n"}},"ecde35061fb35eddefef540feccca6298e7601d8":{"kind":"REWORK","_number":2,"created":"2013-07-29 13:47:34.000000000","uploader":{"_account_id":1000160,"name":"Paul Fertser","email":"fercerpav@gmail.com","username":"pfertser"},"ref":"refs/changes/32/1532/2","fetch":{"anonymous http":{"url":"https://review.openocd.org/openocd","ref":"refs/changes/32/1532/2","commands":{"Branch":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/2 \u0026\u0026 git checkout -b change-1532 FETCH_HEAD","Checkout":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.openocd.org/openocd refs/changes/32/1532/2","Reset To":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/2 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"c658229f92612a7c3862b2e9ba1a8d6496a8be8a","subject":"target: fix halt and wait_halt timeout units"}],"author":{"name":"Paul Fertser","email":"fercerpav@gmail.com","date":"2013-07-29 13:22:07.000000000","tz":240},"committer":{"name":"Paul Fertser","email":"fercerpav@gmail.com","date":"2013-07-29 13:46:59.000000000","tz":240},"subject":"[PoC] mdr32: preliminary support for Milandr\u0027s MDR32Fx","message":"[PoC] mdr32: preliminary support for Milandr\u0027s MDR32Fx\n\nThis adds example config and preliminary flash driver for russian\nCortex-M3 microcontroller model.\n\nRun-time tested on MDR32F9Q2I evaluation board; the flash driver\nshould be compatible with MDR32F2x (Cortex-M0) too but I lack hardware\nto test.\n\nThere\u0027re no status bits at all, the datasheets specifies some delays\nfor flash operations instead. All being in \u003c100us range, they\u0027re hard\nto violate with JTAG, I hope. There\u0027re also no flash identification\nregisters so the flash size and type has to be hardcoded into the\nconfig.\n\nThe flashing is considerably complicated because the flash is split\ninto pages, and each page consists of 4 interleaved non-consecutive\n\"sectors\" (on MDR32F9 only, MDR32F2 is single-sectored), so the\nfastest way is to latch the page and sector address and then write\nonly the part that should go into the current page and current sector.\n\nWith adapter_khz 1000 the current code flashes all the 128k memory in\n49.5s, the real performance should be reached when the target flash\nalgorithm is written.\n\nChange-Id: I80c0632da686d49856fdbf9e05d908846dd44316\nSigned-off-by: Paul Fertser \u003cfercerpav@gmail.com\u003e\n"}},"6381dd0a5fa63cc37bcfd8f2318f072e9a80b7d9":{"kind":"REWORK","_number":3,"created":"2013-07-31 09:54:14.000000000","uploader":{"_account_id":1000160,"name":"Paul Fertser","email":"fercerpav@gmail.com","username":"pfertser"},"ref":"refs/changes/32/1532/3","fetch":{"anonymous http":{"url":"https://review.openocd.org/openocd","ref":"refs/changes/32/1532/3","commands":{"Branch":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/3 \u0026\u0026 git checkout -b change-1532 FETCH_HEAD","Checkout":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.openocd.org/openocd refs/changes/32/1532/3","Reset To":"git fetch https://review.openocd.org/openocd refs/changes/32/1532/3 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"c658229f92612a7c3862b2e9ba1a8d6496a8be8a","subject":"target: fix halt and wait_halt timeout units"}],"author":{"name":"Paul Fertser","email":"fercerpav@gmail.com","date":"2013-07-29 13:22:07.000000000","tz":240},"committer":{"name":"Paul Fertser","email":"fercerpav@gmail.com","date":"2013-07-31 09:35:52.000000000","tz":240},"subject":"mdr32fx: support for Milandr\u0027s MDR32Fx internal flash memory","message":"mdr32fx: support for Milandr\u0027s MDR32Fx internal flash memory\n\nThis adds example config and flash driver for russian Cortex-M3\nmicrocontroller model.\n\nRun-time tested on MDR32F9Q2I evaluation board; the flash driver\nshould be compatible with MDR32F2x (Cortex-M0) too but I lack hardware\nto test.\n\nThere\u0027re no status bits at all, the datasheets specifies some delays\nfor flash operations instead. All being in \u003c100us range, they\u0027re hard\nto violate with JTAG, I hope. There\u0027re also no flash identification\nregisters so the flash size and type has to be hardcoded into the\nconfig.\n\nThe flashing is considerably complicated because the flash is split\ninto pages, and each page consists of 4 interleaved non-consecutive\n\"sectors\" (on MDR32F9 only, MDR32F2 is single-sectored), so the\nfastest way is to latch the page and sector address and then write\nonly the part that should go into the current page and current sector.\n\nPerformance testing results with adapter_khz 1000 and the chip running\non its default HSI 8MHz oscillator:\n\nWhen working area is specified, a target helper algorithm is used:\nwrote 131072 bytes from file testfile.bin in 3.698427s (34.609 KiB/s)\n\nThis can theoretically be sped up by ~1.4 times if the helper\nalgorithm is fed some kind of \"loader instructions stream\" to allow\nsector-by-sector writing.\n\nPure JTAG implementation (when target memory area is not available)\nflashes all the 128k memory in 49.5s.\n\nFlashing \"info\" memory region is also implemented, but due to the\noverlapping memory addresses (resulting in incorrect memory map\ncalculations for GDB) it can\u0027t be used at the same time, so OpenOCD\nneeds to be started this way: -c \"set IMEMORY true\" -f\ntarget/mdr32f9q2i.cfg\n\nIt also can\u0027t be read/verified because it\u0027s not memory-mapped anywhere\never, and OpenOCD NOR framework doesn\u0027t really allow to provide a\ncustom handler that would be used when verifying.\n\nChange-Id: I80c0632da686d49856fdbf9e05d908846dd44316\nSigned-off-by: Paul Fertser \u003cfercerpav@gmail.com\u003e\n"}}},"requirements":[],"submit_records":[],"submit_requirements":[]}
