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