uuu
uuu (Universal Update Utility), mfgtools 3.0
 
Loading...
Searching...
No Matches
sdp.h
Go to the documentation of this file.
1/*
2* Copyright 2018 NXP.
3*
4* Redistribution and use in source and binary forms, with or without modification,
5* are permitted provided that the following conditions are met:
6*
7* Redistributions of source code must retain the above copyright notice, this
8* list of conditions and the following disclaimer.
9*
10* Redistributions in binary form must reproduce the above copyright notice, this
11* list of conditions and the following disclaimer in the documentation and/or
12* other materials provided with the distribution.
13*
14* Neither the name of the NXP Semiconductor nor the names of its
15* contributors may be used to endorse or promote products derived from this
16* software without specific prior written permission.
17*
18* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28* POSSIBILITY OF SUCH DAMAGE.
29*
30*/
31
32#pragma once
33
34#include "cmd.h"
35
36#include <climits>
37
38class FileBuffer;
39class HIDReport;
40
41#pragma pack (1)
42struct SDPCmd {
43 uint16_t m_cmd;
44 uint32_t m_addr;
45 uint8_t m_format;
46 uint32_t m_count;
47 uint32_t m_data;
48 uint8_t m_rsvd;
49};
50
52{
53 uint32_t IvtBarker;
55 uint32_t Reserved;
56 uint32_t DCDAddress;
57 uint32_t BootData;
58 uint32_t SelfAddr;
59 uint32_t Reserved2[2];
60};
61
63{
65 uint32_t ImageSize;
66 uint32_t PluginFlag;
67};
68
69#pragma pack ()
70
71#define ROM_KERNEL_CMD_RD_MEM 0x0101
72#define ROM_KERNEL_CMD_WR_MEM 0x0202
73#define ROM_KERNEL_CMD_WR_FILE 0x0404
74#define ROM_KERNEL_CMD_ERROR_STATUS 0x0505
75#define RAM_KERNEL_CMD_HEADER 0x0606
76//#define ROM_KERNEL_CMD_RE_ENUM 0x0909
77#define ROM_KERNEL_CMD_DCD_WRITE 0x0A0A
78#define ROM_KERNEL_CMD_JUMP_ADDR 0x0B0B
79#define ROM_KERNEL_CMD_SKIP_DCD_HEADER 0x0C0C
80
81#define MAX_DCD_WRITE_REG_CNT 85
82#define ROM_WRITE_ACK 0x128A8A12
83#define ROM_STATUS_ACK 0x88888888
84#define ROM_OK_ACK 0x900DD009
85
86#define IVT_BARKER_HEADER 0x402000D1
87#define IVT_BARKER2_HEADER 0x412000D1
88
89#define HAB_TAG_DCD 0xd2
90
91class SDPCmdBase:public CmdBase
92{
93public:
94
95 enum HAB_t
96 {
98 HabEnabled = 0x12343412,
99 HabDisabled = 0x56787856
100 };
101
102 SDPCmdBase(char *p) :CmdBase(p) { init_cmd(); }
103
104protected:
105 int check_ack(HIDReport *report, uint32_t ack);
107 int get_status(HIDReport *p, uint32_t &status, uint8_t report_id);
108 int init_cmd();
109 IvtHeader * search_ivt_header(std::shared_ptr<DataBuffer> data, size_t &off, size_t limit=ULLONG_MAX);
110
111 std::string m_filename;
113 uint64_t m_scan_limited = UINT64_MAX;
114
115private:
116 int send_cmd(HIDReport *p);
117
118 std::vector<uint8_t> m_input;
119};
120
122{
123public:
124 SDPBootlogCmd(char *p);
125 int run(CmdCtx *) override;
126};
127
128class SDPDcdCmd : public SDPCmdBase
129{
130public:
131 SDPDcdCmd(char *p);
132 int run(CmdCtx *) override;
133
134private:
135 uint32_t m_dcd_addr;
136};
137
139{
140public:
141 SDPReadMemCmd(char*p);
142 int run(CmdCtx *) override;
143
144private:
145 uint32_t m_mem_addr;
147};
148
150{
151public:
152 SDPWriteMemCmd(char*p);
153 int run(CmdCtx *p) override;
154
155private:
156 uint32_t m_mem_addr;
158 uint32_t m_mem_value;
159};
160
162{
163public:
164 SDPWriteCmd(char*p);
165
166 int run(CmdCtx *p) override;
167 int run(CmdCtx *p, void *buff, size_t size, uint32_t addr, bool validate = true);
168
169private:
171 int32_t m_Ivt;
174 uint32_t m_offset;
176 bool m_bskipspl = false;
177 bool m_bskipfhdr = false;
178 bool m_bscanterm = false;
179 bool m_barebox_bl33 = false;
180};
181
182class SDPJumpCmd : public SDPCmdBase
183{
184public:
185 SDPJumpCmd(char*p);
186 int run(CmdCtx *p) override;
187
188private:
189 bool m_clear_dcd = false;
190 int32_t m_Ivt = -1;
191 uint32_t m_jump_addr = 0;
192 bool m_PlugIn = false;
193};
194
196{
197public:
198 SDPSkipDCDCmd(char *p);
199 int run(CmdCtx *p) override;
200};
201
203{
204public:
205 SDPStatusCmd(char *p);
206 int run(CmdCtx *p) override;
207};
208
209class SDPBootCmd : public SDPCmdBase
210{
211public:
212 SDPBootCmd(char *p);
213 int run(CmdCtx *p) override;
214
215private:
216 bool is_barebox_img(void);
217 int load_barebox(CmdCtx *ctx);
218
219 bool m_clear_dcd = false;
220 uint32_t m_dcd_addr = 0;
221 bool m_nojump = false;
222 bool m_barebox = false;
223};
CmdBase()=default
Definition cmd.h:44
Definition buffer.h:164
Definition hidreport.h:40
bool m_nojump
Definition sdp.h:221
bool is_barebox_img(void)
Definition sdp.cpp:248
bool m_clear_dcd
Definition sdp.h:219
int load_barebox(CmdCtx *ctx)
Definition sdp.cpp:265
uint32_t m_dcd_addr
Definition sdp.h:220
SDPBootCmd(char *p)
Definition sdp.cpp:235
int run(CmdCtx *p) override
Definition sdp.cpp:303
bool m_barebox
Definition sdp.h:222
int run(CmdCtx *) override
Definition sdp.cpp:834
SDPBootlogCmd(char *p)
Definition sdp.cpp:829
int check_ack(HIDReport *report, uint32_t ack)
Definition sdp.cpp:46
HAB_t get_hab_type(HIDReport *report)
Definition sdp.cpp:63
std::vector< uint8_t > m_input
Definition sdp.h:118
int get_status(HIDReport *p, uint32_t &status, uint8_t report_id)
Definition sdp.cpp:79
SDPCmd m_spdcmd
Definition sdp.h:112
IvtHeader * search_ivt_header(std::shared_ptr< DataBuffer > data, size_t &off, size_t limit=ULLONG_MAX)
Definition sdp.cpp:104
SDPCmdBase(char *p)
Definition sdp.h:102
HAB_t
Definition sdp.h:96
@ HabUnknown
Definition sdp.h:97
@ HabEnabled
Definition sdp.h:98
@ HabDisabled
Definition sdp.h:99
uint64_t m_scan_limited
Definition sdp.h:113
int send_cmd(HIDReport *p)
Definition sdp.cpp:128
int init_cmd()
Definition sdp.cpp:97
std::string m_filename
Definition sdp.h:111
SDPDcdCmd(char *p)
Definition sdp.cpp:133
int run(CmdCtx *) override
Definition sdp.cpp:141
uint32_t m_dcd_addr
Definition sdp.h:135
bool m_clear_dcd
Definition sdp.h:189
uint32_t m_jump_addr
Definition sdp.h:191
SDPJumpCmd(char *p)
Definition sdp.cpp:724
bool m_PlugIn
Definition sdp.h:192
int32_t m_Ivt
Definition sdp.h:190
int run(CmdCtx *p) override
Definition sdp.cpp:735
SDPReadMemCmd(char *p)
Definition sdp.cpp:602
uint32_t m_mem_addr
Definition sdp.h:145
uint8_t m_mem_format
Definition sdp.h:146
int run(CmdCtx *) override
Definition sdp.cpp:611
int run(CmdCtx *p) override
Definition sdp.cpp:219
SDPSkipDCDCmd(char *p)
Definition sdp.cpp:214
int run(CmdCtx *p) override
Definition sdp.cpp:380
SDPStatusCmd(char *p)
Definition sdp.cpp:374
uint32_t m_download_addr
Definition sdp.h:170
uint32_t m_offset
Definition sdp.h:174
int run(CmdCtx *p) override
Definition sdp.cpp:424
bool m_bIvtReserve
Definition sdp.h:175
bool m_bskipfhdr
Definition sdp.h:177
SDPWriteCmd(char *p)
Definition sdp.cpp:400
bool m_barebox_bl33
Definition sdp.h:179
int32_t m_Ivt
Definition sdp.h:171
int m_PlugIn
Definition sdp.h:172
bool m_bskipspl
Definition sdp.h:176
bool m_bscanterm
Definition sdp.h:178
uint32_t m_max_download_pre_cmd
Definition sdp.h:173
uint32_t m_mem_value
Definition sdp.h:158
uint8_t m_mem_format
Definition sdp.h:157
SDPWriteMemCmd(char *p)
Definition sdp.cpp:667
int run(CmdCtx *p) override
Definition sdp.cpp:677
uint32_t m_mem_addr
Definition sdp.h:156
Definition sdp.h:63
uint32_t ImageStartAddr
Definition sdp.h:64
uint32_t PluginFlag
Definition sdp.h:66
uint32_t ImageSize
Definition sdp.h:65
Definition sdp.h:52
uint32_t ImageStartAddr
Definition sdp.h:54
uint32_t IvtBarker
Definition sdp.h:53
uint32_t Reserved
Definition sdp.h:55
uint32_t SelfAddr
Definition sdp.h:58
uint32_t DCDAddress
Definition sdp.h:56
uint32_t Reserved2[2]
Definition sdp.h:59
uint32_t BootData
Definition sdp.h:57
Definition sdp.h:42
uint8_t m_format
Definition sdp.h:45
uint16_t m_cmd
Definition sdp.h:43
uint32_t m_count
Definition sdp.h:46
uint8_t m_rsvd
Definition sdp.h:48
uint32_t m_data
Definition sdp.h:47
uint32_t m_addr
Definition sdp.h:44