summaryrefslogtreecommitdiff
path: root/src/nv3p.h
blob: d09442a67e396ce7bccf6741b16e6b3fb70fb552 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
/*
 * Copyright (c) 2011, NVIDIA CORPORATION
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *  * Neither the name of NVIDIA CORPORATION nor the names of its
 *    contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
#ifndef NV3P_H
#define NV3P_H

#include "usb.h"

// nv3p protocol version
#define NV3P_VERSION   1

// Defines the maximum length of a string, including null terminator.
#define NV3P_STRING_MAX (32)

// commands
#define NV3P_CMD_GET_PLATFORM_INFO       0x01
#define NV3P_CMD_DL_BCT                  0x04
#define NV3P_CMD_DL_BL                   0x06
#define NV3P_CMD_STATUS                  0x0a

// nack codes
#define NV3P_NACK_SUCCESS                0x1
#define NV3P_NACK_BAD_CMD                0x2
#define NV3P_NACK_BAD_DATA               0x3

// Holds the handle to the nv3p state.
typedef struct nv3p_state *nv3p_handle_t;

// tegra2 chip sku
#define TEGRA2_CHIP_SKU_AP20     0x01
#define TEGRA2_CHIP_SKU_T20      0x08
#define TEGRA2_CHIP_SKU_T25SE    0x14
#define TEGRA2_CHIP_SKU_AP25     0x17
#define TEGRA2_CHIP_SKU_T25      0x18
#define TEGRA2_CHIP_SKU_AP25E    0x1b
#define TEGRA2_CHIP_SKU_T25E     0x1c

// tegra3 chip sku
#define TEGRA3_CHIP_SKU_AP30     0x87
#define TEGRA3_CHIP_SKU_T30      0x81
#define TEGRA3_CHIP_SKU_T30S     0x83

// boot device type
#define NV3P_DEV_TYPE_NAND              0x1
#define NV3P_DEV_TYPE_EMMC              0x2
#define NV3P_DEV_TYPE_SPI               0x3
#define NV3P_DEV_TYPE_IDE               0x4
#define NV3P_DEV_TYPE_NAND_X16          0x5
#define NV3P_DEV_TYPE_SNOR              0x6
#define NV3P_DEV_TYPE_MUX_ONE_NAND      0x7
#define NV3P_DEV_TYPE_MOBILE_LBA_NAND   0x8

/*
 * Defines sizes for packet headers in bytes.
 */
#define NV3P_PACKET_SIZE_BASIC      (3 * 4)
#define NV3P_PACKET_SIZE_COMMAND    (2 * 4)
#define NV3P_PACKET_SIZE_DATA       (1 * 4)
#define NV3P_PACKET_SIZE_ENCRYPTED  (1 * 4)
#define NV3P_PACKET_SIZE_FOOTER     (1 * 4)
#define NV3P_PACKET_SIZE_ACK        (0 * 4)
#define NV3P_PACKET_SIZE_NACK       (1 * 4)

// packet type
#define NV3P_PACKET_TYPE_CMD        0x1
#define NV3P_PACKET_TYPE_DATA       0x2
#define NV3P_PACKET_TYPE_ENCRYPTED  0x3
#define NV3P_PACKET_TYPE_ACK        0x4
#define NV3P_PACKET_TYPE_NACK       0x5

/*
 * Holds the chip ID.
 */
typedef struct {
	uint16_t id;
	uint8_t major;
	uint8_t minor;
} nv3p_chip_id_t;

/*
 * board ID
 */
typedef struct {
	uint32_t board_no;
	uint32_t fab;
	uint32_t mem_type;
	uint32_t freq;
} nv3p_board_id_t;

/*
 * Command arguments.
 */

/*
 * nv3p_cmd_status_t: high-level ACK/NACK for commands. This may be used in
 * the event of a mass-storage device failure, etc.
 */
typedef struct {
	char msg[NV3P_STRING_MAX];
	uint32_t code;
	uint32_t flags; // reseved for now
} nv3p_cmd_status_t;

/*
 * nv3p_platform_info_t: retrieves the system information. All paramters
 * are output parameters.
 */
typedef struct {
	uint64_t uid[2];
	nv3p_chip_id_t chip_id;
	uint32_t sku;
	uint32_t version;
	uint32_t boot_device;
	uint32_t op_mode;
	uint32_t dev_conf_strap;
	uint32_t dev_conf_fuse;
	uint32_t sdram_conf_strap;
	uint32_t reserved[2];
	nv3p_board_id_t board_id;
} nv3p_platform_info_t;


/*
 * nv3p_cmd_dl_bct_t: downloads the system's BCT.
 */
typedef struct {
	uint32_t length;
} nv3p_cmd_dl_bct_t;

/*
 * nv3p_cmd_dl_bl_t: downloads the system's bootloader.
 */
typedef struct {
	uint64_t length;
	uint32_t address; // Load address
	uint32_t entry; // Execution entry point
} nv3p_cmd_dl_bl_t;

int nv3p_open(nv3p_handle_t *h3p, usb_device_t *usb);
void nv3p_close(nv3p_handle_t h3p);
int nv3p_cmd_send(nv3p_handle_t h3p, uint32_t command, void *args);
int nv3p_cmd_recv(nv3p_handle_t h3p, uint32_t *command,	void **args);
int nv3p_data_send(nv3p_handle_t h3p, uint8_t *data, uint32_t length);
void nv3p_ack(nv3p_handle_t h3p);

#endif // NV3P_H