Commit 87114d6d authored by Kevin Bracey's avatar Kevin Bracey
Browse files

Parallel port flash upgrade facility added.

Version 4.72. Tagged as 'Kernel-4_72'
parent 29428883
master Bethany Cortex Customer_M_Demo HAL RISC_OS-5_26 RISC_OS-5_28 RISC_OS-5_30 RPi SMP alees_Kernel_dev nbingham_Kernel_FastNC_dev sbrodie_sedwards_16Mar2000 nbingham_Kernel_FastNC_dev_bp dellis_autobuild_BaseSW dcotton_autobuild_BaseSW alees_Kernel_dev_bp SMP_bp RPi_merge RPi_bp RO_5_07 Kernel-6_70 Kernel-6_70-2 Kernel-6_70-1 Kernel-6_69 Kernel-6_68 Kernel-6_67 Kernel-6_67-1 Kernel-6_65 Kernel-6_64 Kernel-6_63 Kernel-6_62 Kernel-6_61 Kernel-6_60 Kernel-6_59 Kernel-6_58 Kernel-6_57 Kernel-6_56 Kernel-6_55 Kernel-6_54 Kernel-6_53 Kernel-6_52 Kernel-6_51 Kernel-6_50 Kernel-6_49 Kernel-6_48 Kernel-6_47 Kernel-6_46 Kernel-6_45 Kernel-6_44 Kernel-6_43 Kernel-6_43-3 Kernel-6_43-2 Kernel-6_43-1 Kernel-6_42 Kernel-6_41 Kernel-6_40 Kernel-6_39 Kernel-6_38 Kernel-6_37 Kernel-6_36 Kernel-6_35 Kernel-6_34 Kernel-6_33 Kernel-6_32 Kernel-6_31 Kernel-6_30 Kernel-6_29 Kernel-6_28 Kernel-6_27 Kernel-6_26 Kernel-6_25 Kernel-6_24 Kernel-6_23 Kernel-6_22 Kernel-6_21 Kernel-6_20 Kernel-6_19 Kernel-6_18 Kernel-6_17 Kernel-6_16 Kernel-6_15 Kernel-6_14 Kernel-6_13 Kernel-6_12 Kernel-6_11 Kernel-6_10 Kernel-6_09 Kernel-6_08 Kernel-6_08-4_129_2_10 Kernel-6_08-4_129_2_9 Kernel-6_07 Kernel-6_06 Kernel-6_05 Kernel-6_05-4_129_2_8 Kernel-6_04 Kernel-6_03 Kernel-6_02 Kernel-6_01 Kernel-6_01-3 Kernel-6_01-2 Kernel-6_01-1 Kernel-6_00 Kernel-5_99 Kernel-5_98 Kernel-5_97 Kernel-5_97-4_129_2_7 Kernel-5_96 Kernel-5_95 Kernel-5_94 Kernel-5_93 Kernel-5_92 Kernel-5_91 Kernel-5_90 Kernel-5_89 Kernel-5_89-4_129_2_6 Kernel-5_88 Kernel-5_88-4_129_2_5 Kernel-5_88-4_129_2_4 Kernel-5_87 Kernel-5_86 Kernel-5_86-4_129_2_3 Kernel-5_86-4_129_2_2 Kernel-5_86-4_129_2_1 Kernel-5_85 Kernel-5_84 Kernel-5_83 Kernel-5_82 Kernel-5_81 Kernel-5_80 Kernel-5_79 Kernel-5_78 Kernel-5_77 Kernel-5_76 Kernel-5_75 Kernel-5_74 Kernel-5_73 Kernel-5_72 Kernel-5_71 Kernel-5_70 Kernel-5_69 Kernel-5_68 Kernel-5_67 Kernel-5_66 Kernel-5_65 Kernel-5_64 Kernel-5_63 Kernel-5_62 Kernel-5_61 Kernel-5_60 Kernel-5_59 Kernel-5_58 Kernel-5_57 Kernel-5_56 Kernel-5_55 Kernel-5_54 Kernel-5_54-1 Kernel-5_53 Kernel-5_52 Kernel-5_51 Kernel-5_50 Kernel-5_49 Kernel-5_48 Kernel-5_47 Kernel-5_46 Kernel-5_46-4_90_2_1 Kernel-5_45 Kernel-5_44 Kernel-5_43 Kernel-5_42 Kernel-5_41 Kernel-5_40 Kernel-5_39 Kernel-5_38 Kernel-5_37 Kernel-5_36 Kernel-5_35 Kernel-5_35-4_79_2_327 Kernel-5_35-4_79_2_326 Kernel-5_35-4_79_2_325 Kernel-5_35-4_79_2_324 Kernel-5_35-4_79_2_323 Kernel-5_35-4_79_2_322 Kernel-5_35-4_79_2_321 Kernel-5_35-4_79_2_320 Kernel-5_35-4_79_2_319 Kernel-5_35-4_79_2_318 Kernel-5_35-4_79_2_317 Kernel-5_35-4_79_2_316 Kernel-5_35-4_79_2_315 Kernel-5_35-4_79_2_314 Kernel-5_35-4_79_2_313 Kernel-5_35-4_79_2_312 Kernel-5_35-4_79_2_311 Kernel-5_35-4_79_2_310 Kernel-5_35-4_79_2_309 Kernel-5_35-4_79_2_308 Kernel-5_35-4_79_2_307 Kernel-5_35-4_79_2_306 Kernel-5_35-4_79_2_305 Kernel-5_35-4_79_2_304 Kernel-5_35-4_79_2_303 Kernel-5_35-4_79_2_302 Kernel-5_35-4_79_2_301 Kernel-5_35-4_79_2_300 Kernel-5_35-4_79_2_299 Kernel-5_35-4_79_2_298 Kernel-5_35-4_79_2_297 Kernel-5_35-4_79_2_296 Kernel-5_35-4_79_2_295 Kernel-5_35-4_79_2_294 Kernel-5_35-4_79_2_293 Kernel-5_35-4_79_2_292 Kernel-5_35-4_79_2_291 Kernel-5_35-4_79_2_290 Kernel-5_35-4_79_2_289 Kernel-5_35-4_79_2_288 Kernel-5_35-4_79_2_287 Kernel-5_35-4_79_2_286 Kernel-5_35-4_79_2_285 Kernel-5_35-4_79_2_284 Kernel-5_35-4_79_2_283 Kernel-5_35-4_79_2_282 Kernel-5_35-4_79_2_281 Kernel-5_35-4_79_2_280 Kernel-5_35-4_79_2_279 Kernel-5_35-4_79_2_278 Kernel-5_35-4_79_2_277 Kernel-5_35-4_79_2_276 Kernel-5_35-4_79_2_275 Kernel-5_35-4_79_2_274 Kernel-5_35-4_79_2_273 Kernel-5_35-4_79_2_272 Kernel-5_35-4_79_2_271 Kernel-5_35-4_79_2_270 Kernel-5_35-4_79_2_269 Kernel-5_35-4_79_2_268 Kernel-5_35-4_79_2_267 Kernel-5_35-4_79_2_266 Kernel-5_35-4_79_2_265 Kernel-5_35-4_79_2_264 Kernel-5_35-4_79_2_263 Kernel-5_35-4_79_2_262 Kernel-5_35-4_79_2_261 Kernel-5_35-4_79_2_260 Kernel-5_35-4_79_2_259 Kernel-5_35-4_79_2_258 Kernel-5_35-4_79_2_257 Kernel-5_35-4_79_2_256 Kernel-5_35-4_79_2_255 Kernel-5_35-4_79_2_254 Kernel-5_35-4_79_2_253 Kernel-5_35-4_79_2_252 Kernel-5_35-4_79_2_251 Kernel-5_35-4_79_2_250 Kernel-5_35-4_79_2_249 Kernel-5_35-4_79_2_248 Kernel-5_35-4_79_2_247 Kernel-5_35-4_79_2_246 Kernel-5_35-4_79_2_245 Kernel-5_35-4_79_2_244 Kernel-5_35-4_79_2_243 Kernel-5_35-4_79_2_242 Kernel-5_35-4_79_2_241 Kernel-5_35-4_79_2_240 Kernel-5_35-4_79_2_239 Kernel-5_35-4_79_2_238 Kernel-5_35-4_79_2_237 Kernel-5_35-4_79_2_236 Kernel-5_35-4_79_2_235 Kernel-5_35-4_79_2_234 Kernel-5_35-4_79_2_233 Kernel-5_35-4_79_2_232 Kernel-5_35-4_79_2_231 Kernel-5_35-4_79_2_230 Kernel-5_35-4_79_2_229 Kernel-5_35-4_79_2_228 Kernel-5_35-4_79_2_227 Kernel-5_35-4_79_2_226 Kernel-5_35-4_79_2_225 Kernel-5_35-4_79_2_224 Kernel-5_35-4_79_2_223 Kernel-5_35-4_79_2_222 Kernel-5_35-4_79_2_221 Kernel-5_35-4_79_2_220 Kernel-5_35-4_79_2_219 Kernel-5_35-4_79_2_218 Kernel-5_35-4_79_2_217 Kernel-5_35-4_79_2_216 Kernel-5_35-4_79_2_215 Kernel-5_35-4_79_2_214 Kernel-5_35-4_79_2_213 Kernel-5_35-4_79_2_212 Kernel-5_35-4_79_2_211 Kernel-5_35-4_79_2_210 Kernel-5_35-4_79_2_209 Kernel-5_35-4_79_2_208 Kernel-5_35-4_79_2_207 Kernel-5_35-4_79_2_206 Kernel-5_35-4_79_2_205 Kernel-5_35-4_79_2_204 Kernel-5_35-4_79_2_203 Kernel-5_35-4_79_2_202 Kernel-5_35-4_79_2_201 Kernel-5_35-4_79_2_200 Kernel-5_35-4_79_2_199 Kernel-5_35-4_79_2_198 Kernel-5_35-4_79_2_197 Kernel-5_35-4_79_2_196 Kernel-5_35-4_79_2_195 Kernel-5_35-4_79_2_194 Kernel-5_35-4_79_2_193 Kernel-5_35-4_79_2_192 Kernel-5_35-4_79_2_191 Kernel-5_35-4_79_2_190 Kernel-5_35-4_79_2_189 Kernel-5_35-4_79_2_188 Kernel-5_35-4_79_2_187 Kernel-5_35-4_79_2_186 Kernel-5_35-4_79_2_185 Kernel-5_35-4_79_2_184 Kernel-5_35-4_79_2_183 Kernel-5_35-4_79_2_182 Kernel-5_35-4_79_2_181 Kernel-5_35-4_79_2_180 Kernel-5_35-4_79_2_179 Kernel-5_35-4_79_2_178 Kernel-5_35-4_79_2_177 Kernel-5_35-4_79_2_176 Kernel-5_35-4_79_2_175 Kernel-5_35-4_79_2_174 Kernel-5_35-4_79_2_173 Kernel-5_35-4_79_2_172 Kernel-5_35-4_79_2_171 Kernel-5_35-4_79_2_170 Kernel-5_35-4_79_2_169 Kernel-5_35-4_79_2_168 Kernel-5_35-4_79_2_167 Kernel-5_35-4_79_2_166 Kernel-5_35-4_79_2_165 Kernel-5_35-4_79_2_164 Kernel-5_35-4_79_2_163 Kernel-5_35-4_79_2_162 Kernel-5_35-4_79_2_161 Kernel-5_35-4_79_2_160 Kernel-5_35-4_79_2_159 Kernel-5_35-4_79_2_158 Kernel-5_35-4_79_2_157 Kernel-5_35-4_79_2_156 Kernel-5_35-4_79_2_155 Kernel-5_35-4_79_2_154 Kernel-5_35-4_79_2_153 Kernel-5_35-4_79_2_152 Kernel-5_35-4_79_2_151 Kernel-5_35-4_79_2_150 Kernel-5_35-4_79_2_149 Kernel-5_35-4_79_2_148 Kernel-5_35-4_79_2_147_2_23 Kernel-5_35-4_79_2_147_2_22 Kernel-5_35-4_79_2_147_2_21 Kernel-5_35-4_79_2_147_2_20 Kernel-5_35-4_79_2_147_2_19 Kernel-5_35-4_79_2_147_2_18 Kernel-5_35-4_79_2_147_2_17 Kernel-5_35-4_79_2_147_2_16 Kernel-5_35-4_79_2_147_2_15 Kernel-5_35-4_79_2_147_2_14 Kernel-5_35-4_79_2_147_2_13 Kernel-5_35-4_79_2_147_2_12 Kernel-5_35-4_79_2_147_2_11 Kernel-5_35-4_79_2_147_2_10 Kernel-5_35-4_79_2_147_2_9 Kernel-5_35-4_79_2_147_2_8 Kernel-5_35-4_79_2_147_2_7 Kernel-5_35-4_79_2_147_2_6 Kernel-5_35-4_79_2_147_2_5 Kernel-5_35-4_79_2_147_2_4 Kernel-5_35-4_79_2_147_2_3 Kernel-5_35-4_79_2_147_2_2 Kernel-5_35-4_79_2_147_2_1 Kernel-5_35-4_79_2_147 Kernel-5_35-4_79_2_146 Kernel-5_35-4_79_2_145 Kernel-5_35-4_79_2_144 Kernel-5_35-4_79_2_143 Kernel-5_35-4_79_2_142 Kernel-5_35-4_79_2_141 Kernel-5_35-4_79_2_140 Kernel-5_35-4_79_2_139 Kernel-5_35-4_79_2_138 Kernel-5_35-4_79_2_137 Kernel-5_35-4_79_2_136 Kernel-5_35-4_79_2_135 Kernel-5_35-4_79_2_134 Kernel-5_35-4_79_2_133 Kernel-5_35-4_79_2_132 Kernel-5_35-4_79_2_131 Kernel-5_35-4_79_2_130 Kernel-5_35-4_79_2_129 Kernel-5_35-4_79_2_128 Kernel-5_35-4_79_2_127 Kernel-5_35-4_79_2_126 Kernel-5_35-4_79_2_125 Kernel-5_35-4_79_2_124 Kernel-5_35-4_79_2_123 Kernel-5_35-4_79_2_122 Kernel-5_35-4_79_2_121 Kernel-5_35-4_79_2_120 Kernel-5_35-4_79_2_119 Kernel-5_35-4_79_2_118 Kernel-5_35-4_79_2_117 Kernel-5_35-4_79_2_116 Kernel-5_35-4_79_2_115 Kernel-5_35-4_79_2_114 Kernel-5_35-4_79_2_113 Kernel-5_35-4_79_2_112 Kernel-5_35-4_79_2_111 Kernel-5_35-4_79_2_110 Kernel-5_35-4_79_2_109 Kernel-5_35-4_79_2_108 Kernel-5_35-4_79_2_107 Kernel-5_35-4_79_2_106 Kernel-5_35-4_79_2_105 Kernel-5_35-4_79_2_104 Kernel-5_35-4_79_2_103 Kernel-5_35-4_79_2_102 Kernel-5_35-4_79_2_101 Kernel-5_35-4_79_2_100 Kernel-5_35-4_79_2_99 Kernel-5_35-4_79_2_98_2_54 Kernel-5_35-4_79_2_98_2_53 Kernel-5_35-4_79_2_98_2_52_2_1 Kernel-5_35-4_79_2_98_2_52 Kernel-5_35-4_79_2_98_2_51 Kernel-5_35-4_79_2_98_2_50 Kernel-5_35-4_79_2_98_2_49 Kernel-5_35-4_79_2_98_2_48 Kernel-5_35-4_79_2_98_2_47 Kernel-5_35-4_79_2_98_2_46 Kernel-5_35-4_79_2_98_2_45 Kernel-5_35-4_79_2_98_2_44 Kernel-5_35-4_79_2_98_2_43 Kernel-5_35-4_79_2_98_2_42 Kernel-5_35-4_79_2_98_2_41 Kernel-5_35-4_79_2_98_2_40 Kernel-5_35-4_79_2_98_2_39 Kernel-5_35-4_79_2_98_2_38 Kernel-5_35-4_79_2_98_2_37 Kernel-5_35-4_79_2_98_2_36 Kernel-5_35-4_79_2_98_2_35 Kernel-5_35-4_79_2_98_2_34 Kernel-5_35-4_79_2_98_2_33 Kernel-5_35-4_79_2_98_2_32 Kernel-5_35-4_79_2_98_2_31 Kernel-5_35-4_79_2_98_2_30 Kernel-5_35-4_79_2_98_2_29 Kernel-5_35-4_79_2_98_2_28 Kernel-5_35-4_79_2_98_2_27 Kernel-5_35-4_79_2_98_2_26 Kernel-5_35-4_79_2_98_2_25 Kernel-5_35-4_79_2_98_2_24 Kernel-5_35-4_79_2_98_2_23 Kernel-5_35-4_79_2_98_2_22 Kernel-5_35-4_79_2_98_2_21 Kernel-5_35-4_79_2_98_2_20 Kernel-5_35-4_79_2_98_2_19 Kernel-5_35-4_79_2_98_2_18 Kernel-5_35-4_79_2_98_2_17 Kernel-5_35-4_79_2_98_2_16 Kernel-5_35-4_79_2_98_2_15 Kernel-5_35-4_79_2_98_2_14 Kernel-5_35-4_79_2_98_2_13 Kernel-5_35-4_79_2_98_2_12 Kernel-5_35-4_79_2_98_2_11 Kernel-5_35-4_79_2_98_2_10 Kernel-5_35-4_79_2_98_2_9 Kernel-5_35-4_79_2_98_2_8 Kernel-5_35-4_79_2_98_2_7 Kernel-5_35-4_79_2_98_2_6 Kernel-5_35-4_79_2_98_2_5 Kernel-5_35-4_79_2_98_2_4 Kernel-5_35-4_79_2_98_2_3 Kernel-5_35-4_79_2_98_2_2 Kernel-5_35-4_79_2_98_2_1 Kernel-5_35-4_79_2_98 Kernel-5_35-4_79_2_97 Kernel-5_35-4_79_2_96 Kernel-5_35-4_79_2_95 Kernel-5_35-4_79_2_94 Kernel-5_35-4_79_2_93 Kernel-5_35-4_79_2_92 Kernel-5_35-4_79_2_91 Kernel-5_35-4_79_2_90 Kernel-5_35-4_79_2_89 Kernel-5_35-4_79_2_88 Kernel-5_35-4_79_2_87 Kernel-5_35-4_79_2_86 Kernel-5_35-4_79_2_85 Kernel-5_35-4_79_2_84 Kernel-5_35-4_79_2_83 Kernel-5_35-4_79_2_82 Kernel-5_35-4_79_2_81 Kernel-5_35-4_79_2_80 Kernel-5_35-4_79_2_79 Kernel-5_35-4_79_2_78 Kernel-5_35-4_79_2_77 Kernel-5_35-4_79_2_76 Kernel-5_35-4_79_2_75 Kernel-5_35-4_79_2_74 Kernel-5_35-4_79_2_73 Kernel-5_35-4_79_2_72 Kernel-5_35-4_79_2_71 Kernel-5_35-4_79_2_70 Kernel-5_35-4_79_2_69 Kernel-5_35-4_79_2_68 Kernel-5_35-4_79_2_67 Kernel-5_35-4_79_2_66 Kernel-5_35-4_79_2_65 Kernel-5_35-4_79_2_64 Kernel-5_35-4_79_2_63 Kernel-5_35-4_79_2_62 Kernel-5_35-4_79_2_61 Kernel-5_35-4_79_2_60 Kernel-5_35-4_79_2_59 Kernel-5_35-4_79_2_58 Kernel-5_35-4_79_2_57 Kernel-5_35-4_79_2_56 Kernel-5_35-4_79_2_55 Kernel-5_35-4_79_2_54 Kernel-5_35-4_79_2_53 Kernel-5_35-4_79_2_52 Kernel-5_35-4_79_2_51 Kernel-5_35-4_79_2_50 Kernel-5_35-4_79_2_49 Kernel-5_35-4_79_2_48 Kernel-5_35-4_79_2_47 Kernel-5_35-4_79_2_46 Kernel-5_35-4_79_2_45 Kernel-5_35-4_79_2_44 Kernel-5_35-4_79_2_43 Kernel-5_35-4_79_2_42 Kernel-5_35-4_79_2_41 Kernel-5_35-4_79_2_40 Kernel-5_35-4_79_2_39 Kernel-5_35-4_79_2_38 Kernel-5_35-4_79_2_37 Kernel-5_35-4_79_2_36 Kernel-5_35-4_79_2_35 Kernel-5_35-4_79_2_34 Kernel-5_35-4_79_2_33 Kernel-5_35-4_79_2_32 Kernel-5_35-4_79_2_31 Kernel-5_35-4_79_2_30 Kernel-5_35-4_79_2_29 Kernel-5_35-4_79_2_28 Kernel-5_35-4_79_2_27 Kernel-5_35-4_79_2_26 Kernel-5_35-4_79_2_25_2_2 Kernel-5_35-4_79_2_25_2_1 Kernel-5_35-4_79_2_25 Kernel-5_35-4_79_2_24 Kernel-5_35-4_79_2_23 Kernel-5_35-4_79_2_22 Kernel-5_35-4_79_2_21 Kernel-5_35-4_79_2_20 Kernel-5_35-4_79_2_19 Kernel-5_35-4_79_2_18 Kernel-5_35-4_79_2_17 Kernel-5_35-4_79_2_16 Kernel-5_35-4_79_2_15 Kernel-5_35-4_79_2_14 Kernel-5_35-4_79_2_13 Kernel-5_35-4_79_2_12 Kernel-5_35-4_79_2_11 Kernel-5_35-4_79_2_10 Kernel-5_35-4_79_2_9 Kernel-5_35-4_79_2_8 Kernel-5_35-4_79_2_7 Kernel-5_35-4_79_2_6 Kernel-5_35-4_79_2_5 Kernel-5_35-4_79_2_4 Kernel-5_35-4_79_2_3 Kernel-5_35-4_79_2_2 Kernel-5_35-4_79_2_1 Kernel-5_34 Kernel-5_33 Kernel-5_32 Kernel-5_31 Kernel-5_30 Kernel-5_29 Kernel-5_28 Kernel-5_27 Kernel-5_26 Kernel-5_25 Kernel-5_24 Kernel-5_23 Kernel-5_22 Kernel-5_21 Kernel-5_20 Kernel-5_19 Kernel-5_18 Kernel-5_17 Kernel-5_16 Kernel-5_15 Kernel-5_14 Kernel-5_13 Kernel-5_13-4_52_2_1 Kernel-5_12 Kernel-5_11 Kernel-5_10 Kernel-5_09 Kernel-5_08 Kernel-5_07 Kernel-5_06 Kernel-5_05 Kernel-5_04 Kernel-5_03 Kernel-5_02 Kernel-5_01 Kernel-5_00 Kernel-4_99 Kernel-4_98 Kernel-4_97 Kernel-4_96 Kernel-4_95 Kernel-4_94 Kernel-4_93 Kernel-4_92 Kernel-4_91 Kernel-4_90 Kernel-4_89 Kernel-4_88 Kernel-4_87 Kernel-4_86 Kernel-4_85 Kernel-4_84 Kernel-4_83 Kernel-4_82 Kernel-4_81 Kernel-4_80 Kernel-4_79 Kernel-4_78 Kernel-4_77 HAL_merge Cortex_merge Cortex_bp
No related merge requests found
...@@ -5,8 +5,10 @@ ...@@ -5,8 +5,10 @@
GBLA Module_Version GBLA Module_Version
GBLS Module_MinorVersion GBLS Module_MinorVersion
GBLS Module_Date GBLS Module_Date
Module_MajorVersion SETS "4.71" GBLS Module_FullVersion
Module_Version SETA 471 Module_MajorVersion SETS "4.72"
Module_Version SETA 472
Module_MinorVersion SETS "" Module_MinorVersion SETS ""
Module_Date SETS "25 Feb 1999" Module_Date SETS "08 Apr 1999"
END Module_FullVersion SETS "4.72"
END
/* (4.71) /* (4.72)
* *
* This file is automatically maintained by srccommit, do not edit manually. * This file is automatically maintained by srccommit, do not edit manually.
* *
*/ */
#define Module_MajorVersion_CMHG 4.71 #define Module_MajorVersion_CMHG 4.72
#define Module_MinorVersion_CMHG #define Module_MinorVersion_CMHG
#define Module_Date_CMHG 25 Feb 1999 #define Module_Date_CMHG 08 Apr 1999
#define Module_MajorVersion "4.71" #define Module_MajorVersion "4.72"
#define Module_Version 471 #define Module_Version 472
#define Module_MinorVersion "" #define Module_MinorVersion ""
#define Module_Date "25 Feb 1999" #define Module_Date "08 Apr 1999"
#define Module_FullVersion "4.72"
; Copyright 1999 Element 14 Ltd
;
; Licensed under the Apache License, Version 2.0 (the "License");
; you may not use this file except in compliance with the License.
; You may obtain a copy of the License at
;
; http://www.apache.org/licenses/LICENSE-2.0
;
; Unless required by applicable law or agreed to in writing, software
; distributed under the License is distributed on an "AS IS" BASIS,
; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
; See the License for the specific language governing permissions and
; limitations under the License.
;
; This file handles the programming of flash devices in ROM bank 0 with
; a ROM image transferred via the parallel port. This is for development
; purposes only, and is only likely to work on the system for which it was
; designed.
; Flash Memory Settings
FR_FlashBase * &00000000
FR_DeviceBufferSize * 32 ; 28F640J5 has 32 byte buffer
FR_DeviceBlockSizeBits * 17 ; 28F640J5 has 128KB blocks
FR_DeviceBlocks * 64 ; 64 blocks in a 28F640J5
FR_BufferSize * FR_DeviceBufferSize*2 ; 2 devices
FR_BlockSizeBits * FR_DeviceBlockSizeBits+1 ; 2 devices
FR_BlockSize * 1 :SHL: FR_BlockSizeBits ; 256KB
FR_FlashSize * FR_BlockSize*FR_DeviceBlocks ; 16MB
; Sizes of things in memory
FR_StackSize * 1024
FR_RAMCodeSize * 4096
FR_ScreenSize * 472*1024
; Addresses of where we put things in memory
FR_PageTableBaseAddr * DRAM0PhysRam
FR_StackBase * FR_PageTableBaseAddr+16*1024+FR_StackSize
FR_RAMCodeAddr * FR_StackBase
FR_ScreenBase * (FR_RAMCodeAddr+FR_RAMCodeSize+15):AND::NOT:&F
FR_TransferBuffAddr * FR_ScreenBase
; Combo chip addresses
FR_ComboCfgBase * &03010000 + &3F0*4
FR_PPortBase * &03010000 + &278*4
FR_ECRPortBase * FR_PPortBase + &402*4
; On entry, R11->IOMD
; Will either reprogram the flash, or branch back to 0.
; We're in SVC32 mode with the MMU off, by the way.
ASSERT IOMD_C_FrontPanelButton <> 0
ConsiderFlashROM
LDRB R0,[R11,#IOMD_CLINES]
TST R0,#IOMD_C_FrontPanelButton
MOVNE PC,#0
FlashROM
; Switch CPU to 32-bit mode
MOV R0,#MMUC_L :OR: MMUC_D :OR: MMUC_P ; Set PROG32 and DATA32
ARM_write_control R0
MOV R0,#I32_bit :OR: F32_bit :OR: SVC32_mode
msr AL,CPSR_all,R0
; Initialise various CPU control registers
MOV R0,#IOMD_ROMCR_NSTicks_5 :OR: IOMD_ROMCR_HalfSpeed :OR: IOMD_ROMCR_32bit
STRB R0,[R11,#IOMD_ROMCR0]
MOV R0,#IOMD_CLKCTL_CpuclkHalf :OR: IOMD_CLKCTL_MemclkNormal :OR: IOMD_CLKCTL_IOclkNormal
STRB R0,[R11,#IOMD_CLKCTL]
MOV R0,#IOMD_DRAMWID_RASPre_3 :OR: IOMD_DRAMWID_RASCAS_3 :OR: IOMD_DRAMWID_EDO_Enable :OR: IOMD_DRAMWID_DRAM_32bit
STRB R0,[R11,#IOMD_DRAMWID]
MOV R0,#IOMD_IOTCR_Combo_TypeB :OR: IOMD_IOTCR_Network_TypeC
STRB R0,[R11,#IOMD_IOTCR]
MOV R0,#1 ; Card 0 type C, the rest type A
STRB R0,[R11,#IOMD_ECTCR]
MOV R0,#IOMD_ASTCR_WaitStates
STRB R0,[R11,#IOMD_ASTCR]
MOV R0,#IOMD_C_ReadMask :OR: IOMD_C_ROMCardVpp ; Green LED on
STRB R0,[R11,#IOMD_CLINES]
; Main setup
MOV R10,#VIDC ; Keep R10 pointing to video registers from here on
BL FR_InitVideo
BL FR_FillScreen
BL FR_SetPageTable
BL FR_SetMMU
BL FR_InitParallel ; Sets R9 to parallel base address - keep it this way
; Copy the rest of code to RAM and jump to it
ADR R0,FR_CopyBlockStart
LDR R1,=FR_RAMCodeAddr
MOV LR,R1
LDR R2,=FR_RAMCodeEnd - FR_CopyBlockStart
01 LDR R3,[R0],#4
STR R3,[R1],#4
SUBS R2,R2,#4
BNE %BT01
MOV PC,LR
FR_InitVideo ROUT
; Set DMA registers
LDR R1,=FR_ScreenBase
ADD R2,R1,#FR_ScreenSize
SUB R2,R2,#16
STR R1,[R11,#IOMD_VIDSTART]
STR R2,[R11,#IOMD_VIDEND]
STR R1,[R11,#IOMD_VIDINIT]
STR R1,[R11,#IOMD_VIDCUR]
STR R1,[R11,#IOMD_CURSINIT]
STR R1,[R11,#IOMD_CURSCUR]
MOV R1,#0
STR R1,[R11,#IOMD_VIDINITB]
MOV R1,#IOMD_VIDCR_DRAMMode :OR: IOMD_VIDCR_Enable
STRB R1,[R11,#IOMD_VIDCR]
; Set video registers
ADR R1,FR_InitVidRegs
MOV R2,#(FR_InitVidRegsEnd-FR_InitVidRegs)
02 LDR R3,[R1],#4
STR R3,[R10]
SUBS R2,R2,#4
BNE %BT02
; Set grey palette
MOV R1,#&10000000
STR R1,[R10]
MOV R1,#0
MOV R2,#&000001
ORR R2,R2,#&000100
ORR R2,R2,#&010000
MOV R3,#255
03 STR R1,[R10]
ADD R1,R1,R2
SUBS R3,R3,#1
BNE %BT03
MOV PC,LR
; Frequency synthesizer register settings
FR_ModR * 8
FR_ModV * 9 ; 36 MHz
; Video control register settings
FR_FIFO * 3 ; 12 loads
FR_BPP * 3 ; 8bpp
FR_PixelRate * 0 ; CK/1
FR_ClockSource * 0 ; VCLK
; Horizontal timings
FR_HSync * 72
FR_HBPch * 86
FR_HLBdr * 24
FR_HDisp * 800
FR_HRBdr * 24
FR_HFPch * 18
FR_HDWR * FR_HDisp / 4
; Vertical timings
FR_VSync * 2
FR_VBPch * 22
FR_VTBdr * 0
FR_VDisp * 600
FR_VBBdr * 0
FR_VFPch * 1
FR_InitVidRegs ROUT
DCD &E0000000+(FR_FIFO:SHL:8)+(FR_BPP:SHL:5)+(FR_PixelRate:SHL:2)+FR_ClockSource
DCD &D0000000+&C288
DCD &80000000+FR_HSync+FR_HLBdr+FR_HDisp+FR_HRBdr+FR_HFPch-8
DCD &81000000+FR_HSync-8
DCD &82000000+FR_HSync+FR_HBPch-12
DCD &83000000+FR_HSync+FR_HBPch+FR_HLBdr-18
DCD &84000000+FR_HSync+FR_HBPch+FR_HLBdr+FR_HDisp-18
DCD &85000000+FR_HSync+FR_HBPch+FR_HLBdr+FR_HDisp+FR_HRBdr-12
DCD &90000000+FR_VSync+FR_VBPch+FR_VTBdr+FR_VDisp+FR_VBBdr+FR_VFPch-2
DCD &91000000+FR_VSync-2
DCD &92000000+FR_VSync+FR_VBPch-1
DCD &93000000+FR_VSync+FR_VBPch+FR_VTBdr-1
DCD &94000000+FR_VSync+FR_VBPch+FR_VTBdr+FR_VDisp-1
DCD &90000000+FR_VSync+FR_VBPch+FR_VTBdr+FR_VDisp+FR_VBBdr-1
DCD &40008000
DCD &C0000000+(1:SHL:12)+3
DCD &D0000000+&C080+((FR_ModV-1):SHL:8)+(FR_ModR-1)
DCD &D0000000+((FR_ModV-1):SHL:8)+(FR_ModR-1)
DCD &F0000000+(1:SHL:16)+(1:SHL:12)+FR_HDWR
DCD &B1000000
FR_InitVidRegsEnd
FR_FillScreen ROUT
LDR R1,=FR_ScreenBase
MOV R2,#((256:SHL:16)/600):AND:&00FF
ORR R2,R2,#((256:SHL:16)/600):AND:&FF00
MOV R3,R3
MOV R4,#FR_VDisp
01 MOV R5,#FR_HDisp
MOV R0,R3,LSR #16
ORR R0,R0,R0,LSL #8
ORR R0,R0,R0,LSL #16
02 STR R0,[R1],#4
SUBS R5,R5,#4
BNE %BT02
ADD R3,R3,R2
SUBS R4,R4,#1
BNE %BT01
MOV PC,LR
;Make a page table that basically gives flat addressing with the C and B bits
;set approriately for the RAM areas. The RAM areas are set with both the C and B
;bits on, and all other areas have both C and B off. The flash area must not
;be made cacheable, or programming won't work.
;On exit
; r0-r4 corrupted
FR_SetPageTable ROUT
MOV R1,#FR_PageTableBaseAddr
MOV R2,#0 ; Address
MOV R4,#L1_U + L1_Section
ORR R4,R4,#AP_Full * L1_APMult
01 BICS R3,R2,#&E0000000 ; Repeats at &00000000, &20000000, &4000000, etc.
BICEQ R4,R4,#L1_C + L1_B ; Clear B and C bits from start of ROM area
CMP R3,#&10000000
ORREQ R4,R4,#L1_C + L1_B ; Set B and C bits (RAM area cacheable and bufferable)
ORR R0,R3,R4
STR R0,[R1],#4
ADDS R2,R2,#1024*1024
BCC %BT01
MOV PC,LR
FR_SetMMU ROUT
MOV R0,#FR_PageTableBaseAddr
ARM_MMU_transbase R0
MVN R0,#0 ; Full access to all domains
ARM_MMU_domain R0
MOV R0,#MMUC_L + MMUC_D + MMUC_P + MMUC_W + MMUC_C + MMUC_M
ARM_write_control R0 ; Enable write buffer, cache and MMU
MOV PC,LR
FR_InitParallel ROUT
LDR R1,=FR_ComboCfgBase
; Enter config mode
MOV R0,#&55
STRB R0,[R1]
STRB R0,[R1]
; Write CR0
MOV R0,#0
STRB R0,[R1]
MOV R0,#&22
STRB R0,[R1,#4] ; CR0=&22 (FDC, IDE off)
; Write CR1
MOV R0,#1
STRB R0,[R1]
MOV R0,#&97
STRB R0,[R1,#4] ; CR1=&97 (Parallel port on, extended)
; Write CR4
MOV R0,#4
STRB R0,[R1]
MOV R0,#&04 ; CR4=&03 (ECP & EPP mode)
STRB R0,[R1,#4]
; Write ECR
MOV R0,#&34 ; PS/2 Parallel Port mode, DMA off, interrupts off
LDR R9,=FR_ECRPortBase
STRB R0,[R9]
; Exit config mode
MOV R0,#&AA
STRB R0,[R1]
; Initialise parallel port
LDR R9,=FR_PPortBase
; Clear nSTROBE bit (puts nACK high) and clear nSLCTIN bit (puts BUSY high) to
; indicate we are busy and not accepting data.
MOV R0,#&20 ; Input, IRQ off, nSLCTIN clear, nSTROBE clear
STRB R0,[R9,#8]
; Keep parallel port base address in R9 from here on
MOV PC,LR
LTORG
FR_CopyBlockStart
; Dont use literals from here on in - the assembler's liable to pull them
; the non-RAM stuff above.
FR_StackBaseVal & FR_StackBase
FR_TransferBuffVal & FR_TransferBuffAddr
; Code from here on gets copied to RAM (at FR_RAMCodeAddr) and run from there.
FR_RAMCodeStart
MOV R0,#IOMD_C_ReadMask :OR: IOMD_C_FrontPanelLED :OR: IOMD_C_ROMCardVpp
STRB R0,[R11,#IOMD_CLINES] ; Red LED on
LDR R13,FR_StackBaseVal
FR_LoopForever
MOV R0,#FR_WaitCmdState-FR_BorderStateTable
BL FR_ShowStateBorder
; Wait for a command header
BL FR_ParallelRead
CMP R0,#'M'
BNE FR_LoopForever
BL FR_ParallelRead
CMP R0,#'P'
BNE FR_LoopForever
BL FR_ParallelRead
CMP R0,#'T'
BNE FR_LoopForever
BL FR_ParallelRead
CMP R0,#'!'
BNE FR_LoopForever
BL FR_ParallelRead
CMP R0,#'P'
BEQ FR_BeginProgram
CMP R0,#'V'
BEQ FR_BeginVerify
B FR_LoopForever
FR_BeginProgram ROUT
MOV R0,#FR_BeginProgramState-FR_BorderStateTable
BL FR_ShowStateBorder
; Read in parameters
BL FR_ReadOffsetAndCount
; Ready to go - first make the ROM area writable
BL FR_MakeROM0Writable
01
; Begin erasing the block
MOV R0,R7
BL FR_StartErase
; Read the block data into the buffer
BL FR_ReadBlockIntoBuffer
; Data read in OK - wait for erase to finish
BL FR_CheckErase
; Now write block
MOV R0,#FR_WriteBlockState-FR_BorderStateTable
BL FR_ShowStateBorder
MOV R0,R7
LDR R1,FR_TransferBuffVal
BL FR_DoWriteBlock
; Verify the block
BL FR_ResetToReadArray
MOV R0,#FR_VerifyBlockState-FR_BorderStateTable
BL FR_ShowStateBorder
MOV R0,R7
LDR R1,FR_TransferBuffVal
BL FR_VerifyBlock
; Block done, on to the next
ADD R7,R7,#FR_BlockSize
SUBS R8,R8,#1
BNE %BT01
; All finished - make ROM area read-only
BL FR_MakeROM0ReadOnly
B FR_LoopForever
FR_BeginVerify ROUT
MOV R0,#FR_BeginVerifyState-FR_BorderStateTable
BL FR_ShowStateBorder
; Read in parameters
BL FR_ReadOffsetAndCount
01
; Read the block data into the buffer
BL FR_ReadBlockIntoBuffer
; Data read in OK - now verify
MOV R0,#FR_VerifyBlockState-FR_BorderStateTable
BL FR_ShowStateBorder
MOV R0,R7
LDR R1,FR_TransferBuffVal
BL FR_VerifyBlock
; Block done, on to the next
ADD R7,R7,#FR_BlockSize
SUBS R8,R8,#1
BNE %BT01
; All done
B FR_LoopForever
FR_ReadOffsetAndCount ROUT
;Called by the program and verify commands to read their parameters (offset
;and count) from the parallel port.
;On exit
; r7 = Initial offset in Flash ROM area
; r8 = Block count
; r0-r3 corrupted
STMFD R13!,{LR}
; Next incoming word is the block offset to start from
BL FR_ParallelReadWord
MOV R7,R0
; Check the offset is valid
CMP R7,#FR_FlashSize
BHS FR_OffsetError
MOVS R0,R7,LSL#(32-FR_BlockSizeBits) ; The offset within the block should be 0
BNE FR_OffsetError
; Next incoming byte is the number of blocks
BL FR_ParallelRead
MOVS R8,R0
BEQ FR_BlockCountError
ADD R0,R7,R8,LSL #FR_BlockSizeBits
CMP R0,#FR_FlashSize
BHI FR_BlockCountError
; Turn the offset into a real address
ADD R7,R7,#FR_FlashBase
LDMFD R13!,{PC}
FR_ReadBlockIntoBuffer ROUT
;Read a block of data from the parallel port into the transfer buffer
;Corrupts r0-r6
STMFD R13!,{LR}
MOV R0,#FR_ReadBlockState-FR_BorderStateTable
BL FR_ShowStateBorder
MOV R6,#FR_BlockSize
LDR R5,FR_TransferBuffVal
MOV R4,#0 ; Checksum
01 BL FR_ParallelReadWord
STR R0,[R5],#4
ADD R4,R4,R0
SUBS R6,R6,#4
BNE %BT01
; Next word is the checksum
BL FR_ParallelReadWord
CMP R0,R4
BNE FR_ChecksumError
LDMFD R13!,{PC}
FR_ChecksumError ROUT
MOV R0,#FR_ChecksumErrorState-FR_BorderStateTable
B FR_Error
FR_OffsetError
MOV R0,#FR_OffsetErrorState-FR_BorderStateTable
B FR_Error
FR_BlockCountError
MOV R0,#FR_BlockCountErrorState-FR_BorderStateTable
FR_Error
BL FR_ShowStateBorder
; Wait for front panel button to be pressed
01 LDRB R0,[R11,#IOMD_CLINES]
TST R0,#IOMD_C_FrontPanelButton
BNE %BT01
; Start again (note this also resets the stack pointer)
B FR_RAMCodeStart
FR_ShowStateBorder
STMFD R13!,{R1}
ADR R1,FR_BorderStateTable
LDR R0,[R1,R0]
STR R0,[R10]
LDMFD R13!,{R1}
MOV PC,LR
FR_BorderStateTable
FR_WaitCmdState DCD &40FF0000 ;Waiting for command - Blue
FR_BeginProgramState DCD &40808080 ;Begin Program command - Grey
FR_BeginVerifyState DCD &40404040 ;Begin Verify command - Dark grey
FR_ReadBlockState DCD &40FFFF00 ;Reading block - Cyan
FR_WriteBlockState DCD &4000FF00 ;Writing block - Green
FR_VerifyBlockState DCD &40FFFFFF ;Verifying block - White
FR_OffsetErrorState DCD &400000FF ;Offset error - Red
FR_BlockCountErrorState DCD &4000FFFF ;Block count error - Yellow
FR_ChecksumErrorState DCD &40FF00FF ;Checksum error - Magenta
FR_EraseErrorState DCD &40808000 ;Erase error - Dark Cyan
FR_VoltageRangeErrorState DCD &40000080 ;Voltage range error - Dark Red
FR_DeviceProtectErrorState DCD &40800000 ;Device protect error - Dark Blue
FR_ProgramErrorState DCD &40008080 ;Program error - Dark Yellow
FR_VerifyErrorState DCD &4000BBFF ;Verify error - Orange
FR_ParallelRead ROUT
;Read a byte of data from the parallel port
;On entry
; r9 = Parallel port base address
;On exit
; r0 = byte read
; r1 corrupted
;Set nSLCTIN bit (puts BUSY low) and clear nSTROBE bit (puts nACK high),
;to indicate that we are ready to receive data
MOV R0,#&28 ; Input, IRQ off, BUSY low, nACK high
STRB R0,[R9,#8]
;Now wait until nACK bit (nSTROBE) goes low, meaning a byte is ready to be read
01 LDRB R0,[R9,#4]
TST R0,#&40
BNE %BT01
;Read the byte
LDRB R0,[R9]
;Set nSTROBE bit (puts nACK low) to indicate we read the byte, and
;clear nSLCTIN bit (puts BUSY high) to indicate we are busy and won't accept
;any more data
MOV R1,#&21 ; Input, IRQ off, BUSY high, nACK low
STRB R1,[R9,#8]
;Make sure nACK bit (nSTROBE) has returned high
02 LDRB R0,[R9,#4]
TST R1,#&40
BEQ %BT02
;Finish nAck pulse by clearing nSTROBE bit (puts nACK high). Keep BUSY high
MOV R1,#&20 ; Input, IRQ off, BUSY high, nACK high
STRB R1,[R9,#8]
MOV pc,lr
FR_ParallelReadWord ROUT
;Read a word of data from the parallel port
;On entry
; r9 = Parallel port base address
;On exit
; r0 = word read
; r1-r3 corrupted
MOV R3,LR
BL FR_ParallelRead
MOV R2,R0
BL FR_ParallelRead
ORR R2,R2,R0,LSL #8
BL FR_ParallelRead
ORR R2,R2,R0,LSL #16
BL FR_ParallelRead
ORR R0,R2,R0,LSL #24
MOV PC,R3
FR_MakeROM0Writable
STMFD R13!,{R0}
LDRB R0,[R11,#IOMD_ROMCR0]
ORR R0,R0,#&80
STRB R0,[R11,#IOMD_ROMCR0]
LDMFD R13!,{R0}
MOV PC,LR
FR_MakeROM0ReadOnly
STMFD R13!,{R0}
LDRB R0,[R11,#IOMD_ROMCR0]
BIC R0,R0,#&80
STRB R0,[R11,#IOMD_ROMCR0]
LDMFD R13!,{R0}
MOV PC,LR
FR_ResetToReadArray ROUT
;Reset the flash devices to Read Array mode
STMFD R13!,{R0,R1}
MOV R0,#FR_FlashBase
MOV R1,#&FF
ORR R1,R1,R1,LSL #8
STR R1,[R0] ; Write the Read Array command (&FF) to both devices
LDMFD R13,{R0,R1}
MOV PC,LR
FR_StartErase ROUT
;Start to erase a block (256KB) of flash memory
;On entry
; r0=Block Address (real memory address)
STMFD R13!,{R1}
MOV R1,#&20
ORR R1,R1,R1,LSL #8
STR R1,[R0] ; Write the Block Erase command (&20) to both devices
MOV R1,#&D0
ORR R1,R1,R1,LSL #8
STR R1,[R0] ; Write the Confirm command (&D0) to both devices
LDMFD R13!,{R1}
MOV PC,LR
FR_CheckErase ROUT
;Wait for erase to finish
STMFD R13!,{R0,R1}
MOV R0,#FR_FlashBase
01 LDR R1,[R0] ; Read the status register
TST R1,#&0080 ; Check even SR.7
TSTNE R1,#&8000 ; Check odd SR.7
BEQ %BT01 ; Repeat until both set
TST R1,#&0020 ; Check even SR.5
TSTEQ R1,#&2000 ; Check odd SR.5
BNE FR_ceEraseError
LDMFD R13!,{R0,R1}
MOV PC,LR
FR_ceEraseError
MOV R1,#&50
ORR R1,R1,R1,LSL #8
STR R1,[R0] ; Write Clear Status Register command (&50) to beth devices
BL FR_ResetToReadArray
BL FR_MakeROM0ReadOnly
LDMFD R13!,{R0,R1}
MOV R0,#FR_EraseErrorState-FR_BorderStateTable
B FR_Error
FR_DoWriteBlock ROUT
;Writes a block (256KB) of data to flash memory
;On entry
; r0=Block Address (real memory address)
; r1=Pointer to data to write
;On exit
; r0,r1 have advanced by the block size (256KB)
STMFD R13!,{R2,R3,LR}
MOV R2,R1
MOV R1,R0
MOV R3,#FR_BlockSize
01 BL FR_DoWriteBuffer
SUBS R3,R3,#FR_BufferSize
BNE %BT01
MOV R0,R1
MOV R1,R2
LDMFD R13!,{R2,R3,PC}
FR_DoWriteBuffer ROUT
;Write a buffer full of data (64 bytes) to flash memory
;On entry
; r0=Block Address
; r1=Start Address
; r2=Pointer to data to write
;On exit
; r0 preserved
; r1,r2 have increased by 64 bytes
STMFD R13!,{R3,R4,LR}
MOV R3,#&E8
ORR R3,R3,R3,LSL #8
01 STR R3,[R0] ; Write the Write to Buffer command (&E8) to both devices
LDR R4,[R0] ; Read the XSR
TST R4,#&0080 ; Check even XSR.7
TSTNE R4,#&8000 ; Check odd XSR.7
BEQ %BT01 ; Repeat until both set
MOV R3,#(FR_DeviceBufferSize:SHR:1)-1 ; No. of (16-bit) words to write - 1
ORR R3,R3,R3,LSL #8
STR R3,[R0] ; Write the (16-bit) word count to both devices
MOV R3,#FR_BufferSize
02 LDR R4,[R2],#4
STR R4,[R1],#4 ; Write a (16-bit) word of data to each device
SUBS R3,R3,#4
BNE %BT02
MOV R3,#&D0
ORR R3,R3,R3,LSL #8
STR R3,[R0] ; Write the Confirm command (&D0) to both devices
03 LDR R4,[R0] ; Read the status register
TST R4,#&0080 ; Check even SR.7
TSTNE R4,#&8000 ; Check odd SR.7
BEQ %BT03 ; Repeat until both set
TST R4,#&0008 ; Check even SR.3
TSTEQ R4,#&0800 ; Check odd SR.3
BNE FR_dwbfVoltageRangeError
TST R4,#&0002 ; Check even SR.1
TSTEQ R4,#&0200 ; Check odd SR.1
BNE FR_dwbfDeviceProtectError
TST R4,#&0010 ; Check even SR.4
TSTEQ R4,#&1000 ; Check odd SR.4
BNE FR_dwbfProgramError
; Programming completed successfully
LDMFD R13!,{R3,R4,PC}
FR_dwbfVoltageRangeError
MOV R0,#FR_VoltageRangeErrorState-FR_BorderStateTable
B FR_dwbfErrorExit
FR_dwbfDeviceProtectError
MOV R0,#FR_DeviceProtectErrorState-FR_BorderStateTable
B FR_dwbfErrorExit
FR_dwbfProgramError
MOV R0,#FR_ProgramErrorState-FR_BorderStateTable
FR_dwbfErrorExit
MOV R3,#&50
ORR R3,R3,R3,LSL #8
MOV R4,#FR_FlashBase
STR R1,[R4] ; Write Clear Status Register command (&50) to beth devices
BL FR_ResetToReadArray
BL FR_MakeROM0ReadOnly
LDMFD R13!,{R3,R4,LR}
B FR_Error
FR_VerifyBlock ROUT
;Compare a block (256KB) of data to flash memory
;On entry
; r0=Block Address (real memory address)
; r1=Pointer to block to compare
;On exit
; r0,r1 have advanced by the block size (256KB)
STMFD R13!,{R2-R4}
MOV R2,#FR_BlockSize
01 LDR R3,[R0],#4
LDR R4,[R1],#4
CMP R3,R4
BNE FR_VerifyError
SUBS R2,R2,#4
BNE %BT01
LDMFD R13!,{R2-R4}
MOV PC,LR
FR_VerifyError
MOV R0,#FR_VerifyErrorState-FR_BorderStateTable
B FR_Error
FR_RAMCodeEnd
END
...@@ -217,6 +217,9 @@ IncludeTestSrc SETL {FALSE} :LAND: :LNOT: STB ...@@ -217,6 +217,9 @@ IncludeTestSrc SETL {FALSE} :LAND: :LNOT: STB
GBLL RO371Timings GBLL RO371Timings
RO371Timings SETL :LNOT: STB RO371Timings SETL :LNOT: STB
; For development on Customer M hardware only
GBLL ParallelFlashUpgrade
ParallelFlashUpgrade SETL {FALSE}
[ :LNOT: RO371Timings [ :LNOT: RO371Timings
...@@ -484,6 +487,12 @@ ProcessorVectors SETL {TRUE} ; Processor vectors indirected t ...@@ -484,6 +487,12 @@ ProcessorVectors SETL {TRUE} ; Processor vectors indirected t
GetUnsqueeze SETS "GET s.Unsqueeze" GetUnsqueeze SETS "GET s.Unsqueeze"
| |
GetUnsqueeze SETS "" GetUnsqueeze SETS ""
]
GBLS GetFlashROM
[ ParallelFlashUpgrade
GetFlashROM SETS "GET s.FlashROM"
|
GetFlashROM SETS ""
] ]
GBLS GetPublicWS GBLS GetPublicWS
GBLS GetWorkspace GBLS GetWorkspace
...@@ -630,6 +639,7 @@ largest_rma_size * (128*1024) ; and the ceiling for rma use ...@@ -630,6 +639,7 @@ largest_rma_size * (128*1024) ; and the ceiling for rma use
GET s.Copro15ops ; some macros GET s.Copro15ops ; some macros
GET s.Kernel GET s.Kernel
$GetFlashROM
GET s.NewIRQs GET s.NewIRQs
GET s.Oscli GET s.Oscli
GET s.SysComms GET s.SysComms
......
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
MorrisHeaderCodeSize * (24*4) ;Code occupies less than this, we pad to this boundary so POST code MorrisHeaderCodeSize * (24*4) ;Code occupies less than this, we pad to this boundary so POST code
;has a nicely defined place for its romsize and code entry points ;has a nicely defined place for its romsize and code entry points
[ 1 = 1
; VECTOR AREA: ; VECTOR AREA:
LDR pc, .+ResetIndirection LDR pc, .+ResetIndirection
...@@ -44,43 +43,20 @@ MorrisHeaderCodeSize * (24*4) ;Code occupies less than this, we pad to this bo ...@@ -44,43 +43,20 @@ MorrisHeaderCodeSize * (24*4) ;Code occupies less than this, we pad to this bo
; produced in 16-in-32 form by extracting hex values from a listing... ; produced in 16-in-32 form by extracting hex values from a listing...
DCD &0000B632, &0000E3A0 ; 20: MOV R11, #IO+IOMDREGS - point at IOMD DCD &0000B632, &0000E3A0 ; 20: MOV R11, #IO+IOMDREGS - point at IOMD
DCD &00000000, &0000E3A0 ; 24: MOV R0, #&0 - ROMCR:32b,slow,218.75us,no burst DCD &00000000, &0000E3A0 ; 28: MOV R0, #&0 - ROMCR:32b,slow,218.75us,no burst
DCD &00000080, &0000E5CB ; 28: STRB R0,[R11,#ROMCR0] - switch mode DCD &00000080, &0000E5CB ; 30: STRB R0,[R11,#ROMCR0] - switch mode
DCD &0000F000, &0000E3A0 ; 2C: MOV PC, #0 - jump to 0 (this instr pre-fetched) [ :LNOT: ParallelFlashUpgrade
DCD &0000F000, &0000E3A0 ; 38: MOV PC, #0 - jump to 0 (this instr pre-fetched)
| |
; ; At this point, we know that we're in an ARM 7500-based box with 32-bit ROMs that's
; Kludged to cope with Morris Bugs ; just been powered up. These are the conditions under which we may wish to reprogram
; ; ourselves.
CFR_Offset * (ConsiderFlashROM - ROM - ((.-ROM)/2) - 8)/4
! 0,"<><><><><><><> This kernel version will not softload on a Risc PC <><><><><><><>" DCD CFR_Offset :AND: &FFFF ; 38: B ConsiderFlashROM (this instr pre-fetched)
DCD &0000EA00 + (CFR_Offset:SHR:16)
DCD &E3A0F010
DCD &FFFFE3A0
DCD &E59FF034
DCD &E59FF034
DCD &E59FF034
DCD &E59FF034
DCD &E59FF034
DCD &E59FF034
DCD &E3A0B632
DCD &E3A0E3A0 ; 20: MOV R11, #IO+IOMDREGS - point at IOMD
DCD &E3A00000
DCD &E3A0E3A0 ; 24: MOV R0, #&0 - ROMCR:32b,slow,218.75us,no burst
DCD &E5CB0080
DCD &E3A0E5CB ; 28: STRB R0,[R11,#ROMCR0] - switch mode
DCD &E59FF0F4
DCD &E5CBE59F ; 2C: MOV PC, #0 - jump to 0 (this instr pre-fetched)
] ]
; vector absolute targets for use from physical vector instructions
; vector absolute targets for use from physical vector instructions
UNDEF_VEC DCD UndInstInReset-ROM UNDEF_VEC DCD UndInstInReset-ROM
SWI_VEC DCD SWIInReset -ROM SWI_VEC DCD SWIInReset -ROM
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment