camerad: IFE debayer support (#33720)
	
		
	
				
					
				
			* ife is up * split out cdm, bps needs this too * straight to vipc buffer * start reducing the diff * support both * disable for now * cleanup --------- Co-authored-by: Comma Device <device@comma.ai>bob-test
							parent
							
								
									6f40dec427
								
							
						
					
					
						commit
						8e8f61ad35
					
				
				 11 changed files with 931 additions and 85 deletions
			
			
		| @ -1 +1 @@ | ||||
| Subproject commit a3b51b311fa45b0f67eb087bb5c1ef2a79e6ed91 | ||||
| Subproject commit 3e17f865bbd3bbabb3841227ed0774c8fb74efef | ||||
| @ -0,0 +1,33 @@ | ||||
| #include "cdm.h" | ||||
| 
 | ||||
| int write_cont(uint8_t *dst, uint32_t reg, std::vector<uint32_t> vals) { | ||||
|   struct cdm_regcontinuous_cmd *cmd = (struct cdm_regcontinuous_cmd*)dst; | ||||
|   cmd->cmd = CAM_CDM_CMD_REG_CONT; | ||||
|   cmd->count = vals.size(); | ||||
|   cmd->offset = reg; | ||||
|   cmd->reserved0 = 0; | ||||
|   cmd->reserved1 = 0; | ||||
| 
 | ||||
|   uint32_t *vd = (uint32_t*)(dst + sizeof(struct cdm_regcontinuous_cmd)); | ||||
|   for (int i = 0; i < vals.size(); i++) { | ||||
|     *vd = vals[i]; | ||||
|     vd++; | ||||
|   } | ||||
| 
 | ||||
|   return sizeof(struct cdm_regcontinuous_cmd) + vals.size()*sizeof(uint32_t); | ||||
| } | ||||
| 
 | ||||
| int write_random(uint8_t *dst, std::vector<uint32_t> vals) { | ||||
|   struct cdm_regrandom_cmd *cmd = (struct cdm_regrandom_cmd*)dst; | ||||
|   cmd->cmd = CAM_CDM_CMD_REG_RANDOM; | ||||
|   cmd->count = vals.size() / 2; | ||||
|   cmd->reserved = 0; | ||||
| 
 | ||||
|   uint32_t *vd = (uint32_t*)(dst + sizeof(struct cdm_regrandom_cmd)); | ||||
|   for (int i = 0; i < vals.size(); i++) { | ||||
|     *vd = vals[i]; | ||||
|     vd++; | ||||
|   } | ||||
| 
 | ||||
|   return sizeof(struct cdm_regrandom_cmd) + vals.size()*sizeof(uint32_t); | ||||
| } | ||||
| @ -0,0 +1,767 @@ | ||||
| #include "cdm.h" | ||||
| 
 | ||||
| int build_initial_config(uint8_t *dst) { | ||||
|   uint8_t *start = dst; | ||||
| 
 | ||||
|   // constants, some kind of HW quirk?
 | ||||
|   dst += write_random(dst, { | ||||
|     0x2c, 0xffffffff, | ||||
|     0x30, 0xffffffff, | ||||
|     0x34, 0xffffffff, | ||||
|     0x38, 0xffffffff, | ||||
|     0x3c, 0xffffffff, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x478, { | ||||
|     0x00000004, | ||||
|     0x004000c0, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x488, { | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x00000f0f, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x49c, { | ||||
|     0x00000001, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xce4, { | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x4dc, { | ||||
|     0x00000000, | ||||
|     0x04050b84, | ||||
|     0x13031a82, | ||||
|     0x22022981, | ||||
|     0x3100387f, | ||||
|     0x04010b80, | ||||
|     0x13001a80, | ||||
|     0x2200297f, | ||||
|     0x30ff387f, | ||||
|     0x04050b84, | ||||
|     0x13031a82, | ||||
|     0x22022981, | ||||
|     0x3100387f, | ||||
|     0x04010b80, | ||||
|     0x13001a80, | ||||
|     0x2200297f, | ||||
|     0x30ff387f, | ||||
|     0x04050b84, | ||||
|     0x13031a82, | ||||
|     0x22022981, | ||||
|     0x3100387f, | ||||
|     0x04010b80, | ||||
|     0x13001a80, | ||||
|     0x2200297f, | ||||
|     0x30ff387f, | ||||
|     0x04050b84, | ||||
|     0x13031a82, | ||||
|     0x22022981, | ||||
|     0x3100387f, | ||||
|     0x04010b80, | ||||
|     0x13001a80, | ||||
|     0x2200297f, | ||||
|     0x30ff387f, | ||||
|   }); | ||||
|   /* TODO
 | ||||
|   cdm_dmi_cmd_t 248 | ||||
|     .length = 287 | ||||
|     .reserved = 33 | ||||
|     .cmd = 11 | ||||
|     .addr = 0 | ||||
|     .DMIAddr = 3108 | ||||
|     .DMISel = 9 | ||||
|   */ | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x560, { | ||||
|     0x00000001, | ||||
|     0x04440444, | ||||
|     0x04450445, | ||||
|     0x04440444, | ||||
|     0x04450445, | ||||
|     0x000000ca, | ||||
|     0x0000009c, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x5e8, { | ||||
|     0x06363005, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x5f4, { | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x3b3839a0, | ||||
|     0x003f8040, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x00078000, | ||||
|     0x00078000, | ||||
|     0x00078000, | ||||
|     0x00078000, | ||||
|     0x00078000, | ||||
|     0x00078000, | ||||
|     0x00078000, | ||||
|     0x00078000, | ||||
|     0x00000009, | ||||
|     0x00400808, | ||||
|     0x00000044, | ||||
|     0x004000a0, | ||||
|     0x0a0d00a6, | ||||
|     0x0a0d00a6, | ||||
|   }); | ||||
|   /* TODO
 | ||||
|   cdm_dmi_cmd_t 392 | ||||
|     .length = 255 | ||||
|     .reserved = 33 | ||||
|     .cmd = 10 | ||||
|     .addr = 0 | ||||
|     .DMIAddr = 3108 | ||||
|     .DMISel = 12 | ||||
|   */ | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x6bc, { | ||||
|     0x0b3c0000, | ||||
|     0x00670067, | ||||
|     0xd3b1300c, | ||||
|     0x13b1300c, | ||||
|     0x00670067, | ||||
|     0xd3b1300c, | ||||
|     0x13b1300c, | ||||
|     0xec4e4000, | ||||
|     0x0100c003, | ||||
|     0xec4e4000, | ||||
|     0x0100c003, | ||||
|   }); | ||||
|   /* TODO
 | ||||
|   cdm_dmi_cmd_t 444 | ||||
|     .length = 883 | ||||
|     .reserved = 33 | ||||
|     .cmd = 10 | ||||
|     .addr = 0 | ||||
|     .DMIAddr = 3108 | ||||
|     .DMISel = 14 | ||||
|   */ | ||||
|   /* TODO
 | ||||
|   cdm_dmi_cmd_t 444 | ||||
|     .length = 883 | ||||
|     .reserved = 33 | ||||
|     .cmd = 10 | ||||
|     .addr = 0 | ||||
|     .DMIAddr = 3108 | ||||
|     .DMISel = 15 | ||||
|   */ | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x6fc, { | ||||
|     0x00bf0080, | ||||
|     0x00000106, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x6f8, { | ||||
|     0x00000100, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x71c, { | ||||
|     0x00008000, | ||||
|     0x08000066, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x760, { | ||||
|     0x00800080, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x00800080, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x00800080, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x794, { | ||||
|     0x00000000, | ||||
|   }); | ||||
|   /* TODO
 | ||||
|   cdm_dmi_cmd_t 568 | ||||
|     .length = 511 | ||||
|     .reserved = 33 | ||||
|     .cmd = 11 | ||||
|     .addr = 0 | ||||
|     .DMIAddr = 3108 | ||||
|     .DMISel = 24 | ||||
|   */ | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x798, { | ||||
|     0x00000000, | ||||
|   }); | ||||
|   /* TODO
 | ||||
|   cdm_dmi_cmd_t 580 | ||||
|     .length = 255 | ||||
|     .reserved = 33 | ||||
|     .cmd = 10 | ||||
|     .addr = 0 | ||||
|     .DMIAddr = 3108 | ||||
|     .DMISel = 26 | ||||
|   */ | ||||
|   /* TODO
 | ||||
|   cdm_dmi_cmd_t 580 | ||||
|     .length = 255 | ||||
|     .reserved = 33 | ||||
|     .cmd = 10 | ||||
|     .addr = 0 | ||||
|     .DMIAddr = 3108 | ||||
|     .DMISel = 28 | ||||
|   */ | ||||
|   /* TODO
 | ||||
|   cdm_dmi_cmd_t 580 | ||||
|     .length = 255 | ||||
|     .reserved = 33 | ||||
|     .cmd = 10 | ||||
|     .addr = 0 | ||||
|     .DMIAddr = 3108 | ||||
|     .DMISel = 30 | ||||
|   */ | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xf30, { | ||||
|     0x00750259, | ||||
|     0x00000132, | ||||
|     0x00000000, | ||||
|     0x03ff0000, | ||||
|     0x01fe1eae, | ||||
|     0x00001f54, | ||||
|     0x02000000, | ||||
|     0x03ff0000, | ||||
|     0x1fad1e55, | ||||
|     0x000001fe, | ||||
|     0x02000000, | ||||
|     0x03ff0000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xa3c, { | ||||
|     0x00000003, | ||||
|     0x07870787, | ||||
|     0x30036666, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x00000787, | ||||
|     0x04b704b7, | ||||
|     0x30036666, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x000004b7, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xa68, { | ||||
|     0x00000003, | ||||
|     0x03c30787, | ||||
|     0x3006cccc, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x00000787, | ||||
|     0x025b04b7, | ||||
|     0x3006cccc, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x00000787, | ||||
|   }); | ||||
| 
 | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xe10, { | ||||
|     0x000004b7, | ||||
|     0x00000787, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xe30, { | ||||
|     0x0000025b, | ||||
|     0x00000787, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xe18, { | ||||
|     0x0ff00000, | ||||
|     0x00000016, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xe38, { | ||||
|     0x0ff00000, | ||||
|     0x00000017, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xd84, { | ||||
|     0x000004b7, | ||||
|     0x00000787, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xda4, { | ||||
|     0x000004b7, | ||||
|     0x00000787, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xd60, { | ||||
|     0x04380300, | ||||
|     0x09016c7d, | ||||
|     0x021c0300, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xd98, { | ||||
|     0x0ff00000, | ||||
|     0x00000016, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xdb8, { | ||||
|     0x0ff00000, | ||||
|     0x00000017, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xd6c, { | ||||
|     0x00000300, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xd70, { | ||||
|     0x010e0f00, | ||||
|     0x09016c7d, | ||||
|     0x00870f00, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xd7c, { | ||||
|     0x00000f00, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x40, { | ||||
|     0x00000586, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x48, { | ||||
|     0x0000000e, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x4c, { | ||||
|     0x00000019, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xe4c, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xe6c, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xe0c, { | ||||
|     0x00000e00, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xe2c, { | ||||
|     0x00000e00, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xd8c, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xdac, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xdcc, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xdec, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x44, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xaac, { | ||||
|     0x00000040, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xf00, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   //hexdump(start, dst - start);
 | ||||
|   return dst - start; | ||||
| } | ||||
| 
 | ||||
| int build_first_update(uint8_t *dst) { | ||||
|   uint8_t *start = dst; | ||||
| 
 | ||||
|   dst += write_random(dst, { | ||||
|     0x2c, 0xffffffff, | ||||
|     0x30, 0xffffffff, | ||||
|     0x34, 0xffffffff, | ||||
|     0x38, 0xffffffff, | ||||
|     0x3c, 0xffffffff, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x4dc, { | ||||
|     0x00000001, | ||||
|     0x04050b84, | ||||
|     0x13031a82, | ||||
|     0x22022981, | ||||
|     0x3100387f, | ||||
|     0x04010b80, | ||||
|     0x13001a80, | ||||
|     0x2200297f, | ||||
|     0x30ff387f, | ||||
|     0x04050b84, | ||||
|     0x13031a82, | ||||
|     0x22022981, | ||||
|     0x3100387f, | ||||
|     0x04010b80, | ||||
|     0x13001a80, | ||||
|     0x2200297f, | ||||
|     0x30ff387f, | ||||
|     0x04050b84, | ||||
|     0x13031a82, | ||||
|     0x22022981, | ||||
|     0x3100387f, | ||||
|     0x04010b80, | ||||
|     0x13001a80, | ||||
|     0x2200297f, | ||||
|     0x30ff387f, | ||||
|     0x04050b84, | ||||
|     0x13031a82, | ||||
|     0x22022981, | ||||
|     0x3100387f, | ||||
|     0x04010b80, | ||||
|     0x13001a80, | ||||
|     0x2200297f, | ||||
|     0x30ff387f, | ||||
|   }); | ||||
|   /* TODO
 | ||||
|   cdm_dmi_cmd_t 184 | ||||
|     .length = 287 | ||||
|     .reserved = 33 | ||||
|     .cmd = 11 | ||||
|     .addr = 832 | ||||
|     .DMIAddr = 3108 | ||||
|     .DMISel = 10 | ||||
|   */ | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x560, { | ||||
|     0x00000001, | ||||
|     0x04440444, | ||||
|     0x04450445, | ||||
|     0x04440444, | ||||
|     0x04450445, | ||||
|     0x000000ca, | ||||
|     0x0000009c, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x5c4, { | ||||
|     0x00000000, | ||||
|     0x00001000, | ||||
|     0x00001000, | ||||
|     0x00001000, | ||||
|     0x00001000, | ||||
|     0x00800080, | ||||
|     0x00802040, | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x5e8, { | ||||
|     0x06363007, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x5f4, { | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x3b3839a0, | ||||
|     0x003f8040, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|     0x00078000, | ||||
|     0x00078000, | ||||
|     0x00078000, | ||||
|     0x00078000, | ||||
|     0x00078000, | ||||
|     0x00078000, | ||||
|     0x00078000, | ||||
|     0x00078000, | ||||
|     0x00000009, | ||||
|     0x00400808, | ||||
|     0x00000044, | ||||
|     0x004000a0, | ||||
|     0x0a0d00a6, | ||||
|     0x0a0d00a6, | ||||
|   }); | ||||
|   /* TODO
 | ||||
|   cdm_dmi_cmd_t 368 | ||||
|     .length = 255 | ||||
|     .reserved = 33 | ||||
|     .cmd = 10 | ||||
|     .addr = 5344 | ||||
|     .DMIAddr = 3108 | ||||
|     .DMISel = 13 | ||||
|   */ | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x6fc, { | ||||
|     0x00800080, | ||||
|     0x00000080, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x6f8, { | ||||
|     0x00000100, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x71c, { | ||||
|     0x00008000, | ||||
|     0x08000066, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x794, { | ||||
|     0x00000001, | ||||
|   }); | ||||
|   /* TODO
 | ||||
|   cdm_dmi_cmd_t 432 | ||||
|     .length = 511 | ||||
|     .reserved = 33 | ||||
|     .cmd = 11 | ||||
|     .addr = 832 | ||||
|     .DMIAddr = 3108 | ||||
|     .DMISel = 25 | ||||
|   */ | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x798, { | ||||
|     0x00000007, | ||||
|   }); | ||||
|   /* TODO
 | ||||
|   cdm_dmi_cmd_t 444 | ||||
|     .length = 255 | ||||
|     .reserved = 33 | ||||
|     .cmd = 10 | ||||
|     .addr = 5344 | ||||
|     .DMIAddr = 3108 | ||||
|     .DMISel = 27 | ||||
|   */ | ||||
|   /* TODO
 | ||||
|   cdm_dmi_cmd_t 444 | ||||
|     .length = 255 | ||||
|     .reserved = 33 | ||||
|     .cmd = 10 | ||||
|     .addr = 5344 | ||||
|     .DMIAddr = 3108 | ||||
|     .DMISel = 29 | ||||
|   */ | ||||
|   /* TODO
 | ||||
|   cdm_dmi_cmd_t 444 | ||||
|     .length = 255 | ||||
|     .reserved = 33 | ||||
|     .cmd = 10 | ||||
|     .addr = 5344 | ||||
|     .DMIAddr = 3108 | ||||
|     .DMISel = 31 | ||||
|   */ | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xd84, { | ||||
|     0x000004b7, | ||||
|     0x00000787, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xda4, { | ||||
|     0x000004b7, | ||||
|     0x00000787, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xd6c, { | ||||
|     0x00000300, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xd70, { | ||||
|     0x02640f00, | ||||
|     0x09016c7d, | ||||
|     0x01320f00, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xd7c, { | ||||
|     0x00000f00, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x40, { | ||||
|     0x00000444, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x48, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x4c, { | ||||
|     0x00000019, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xe4c, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xe6c, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xe0c, { | ||||
|     0x00000e00, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xe2c, { | ||||
|     0x00000e00, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xd8c, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xdac, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xdcc, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xdec, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x44, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xaac, { | ||||
|     0x00000040, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xf00, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   return dst - start; | ||||
| } | ||||
| 
 | ||||
| int build_update(uint8_t *dst) { | ||||
|   uint8_t *start = dst; | ||||
| 
 | ||||
|   dst += write_random(dst, { | ||||
|     0x2c, 0xffffffff, | ||||
|     0x30, 0xffffffff, | ||||
|     0x34, 0xffffffff, | ||||
|     0x38, 0xffffffff, | ||||
|     0x3c, 0xffffffff, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x560, { | ||||
|     0x00000001, | ||||
|     0x04440444, | ||||
|     0x04450445, | ||||
|     0x04440444, | ||||
|     0x04450445, | ||||
|     0x000000ca, | ||||
|     0x0000009c, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x6fc, { | ||||
|     0x00800080, | ||||
|     0x00000080, | ||||
|     0x00000000, | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xd84, { | ||||
|     0x000004b7, | ||||
|     0x00000787, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xda4, { | ||||
|     0x000004b7, | ||||
|     0x00000787, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xd6c, { | ||||
|     0x00000300, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xd70, { | ||||
|     0x02640f00, | ||||
|     0x09016c7d, | ||||
|     0x01320f00, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xd7c, { | ||||
|     0x00000f00, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x40, { | ||||
|     0x00000444, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x48, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x4c, { | ||||
|     0x00000019, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xe4c, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xe6c, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xe0c, { | ||||
|     0x00000e00, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xe2c, { | ||||
|     0x00000e00, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xd8c, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xdac, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xdcc, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xdec, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0x44, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xaac, { | ||||
|     0x00000040, | ||||
|   }); | ||||
| 
 | ||||
|   dst += write_cont(dst, 0xf00, { | ||||
|     0x00000000, | ||||
|   }); | ||||
| 
 | ||||
|   return dst - start; | ||||
| } | ||||
					Loading…
					
					
				
		Reference in new issue