xref: /rk3399_rockchip-uboot/drivers/usb/gadget/f_rockusb.c (revision 1d38ed875d76ce3a81d4d204e3d7fc6bcb3af7bf)
1 /*
2  * Copyright 2017 Rockchip Electronics Co., Ltd
3  * Frank Wang <frank.wang@rock-chips.com>
4  *
5  * SPDX-License-Identifier:	GPL-2.0+
6  */
7 
8 #include <asm/io.h>
9 #include <android_avb/avb_ops_user.h>
10 #include <android_avb/rk_avb_ops_user.h>
11 #include <asm/arch/boot_mode.h>
12 #include <asm/arch/chip_info.h>
13 #include <asm/arch/rk_atags.h>
14 #include <write_keybox.h>
15 #include <linux/mtd/mtd.h>
16 #include <optee_include/OpteeClientInterface.h>
17 #include <dm.h>
18 #include <misc.h>
19 #include <mmc.h>
20 #include <scsi.h>
21 #include <stdlib.h>
22 #include <usbplug.h>
23 
24 #ifdef CONFIG_ROCKCHIP_VENDOR_PARTITION
25 #include <asm/arch/vendor.h>
26 #endif
27 #include <rockusb.h>
28 
29 #define ROCKUSB_INTERFACE_CLASS	0xff
30 #define ROCKUSB_INTERFACE_SUB_CLASS	0x06
31 #define ROCKUSB_INTERFACE_PROTOCOL	0x05
32 
33 #define ROCKCHIP_FLASH_BLOCK_SIZE	1024
34 #define ROCKCHIP_FLASH_PAGE_SIZE	4
35 
36 static struct usb_interface_descriptor rkusb_intf_desc = {
37 	.bLength		= USB_DT_INTERFACE_SIZE,
38 	.bDescriptorType	= USB_DT_INTERFACE,
39 	.bInterfaceNumber	= 0x00,
40 	.bAlternateSetting	= 0x00,
41 	.bNumEndpoints		= 0x02,
42 	.bInterfaceClass	= ROCKUSB_INTERFACE_CLASS,
43 	.bInterfaceSubClass	= ROCKUSB_INTERFACE_SUB_CLASS,
44 	.bInterfaceProtocol	= ROCKUSB_INTERFACE_PROTOCOL,
45 };
46 
47 static struct usb_descriptor_header *rkusb_fs_function[] = {
48 	(struct usb_descriptor_header *)&rkusb_intf_desc,
49 	(struct usb_descriptor_header *)&fsg_fs_bulk_in_desc,
50 	(struct usb_descriptor_header *)&fsg_fs_bulk_out_desc,
51 	NULL,
52 };
53 
54 static struct usb_descriptor_header *rkusb_hs_function[] = {
55 	(struct usb_descriptor_header *)&rkusb_intf_desc,
56 	(struct usb_descriptor_header *)&fsg_hs_bulk_in_desc,
57 	(struct usb_descriptor_header *)&fsg_hs_bulk_out_desc,
58 	NULL,
59 };
60 
61 static struct usb_descriptor_header *rkusb_ss_function[] = {
62 	(struct usb_descriptor_header *)&rkusb_intf_desc,
63 	(struct usb_descriptor_header *)&fsg_ss_bulk_in_desc,
64 	(struct usb_descriptor_header *)&fsg_ss_bulk_in_comp_desc,
65 	(struct usb_descriptor_header *)&fsg_ss_bulk_out_desc,
66 	(struct usb_descriptor_header *)&fsg_ss_bulk_out_comp_desc,
67 	NULL,
68 };
69 
70 struct rk_flash_info {
71 	u32	flash_size;
72 	u16	block_size;
73 	u8	page_size;
74 	u8	ecc_bits;
75 	u8	access_time;
76 	u8	manufacturer;
77 	u8	flash_mask;
78 } __packed;
79 
80 static int rkusb_rst_code; /* The subcode in reset command (0xFF) */
81 
82 int g_dnl_bind_fixup(struct usb_device_descriptor *dev, const char *name)
83 {
84 	if (IS_RKUSB_UMS_DNL(name)) {
85 		/* Fix to Rockchip's VID and PID */
86 		dev->idVendor  = __constant_cpu_to_le16(0x2207);
87 		dev->idProduct = __constant_cpu_to_le16(CONFIG_ROCKUSB_G_DNL_PID);
88 
89 		/* Enumerate as a loader device */
90 #if defined(CONFIG_SUPPORT_USBPLUG)
91 		dev->bcdUSB = cpu_to_le16(0x0200);
92 #else
93 		dev->bcdUSB = cpu_to_le16(0x0201);
94 #endif
95 	} else if (!strncmp(name, "usb_dnl_fastboot", 16)) {
96 		/* Fix to Google's VID and PID */
97 		dev->idVendor  = __constant_cpu_to_le16(0x18d1);
98 		dev->idProduct = __constant_cpu_to_le16(0xd00d);
99 	} else if (!strncmp(name, "usb_dnl_dfu", 11)) {
100 		/* Fix to Rockchip's VID and PID for DFU */
101 		dev->idVendor  = cpu_to_le16(0x2207);
102 		dev->idProduct = cpu_to_le16(0x0107);
103 	} else if (!strncmp(name, "usb_dnl_ums", 11)) {
104 		dev->idVendor  = cpu_to_le16(0x2207);
105 		dev->idProduct = cpu_to_le16(0x0010);
106 	}
107 
108 	return 0;
109 }
110 
111 __maybe_unused
112 static inline void dump_cbw(struct fsg_bulk_cb_wrap *cbw)
113 {
114 	assert(!cbw);
115 
116 	debug("%s:\n", __func__);
117 	debug("Signature %x\n", cbw->Signature);
118 	debug("Tag %x\n", cbw->Tag);
119 	debug("DataTransferLength %x\n", cbw->DataTransferLength);
120 	debug("Flags %x\n", cbw->Flags);
121 	debug("LUN %x\n", cbw->Lun);
122 	debug("Length %x\n", cbw->Length);
123 	debug("OptionCode %x\n", cbw->CDB[0]);
124 	debug("SubCode %x\n", cbw->CDB[1]);
125 	debug("SectorAddr %x\n", get_unaligned_be32(&cbw->CDB[2]));
126 	debug("BlkSectors %x\n\n", get_unaligned_be16(&cbw->CDB[7]));
127 }
128 
129 static int rkusb_check_lun(struct fsg_common *common)
130 {
131 	struct fsg_lun *curlun;
132 
133 	/* Check the LUN */
134 	if (common->lun >= 0 && common->lun < common->nluns) {
135 		curlun = &common->luns[common->lun];
136 		if (common->cmnd[0] != SC_REQUEST_SENSE) {
137 			curlun->sense_data = SS_NO_SENSE;
138 			curlun->info_valid = 0;
139 		}
140 	} else {
141 		curlun = NULL;
142 		common->bad_lun_okay = 0;
143 
144 		/*
145 		 * INQUIRY and REQUEST SENSE commands are explicitly allowed
146 		 * to use unsupported LUNs; all others may not.
147 		 */
148 		if (common->cmnd[0] != SC_INQUIRY &&
149 		    common->cmnd[0] != SC_REQUEST_SENSE) {
150 			debug("unsupported LUN %d\n", common->lun);
151 			return -EINVAL;
152 		}
153 	}
154 
155 	return 0;
156 }
157 
158 static void __do_reset(struct usb_ep *ep, struct usb_request *req)
159 {
160 	u32 boot_flag = BOOT_NORMAL;
161 
162 	if (rkusb_rst_code == 0x03)
163 		boot_flag = BOOT_BROM_DOWNLOAD;
164 
165 	rkusb_rst_code = 0; /* restore to default */
166 	writel(boot_flag, (void *)CONFIG_ROCKCHIP_BOOT_MODE_REG);
167 
168 	do_reset(NULL, 0, 0, NULL);
169 }
170 
171 static int rkusb_do_reset(struct fsg_common *common,
172 			  struct fsg_buffhd *bh)
173 {
174 	common->data_size_from_cmnd = common->cmnd[4];
175 	common->residue = 0;
176 	bh->inreq->complete = __do_reset;
177 	bh->state = BUF_STATE_EMPTY;
178 
179 	rkusb_rst_code = !common->cmnd[1] ? 0xff : common->cmnd[1];
180 	return 0;
181 }
182 
183 __weak bool rkusb_usb3_capable(void)
184 {
185 	return false;
186 }
187 
188 static int rkusb_do_switch_to_usb3(struct fsg_common *common,
189 				   struct fsg_buffhd *bh)
190 {
191 	g_dnl_set_serialnumber((char *)&common->cmnd[1]);
192 	rkusb_switch_to_usb3_enable(true);
193 	bh->state = BUF_STATE_EMPTY;
194 
195 	return 0;
196 }
197 
198 static int rkusb_do_test_unit_ready(struct fsg_common *common,
199 				    struct fsg_buffhd *bh)
200 {
201 	struct blk_desc *desc = &ums[common->lun].block_dev;
202 	u32 usb_trb_size;
203 	u16 residue;
204 
205 	if ((desc->if_type == IF_TYPE_MTD && desc->devnum == BLK_MTD_SPI_NOR) ||
206 	    desc->if_type == IF_TYPE_SPINOR)
207 		residue = 0x03; /* 128KB Max block xfer for SPI Nor */
208 	else if (common->cmnd[1] == 0xf7 && FSG_BUFLEN >= 0x400000)
209 		residue = 0x0a; /* Max block xfer for USB DWC3 */
210 	else
211 		residue = 0x06; /* Max block xfer support from host */
212 
213 	usb_trb_size = (1 << residue) * 4096;
214 	common->usb_trb_size = min(usb_trb_size, FSG_BUFLEN);
215 	common->residue = residue << 24;
216 	common->data_dir = DATA_DIR_NONE;
217 	bh->state = BUF_STATE_EMPTY;
218 
219 	return 0;
220 }
221 
222 static int rkusb_do_read_flash_id(struct fsg_common *common,
223 				  struct fsg_buffhd *bh)
224 {
225 	u8 *buf = (u8 *)bh->buf;
226 	u32 len = 5;
227 	enum if_type type = ums[common->lun].block_dev.if_type;
228 	u32 devnum = ums[common->lun].block_dev.devnum;
229 	const char *str;
230 
231 	switch (type) {
232 	case IF_TYPE_MMC:
233 		str = "EMMC ";
234 		break;
235 	case IF_TYPE_RKNAND:
236 		str = "NAND ";
237 		break;
238 	case IF_TYPE_MTD:
239 		if (devnum == BLK_MTD_SPI_NAND)
240 			str ="SNAND";
241 		else if (devnum == BLK_MTD_NAND)
242 			str = "NAND ";
243 		else
244 			str = "NOR  ";
245 		break;
246 	default:
247 		str = "UNKN "; /* unknown */
248 		break;
249 	}
250 
251 	memcpy((void *)&buf[0], str, len);
252 
253 	/* Set data xfer size */
254 	common->residue = common->data_size_from_cmnd = len;
255 	common->data_size = len;
256 
257 	return len;
258 }
259 
260 static int rkusb_do_test_bad_block(struct fsg_common *common,
261 				   struct fsg_buffhd *bh)
262 {
263 	u8 *buf = (u8 *)bh->buf;
264 	u32 len = 64;
265 
266 	memset((void *)&buf[0], 0, len);
267 
268 	/* Set data xfer size */
269 	common->residue = common->data_size_from_cmnd = len;
270 	common->data_size = len;
271 
272 	return len;
273 }
274 
275 static int rkusb_do_read_flash_info(struct fsg_common *common,
276 				    struct fsg_buffhd *bh)
277 {
278 	struct blk_desc *desc = &ums[common->lun].block_dev;
279 	u8 *buf = (u8 *)bh->buf;
280 	u32 len = sizeof(struct rk_flash_info);
281 	struct rk_flash_info finfo = {
282 		.block_size = ROCKCHIP_FLASH_BLOCK_SIZE,
283 		.ecc_bits = 0,
284 		.page_size = ROCKCHIP_FLASH_PAGE_SIZE,
285 		.access_time = 40,
286 		.manufacturer = 0,
287 		.flash_mask = 0
288 	};
289 
290 	finfo.flash_size = (u32)desc->lba;
291 
292 	if (desc->if_type == IF_TYPE_MTD &&
293 	    (desc->devnum == BLK_MTD_NAND ||
294 	    desc->devnum == BLK_MTD_SPI_NAND)) {
295 		struct mtd_info *mtd = (struct mtd_info *)desc->bdev->priv;
296 
297 		if (mtd) {
298 			finfo.block_size = mtd->erasesize >> 9;
299 			finfo.page_size = mtd->writesize >> 9;
300 		}
301 	}
302 
303 	if (desc->if_type == IF_TYPE_MTD && desc->devnum == BLK_MTD_SPI_NOR) {
304 		/* RV1126/RK3308 mtd spinor keep the former upgrade mode */
305 #if !defined(CONFIG_ROCKCHIP_RV1126) && !defined(CONFIG_ROCKCHIP_RK3308)
306 		finfo.block_size = 0x80; /* Aligned to 64KB */
307 #else
308 		finfo.block_size = ROCKCHIP_FLASH_BLOCK_SIZE;
309 #endif
310 	}
311 
312 	debug("Flash info: block_size= %x page_size= %x\n", finfo.block_size,
313 	      finfo.page_size);
314 
315 	if (finfo.flash_size)
316 		finfo.flash_mask = 1;
317 
318 	memset((void *)&buf[0], 0, len);
319 	memcpy((void *)&buf[0], (void *)&finfo, len);
320 
321 	/* Set data xfer size */
322 	common->residue = common->data_size_from_cmnd = len;
323         /* legacy upgrade_tool does not set correct transfer size */
324 	common->data_size = len;
325 
326 	return len;
327 }
328 
329 static int rkusb_do_get_chip_info(struct fsg_common *common,
330 				  struct fsg_buffhd *bh)
331 {
332 	u8 *buf = (u8 *)bh->buf;
333 	u32 len = common->data_size;
334 	u32 chip_info[4];
335 
336 	memset((void *)chip_info, 0, sizeof(chip_info));
337 	rockchip_rockusb_get_chip_info(chip_info);
338 
339 	memset((void *)&buf[0], 0, len);
340 	memcpy((void *)&buf[0], (void *)chip_info, len);
341 
342 	/* Set data xfer size */
343 	common->residue = common->data_size_from_cmnd = len;
344 
345 	return len;
346 }
347 
348 static int rkusb_do_lba_erase(struct fsg_common *common,
349 			      struct fsg_buffhd *bh)
350 {
351 	struct fsg_lun *curlun = &common->luns[common->lun];
352 	u32 lba, amount;
353 	loff_t file_offset;
354 	int rc;
355 
356 	lba = get_unaligned_be32(&common->cmnd[2]);
357 	if (lba >= curlun->num_sectors) {
358 		curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
359 		rc = -EINVAL;
360 		goto out;
361 	}
362 
363 	file_offset = ((loff_t) lba) << 9;
364 	amount = get_unaligned_be16(&common->cmnd[7]) << 9;
365 	if (unlikely(amount == 0)) {
366 		curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
367 		rc = -EIO;
368 		goto out;
369 	}
370 
371 	/* Perform the erase */
372 	rc = ums[common->lun].erase_sector(&ums[common->lun],
373 			       file_offset / SECTOR_SIZE,
374 			       amount / SECTOR_SIZE);
375 	if (!rc) {
376 		curlun->sense_data = SS_MEDIUM_NOT_PRESENT;
377 		rc = -EIO;
378 	}
379 
380 out:
381 	common->data_dir = DATA_DIR_NONE;
382 	bh->state = BUF_STATE_EMPTY;
383 
384 	return rc;
385 }
386 
387 static int rkusb_do_erase_force(struct fsg_common *common,
388 				struct fsg_buffhd *bh)
389 {
390 	struct blk_desc *desc = &ums[common->lun].block_dev;
391 	struct fsg_lun *curlun = &common->luns[common->lun];
392 	u16 block_size = ROCKCHIP_FLASH_BLOCK_SIZE;
393 	u32 lba, amount;
394 	loff_t file_offset;
395 	int rc;
396 
397 	lba = get_unaligned_be32(&common->cmnd[2]);
398 	if (lba >= curlun->num_sectors) {
399 		curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
400 		rc = -EINVAL;
401 		goto out;
402 	}
403 
404 	if (desc->if_type == IF_TYPE_MTD &&
405 	    (desc->devnum == BLK_MTD_NAND ||
406 	    desc->devnum == BLK_MTD_SPI_NAND)) {
407 		struct mtd_info *mtd = (struct mtd_info *)desc->bdev->priv;
408 
409 		if (mtd)
410 			block_size = mtd->erasesize >> 9;
411 	}
412 
413 	file_offset = ((loff_t)lba) * block_size;
414 	amount = get_unaligned_be16(&common->cmnd[7]) * block_size;
415 
416 	debug("%s lba= %x, nsec= %x\n", __func__, lba,
417 	      (u32)get_unaligned_be16(&common->cmnd[7]));
418 
419 	if (unlikely(amount == 0)) {
420 		curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
421 		rc = -EIO;
422 		goto out;
423 	}
424 
425 	/* Perform the erase */
426 	rc = ums[common->lun].erase_sector(&ums[common->lun],
427 					   file_offset,
428 					   amount);
429 	if (!rc) {
430 		curlun->sense_data = SS_MEDIUM_NOT_PRESENT;
431 		rc = -EIO;
432 	}
433 
434 out:
435 	common->data_dir = DATA_DIR_NONE;
436 	bh->state = BUF_STATE_EMPTY;
437 
438 	return rc;
439 }
440 
441 #ifdef CONFIG_ROCKCHIP_VENDOR_PARTITION
442 static int rkusb_do_vs_write(struct fsg_common *common)
443 {
444 	struct fsg_lun		*curlun = &common->luns[common->lun];
445 	u16			type = get_unaligned_be16(&common->cmnd[4]);
446 	struct vendor_item	*vhead;
447 	struct fsg_buffhd	*bh;
448 	void			*data;
449 	int			rc;
450 
451 	if (common->data_size >= (u32)65536) {
452 		/* _MUST_ small than 64K */
453 		curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
454 		return -EINVAL;
455 	}
456 
457 	common->residue         = common->data_size;
458 	common->usb_amount_left = common->data_size;
459 
460 	/* Carry out the file writes */
461 	if (unlikely(common->data_size == 0))
462 		return -EIO; /* No data to write */
463 
464 	for (;;) {
465 		if (common->usb_amount_left > 0) {
466 			/* Wait for the next buffer to become available */
467 			bh = common->next_buffhd_to_fill;
468 			if (bh->state != BUF_STATE_EMPTY)
469 				goto wait;
470 
471 			/* Request the next buffer */
472 			common->usb_amount_left      -= common->data_size;
473 			bh->outreq->length	     = common->data_size;
474 			bh->bulk_out_intended_length = common->data_size;
475 			bh->outreq->short_not_ok     = 1;
476 
477 			START_TRANSFER_OR(common, bulk_out, bh->outreq,
478 					  &bh->outreq_busy, &bh->state)
479 				/*
480 				 * Don't know what to do if
481 				 * common->fsg is NULL
482 				 */
483 				return -EIO;
484 			common->next_buffhd_to_fill = bh->next;
485 		} else {
486 			/* Then, wait for the data to become available */
487 			bh = common->next_buffhd_to_drain;
488 			if (bh->state != BUF_STATE_FULL)
489 				goto wait;
490 
491 			common->next_buffhd_to_drain = bh->next;
492 			bh->state = BUF_STATE_EMPTY;
493 
494 			/* Did something go wrong with the transfer? */
495 			if (bh->outreq->status != 0) {
496 				curlun->sense_data = SS_COMMUNICATION_FAILURE;
497 				curlun->info_valid = 1;
498 				break;
499 			}
500 
501 			/* Perform the write */
502 			vhead = (struct vendor_item *)bh->buf;
503 			data  = bh->buf + sizeof(struct vendor_item);
504 
505 			if (!type) {
506 				#ifndef CONFIG_SUPPORT_USBPLUG
507 				if (vhead->id == HDCP_14_HDMI_ID ||
508 				    vhead->id == HDCP_14_HDMIRX_ID ||
509 				    vhead->id == HDCP_14_DP_ID) {
510 					rc = vendor_handle_hdcp(vhead);
511 					if (rc < 0) {
512 						curlun->sense_data = SS_WRITE_ERROR;
513 						return -EIO;
514 					}
515 				}
516 				#endif
517 
518 				/* Vendor storage */
519 				rc = vendor_storage_write(vhead->id,
520 							  (char __user *)data,
521 							  vhead->size);
522 				if (rc < 0) {
523 					curlun->sense_data = SS_WRITE_ERROR;
524 					return -EIO;
525 				}
526 			} else if (type == 1) {
527 				/* RPMB */
528 				rc =
529 				write_keybox_to_secure_storage((u8 *)data,
530 							       vhead->size);
531 				if (rc < 0) {
532 					curlun->sense_data = SS_WRITE_ERROR;
533 					return -EIO;
534 				}
535 			} else if (type == 2) {
536 				/* security storage */
537 #ifdef CONFIG_RK_AVB_LIBAVB_USER
538 				debug("%s call rk_avb_write_perm_attr %d, %d\n",
539 				      __func__, vhead->id, vhead->size);
540 				rc = rk_avb_write_perm_attr(vhead->id,
541 							    (char __user *)data,
542 							    vhead->size);
543 				if (rc < 0) {
544 					curlun->sense_data = SS_WRITE_ERROR;
545 					return -EIO;
546 				}
547 #else
548 				printf("Please enable CONFIG_RK_AVB_LIBAVB_USER\n");
549 #endif
550 			} else if (type == 3) {
551 				/* efuse or otp*/
552 #ifdef CONFIG_OPTEE_CLIENT
553 				if (memcmp(data, "TAEK", 4) == 0) {
554 					if (vhead->size - 8 != 32) {
555 						printf("check ta encryption key size fail!\n");
556 						curlun->sense_data = SS_WRITE_ERROR;
557 						return -EIO;
558 					}
559 					if (trusty_write_ta_encryption_key((uint32_t *)(data + 8), 8) != 0) {
560 						printf("trusty_write_ta_encryption_key error!");
561 						curlun->sense_data = SS_WRITE_ERROR;
562 						return -EIO;
563 					}
564 				} else if (memcmp(data, "EHUK", 4) == 0) {
565 					if (vhead->size - 8 != 32) {
566 						printf("check oem huk size fail!\n");
567 						curlun->sense_data = SS_WRITE_ERROR;
568 						return -EIO;
569 					}
570 					if (trusty_write_oem_huk((uint32_t *)(data + 8), 8) != 0) {
571 						printf("trusty_write_oem_huk error!");
572 						curlun->sense_data = SS_WRITE_ERROR;
573 						return -EIO;
574 					}
575 				} else if (memcmp(data, "ENDA", 4) == 0) {
576 					if (vhead->size - 8 != 16) {
577 						printf("check oem encrypt data size fail!\n");
578 						curlun->sense_data = SS_WRITE_ERROR;
579 						return -EIO;
580 					}
581 					if (trusty_write_oem_encrypt_data((uint32_t *)(data + 8), 4) != 0) {
582 						printf("trusty_write_oem_encrypt_data error!");
583 						curlun->sense_data = SS_WRITE_ERROR;
584 						return -EIO;
585 					}
586 				} else if (memcmp(data, "OTPK", 4) == 0) {
587 					uint32_t key_len = vhead->size - 9;
588 					uint8_t key_id = *((uint8_t *)data + 8);
589 					if (key_len != 16 && key_len != 24 && key_len != 32) {
590 						printf("check oem otp key size fail!\n");
591 						curlun->sense_data = SS_WRITE_ERROR;
592 						return -EIO;
593 					}
594 					if (trusty_write_oem_otp_key(key_id, (uint8_t *)(data + 9), key_len) != 0) {
595 						printf("trusty_write_oem_huk error!");
596 						curlun->sense_data = SS_WRITE_ERROR;
597 						return -EIO;
598 					}
599 				} else {
600 					printf("Unknown tag\n");
601 					curlun->sense_data = SS_WRITE_ERROR;
602 					return -EIO;
603 				}
604 #else
605 				printf("Please enable CONFIG_OPTEE_CLIENT\n");
606 #endif
607 			} else {
608 				return -EINVAL;
609 			}
610 
611 			common->residue -= common->data_size;
612 
613 			/* Did the host decide to stop early? */
614 			if (bh->outreq->actual != bh->outreq->length)
615 				common->short_packet_received = 1;
616 			break; /* Command done */
617 		}
618 wait:
619 		/* Wait for something to happen */
620 		rc = sleep_thread(common);
621 		if (rc)
622 			return rc;
623 	}
624 
625 	return -EIO; /* No default reply */
626 }
627 
628 static int rkusb_do_vs_read(struct fsg_common *common)
629 {
630 	struct fsg_lun		*curlun = &common->luns[common->lun];
631 	u16			type = get_unaligned_be16(&common->cmnd[4]);
632 	struct vendor_item	*vhead;
633 	struct fsg_buffhd	*bh;
634 	void			*data;
635 	int			rc;
636 
637 	if (common->data_size >= (u32)65536) {
638 		/* _MUST_ small than 64K */
639 		curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
640 		return -EINVAL;
641 	}
642 
643 	common->residue         = common->data_size;
644 	common->usb_amount_left = common->data_size;
645 
646 	/* Carry out the file reads */
647 	if (unlikely(common->data_size == 0))
648 		return -EIO; /* No default reply */
649 
650 	for (;;) {
651 		/* Wait for the next buffer to become available */
652 		bh = common->next_buffhd_to_fill;
653 		while (bh->state != BUF_STATE_EMPTY) {
654 			rc = sleep_thread(common);
655 			if (rc)
656 				return rc;
657 		}
658 
659 		memset(bh->buf, 0, FSG_BUFLEN);
660 		vhead = (struct vendor_item *)bh->buf;
661 		data  = bh->buf + sizeof(struct vendor_item);
662 		vhead->id = get_unaligned_be16(&common->cmnd[2]);
663 
664 		if (!type) {
665 			/* Vendor storage */
666 			rc = vendor_storage_read(vhead->id,
667 						 (char __user *)data,
668 						 common->data_size);
669 			if (!rc) {
670 				curlun->sense_data = SS_UNRECOVERED_READ_ERROR;
671 				return -EIO;
672 			}
673 			vhead->size = rc;
674 		} else if (type == 1) {
675 			/* RPMB */
676 			rc =
677 			read_raw_data_from_secure_storage((u8 *)data,
678 							  common->data_size);
679 			if (!rc) {
680 				curlun->sense_data = SS_UNRECOVERED_READ_ERROR;
681 				return -EIO;
682 			}
683 			vhead->size = rc;
684 		} else if (type == 2) {
685 			/* security storage */
686 #ifdef CONFIG_RK_AVB_LIBAVB_USER
687 			rc = rk_avb_read_perm_attr(vhead->id,
688 						   (char __user *)data,
689 						   vhead->size);
690 			if (rc < 0)
691 				return -EIO;
692 			vhead->size = rc;
693 #else
694 			printf("Please enable CONFIG_RK_AVB_LIBAVB_USER!\n");
695 #endif
696 		} else if (type == 3) {
697 			/* efuse or otp*/
698 #ifdef CONFIG_OPTEE_CLIENT
699 			if (vhead->id == 120) {
700 				u8 value;
701 				char *written_str = "key is written!";
702 				char *not_written_str = "key is not written!";
703 				if (trusty_ta_encryption_key_is_written(&value) != 0) {
704 					printf("trusty_ta_encryption_key_is_written error!");
705 					return -EIO;
706 				}
707 				if (value) {
708 					memcpy(data, written_str, strlen(written_str));
709 					vhead->size = strlen(written_str);
710 				} else {
711 					memcpy(data, not_written_str, strlen(not_written_str));
712 					vhead->size = strlen(not_written_str);
713 				}
714 			} else {
715 				printf("Unknown tag\n");
716 				return -EIO;
717 			}
718 #else
719 			printf("Please enable CONFIG_OPTEE_CLIENT\n");
720 #endif
721 		} else {
722 			return -EINVAL;
723 		}
724 
725 		common->residue   -= common->data_size;
726 		bh->inreq->length = common->data_size;
727 		bh->state         = BUF_STATE_FULL;
728 
729 		break; /* No more left to read */
730 	}
731 
732 	return -EIO; /* No default reply */
733 }
734 #endif
735 
736 static int rkusb_do_switch_storage(struct fsg_common *common)
737 {
738 	enum if_type type, cur_type = ums[common->lun].block_dev.if_type;
739 	int devnum, cur_devnum = ums[common->lun].block_dev.devnum;
740 	struct blk_desc *block_dev;
741 	u32 media = BOOT_TYPE_UNKNOWN;
742 
743 	media = 1 << common->cmnd[1];
744 
745 	switch (media) {
746 #ifdef CONFIG_MMC
747 	case BOOT_TYPE_EMMC:
748 		type = IF_TYPE_MMC;
749 		devnum = 0;
750 		mmc_initialize(gd->bd);
751 		break;
752 #endif
753 	case BOOT_TYPE_MTD_BLK_NAND:
754 		type = IF_TYPE_MTD;
755 		devnum = 0;
756 		break;
757 	case BOOT_TYPE_MTD_BLK_SPI_NAND:
758 		type = IF_TYPE_MTD;
759 		devnum = 1;
760 		break;
761 	case BOOT_TYPE_MTD_BLK_SPI_NOR:
762 		type = IF_TYPE_MTD;
763 		devnum = 2;
764 		break;
765 #if defined(CONFIG_SCSI) && defined(CONFIG_CMD_SCSI) && (defined(CONFIG_AHCI) || defined(CONFIG_UFS))
766 	case BOOT_TYPE_SATA:
767 		type = IF_TYPE_SCSI;
768 		devnum = 0;
769 		break;
770 #endif
771 	default:
772 		printf("Bootdev 0x%x is not support\n", media);
773 		return -ENODEV;
774 	}
775 
776 	if (cur_type == type && cur_devnum == devnum)
777 		return 0;
778 
779 #if CONFIG_IS_ENABLED(SUPPORT_USBPLUG)
780 	block_dev = usbplug_blk_get_devnum_by_type(type, devnum);
781 #else
782 	block_dev = blk_get_devnum_by_type(type, devnum);
783 #endif
784 	if (!block_dev) {
785 		printf("Bootdev if_type=%d num=%d toggle fail\n", type, devnum);
786 		return -ENODEV;
787 	}
788 
789 	ums[common->lun].num_sectors = block_dev->lba;
790 	ums[common->lun].block_dev = *block_dev;
791 
792 	printf("RKUSB: LUN %d, dev %d, hwpart %d, sector %#x, count %#x\n",
793 	       0,
794 	       ums[common->lun].block_dev.devnum,
795 	       ums[common->lun].block_dev.hwpart,
796 	       ums[common->lun].start_sector,
797 	       ums[common->lun].num_sectors);
798 
799 	return 0;
800 }
801 
802 static int rkusb_do_get_storage_info(struct fsg_common *common,
803 				     struct fsg_buffhd *bh)
804 {
805 	enum if_type type = ums[common->lun].block_dev.if_type;
806 	int devnum = ums[common->lun].block_dev.devnum;
807 	u32 media = BOOT_TYPE_UNKNOWN;
808 	u32 len = common->data_size;
809 	u8 *buf = (u8 *)bh->buf;
810 
811 	if (len > 4)
812 		len = 4;
813 
814 	switch (type) {
815 	case IF_TYPE_MMC:
816 		media = BOOT_TYPE_EMMC;
817 		break;
818 
819 	case IF_TYPE_SD:
820 		media = BOOT_TYPE_SD0;
821 		break;
822 
823 	case IF_TYPE_MTD:
824 		if (devnum == BLK_MTD_SPI_NAND)
825 			media = BOOT_TYPE_MTD_BLK_SPI_NAND;
826 		else if (devnum == BLK_MTD_NAND)
827 			media = BOOT_TYPE_NAND;
828 		else
829 			media = BOOT_TYPE_MTD_BLK_SPI_NOR;
830 		break;
831 
832 	case IF_TYPE_SCSI:
833 		media = BOOT_TYPE_SATA;
834 		break;
835 
836 	case IF_TYPE_RKNAND:
837 		media = BOOT_TYPE_NAND;
838 		break;
839 
840 	case IF_TYPE_NVME:
841 		media = BOOT_TYPE_PCIE;
842 		break;
843 
844 	default:
845 		break;
846 	}
847 
848 	memcpy((void *)&buf[0], (void *)&media, len);
849 	common->residue = len;
850 	common->data_size_from_cmnd = len;
851 
852 	return len;
853 }
854 
855 static int rkusb_do_read_capacity(struct fsg_common *common,
856 				  struct fsg_buffhd *bh)
857 {
858 	u8 *buf = (u8 *)bh->buf;
859 	u32 len = common->data_size;
860 	enum if_type type = ums[common->lun].block_dev.if_type;
861 	int devnum = ums[common->lun].block_dev.devnum;
862 
863 	/*
864 	 * bit[0]: Direct LBA, 0: Disabled;
865 	 * bit[1]: Vendor Storage API, 0: Disabed (default);
866 	 * bit[2]: First 4M Access, 0: Disabled;
867 	 * bit[3]: Read LBA On, 0: Disabed (default);
868 	 * bit[4]: New Vendor Storage API, 0: Disabed;
869 	 * bit[5]: Read uart data from ram
870 	 * bit[6]: Read IDB config
871 	 * bit[7]: Read SecureMode
872 	 * bit[8]: New IDB feature
873 	 * bit[9]: Get storage media info
874 	 * bit[10]: LBAwrite Parity
875 	 * bit[11]: Read Otp Data
876 	 * bit[12]: usb3 download
877 	 * bit[13]: Write OTP proof
878 	 * bit[14]: Write Cipher Key
879 	 * bit[15:63}: Reserved.
880 	 */
881 	memset((void *)&buf[0], 0, len);
882 	if (type == IF_TYPE_MMC || type == IF_TYPE_SD || type == IF_TYPE_NVME)
883 		buf[0] = BIT(0) | BIT(2) | BIT(4);
884 	else
885 		buf[0] = BIT(0) | BIT(4);
886 
887 	if (type == IF_TYPE_MTD &&
888 	    (devnum == BLK_MTD_NAND ||
889 	    devnum == BLK_MTD_SPI_NAND))
890 		buf[0] |= (1 << 6);
891 
892 #if !defined(CONFIG_ROCKCHIP_RV1126) && !defined(CONFIG_ROCKCHIP_RK3308)
893 	if (type == IF_TYPE_MTD && devnum == BLK_MTD_SPI_NOR)
894 		buf[0] |= (1 << 6);
895 #endif
896 
897 #if defined(CONFIG_ROCKCHIP_NEW_IDB)
898 	buf[1] = BIT(0);
899 #endif
900 	buf[1] |= BIT(1); /* Switch Storage */
901 	buf[1] |= BIT(2); /* LBAwrite Parity */
902 
903 	if (rkusb_usb3_capable() && !rkusb_force_usb2_enabled())
904 		buf[1] |= BIT(4);
905 	else
906 		buf[1] &= ~BIT(4);
907 
908 #ifdef CONFIG_ROCKCHIP_OTP
909 	buf[1] |= BIT(3); /* Read Otp Data */
910 	buf[1] |= BIT(5); /* Write OTP proof */
911 	buf[1] |= BIT(6); /* Write Cipher Key */
912 #endif
913 
914 	/* Set data xfer size */
915 	common->residue = len;
916 	common->data_size_from_cmnd = len;
917 
918 	return len;
919 }
920 
921 #ifdef CONFIG_ROCKCHIP_OTP
922 static int rkusb_do_read_otp(struct fsg_common *common,
923 			       struct fsg_buffhd *bh)
924 {
925 	u32 len = common->data_size;
926 	u32 type = common->cmnd[1];
927 	u8 *buf = (u8 *)bh->buf;
928 	struct udevice *dev;
929 
930 	buf[0] = 0;
931 	if (type == 0) { /* soc uuid */
932 		if (!uclass_get_device_by_driver(UCLASS_MISC, DM_GET_DRIVER(rockchip_otp), &dev)) {
933 			if (!misc_read(dev, CFG_CPUID_OFFSET, (void *)&buf[1], len))
934 				buf[0] = len;
935 		}
936 	}
937 
938 	common->residue = len;
939 	common->data_size_from_cmnd = len;
940 
941 	return len;
942 }
943 #endif
944 
945 static void rkusb_fixup_cbwcb(struct fsg_common *common,
946 			      struct fsg_buffhd *bh)
947 {
948 	struct usb_request      *req = bh->outreq;
949 	struct fsg_bulk_cb_wrap *cbw = req->buf;
950 
951 	/* FIXME cbw.DataTransferLength was not set by Upgrade Tool */
952 	common->data_size = le32_to_cpu(cbw->DataTransferLength);
953 	if (common->data_size == 0) {
954 		common->data_size =
955 		get_unaligned_be16(&common->cmnd[7]) << 9;
956 		printf("Trasfer Length NOT set, please use new version tool\n");
957 		debug("%s %d, cmnd1 %x\n", __func__,
958 		      get_unaligned_be16(&common->cmnd[7]),
959 		      get_unaligned_be16(&common->cmnd[1]));
960 	}
961 	if (cbw->Flags & USB_BULK_IN_FLAG)
962 		common->data_dir = DATA_DIR_TO_HOST;
963 	else
964 		common->data_dir = DATA_DIR_FROM_HOST;
965 
966 	/* Not support */
967 	common->cmnd[1] = 0;
968 }
969 
970 static int rkusb_cmd_process(struct fsg_common *common,
971 			     struct fsg_buffhd *bh, int *reply)
972 {
973 	struct usb_request	*req = bh->outreq;
974 	struct fsg_bulk_cb_wrap	*cbw = req->buf;
975 	int rc;
976 
977 	dump_cbw(cbw);
978 
979 	if (rkusb_check_lun(common)) {
980 		*reply = -EINVAL;
981 		return RKUSB_RC_ERROR;
982 	}
983 
984 	switch (common->cmnd[0]) {
985 	case RKUSB_TEST_UNIT_READY:
986 		*reply = rkusb_do_test_unit_ready(common, bh);
987 		rc = RKUSB_RC_FINISHED;
988 		break;
989 
990 	case RKUSB_READ_FLASH_ID:
991 		*reply = rkusb_do_read_flash_id(common, bh);
992 		rc = RKUSB_RC_FINISHED;
993 		break;
994 
995 	case RKUSB_TEST_BAD_BLOCK:
996 		*reply = rkusb_do_test_bad_block(common, bh);
997 		rc = RKUSB_RC_FINISHED;
998 		break;
999 
1000 	case RKUSB_ERASE_10_FORCE:
1001 		*reply = rkusb_do_erase_force(common, bh);
1002 		rc = RKUSB_RC_FINISHED;
1003 		break;
1004 
1005 	case RKUSB_LBA_READ_10:
1006 		rkusb_fixup_cbwcb(common, bh);
1007 		common->cmnd[0] = SC_READ_10;
1008 		common->cmnd[1] = 0; /* Not support */
1009 		rc = RKUSB_RC_CONTINUE;
1010 		break;
1011 
1012 	case RKUSB_LBA_WRITE_10:
1013 		rkusb_fixup_cbwcb(common, bh);
1014 		common->cmnd[0] = SC_WRITE_10;
1015 		common->cmnd[1] = 0; /* Not support */
1016 		rc = RKUSB_RC_CONTINUE;
1017 		break;
1018 
1019 	case RKUSB_READ_FLASH_INFO:
1020 		*reply = rkusb_do_read_flash_info(common, bh);
1021 		rc = RKUSB_RC_FINISHED;
1022 		break;
1023 
1024 	case RKUSB_GET_CHIP_VER:
1025 		*reply = rkusb_do_get_chip_info(common, bh);
1026 		rc = RKUSB_RC_FINISHED;
1027 		break;
1028 
1029 	case RKUSB_LBA_ERASE:
1030 		*reply = rkusb_do_lba_erase(common, bh);
1031 		rc = RKUSB_RC_FINISHED;
1032 		break;
1033 
1034 #ifdef CONFIG_ROCKCHIP_VENDOR_PARTITION
1035 	case RKUSB_VS_WRITE:
1036 		*reply = rkusb_do_vs_write(common);
1037 		rc = RKUSB_RC_FINISHED;
1038 		break;
1039 
1040 	case RKUSB_VS_READ:
1041 		*reply = rkusb_do_vs_read(common);
1042 		rc = RKUSB_RC_FINISHED;
1043 		break;
1044 #endif
1045 	case RKUSB_SWITCH_STORAGE:
1046 		*reply = rkusb_do_switch_storage(common);
1047 		rc = RKUSB_RC_FINISHED;
1048 		break;
1049 	case RKUSB_GET_STORAGE_MEDIA:
1050 		*reply = rkusb_do_get_storage_info(common, bh);
1051 		rc = RKUSB_RC_FINISHED;
1052 		break;
1053 
1054 	case RKUSB_READ_CAPACITY:
1055 		*reply = rkusb_do_read_capacity(common, bh);
1056 		rc = RKUSB_RC_FINISHED;
1057 		break;
1058 
1059 	case RKUSB_SWITCH_USB3:
1060 		*reply = rkusb_do_switch_to_usb3(common, bh);
1061 		rc = RKUSB_RC_FINISHED;
1062 		break;
1063 
1064 	case RKUSB_RESET:
1065 		*reply = rkusb_do_reset(common, bh);
1066 		rc = RKUSB_RC_FINISHED;
1067 		break;
1068 
1069 #ifdef CONFIG_ROCKCHIP_OTP
1070 	case RKUSB_READ_OTP_DATA:
1071 		*reply = rkusb_do_read_otp(common, bh);
1072 		rc = RKUSB_RC_FINISHED;
1073 		break;
1074 #endif
1075 
1076 	case RKUSB_READ_10:
1077 	case RKUSB_WRITE_10:
1078 		printf("CMD Not support, pls use new version Tool\n");
1079 	case RKUSB_SET_DEVICE_ID:
1080 	case RKUSB_ERASE_10:
1081 	case RKUSB_WRITE_SPARE:
1082 	case RKUSB_READ_SPARE:
1083 	case RKUSB_GET_VERSION:
1084 	case RKUSB_ERASE_SYS_DISK:
1085 	case RKUSB_SDRAM_READ_10:
1086 	case RKUSB_SDRAM_WRITE_10:
1087 	case RKUSB_SDRAM_EXECUTE:
1088 	case RKUSB_LOW_FORMAT:
1089 	case RKUSB_SET_RESET_FLAG:
1090 	case RKUSB_SPI_READ_10:
1091 	case RKUSB_SPI_WRITE_10:
1092 		/* Fall through */
1093 	default:
1094 		rc = RKUSB_RC_UNKNOWN_CMND;
1095 		break;
1096 	}
1097 
1098 	return rc;
1099 }
1100 
1101 int rkusb_do_check_parity(struct fsg_common *common)
1102 {
1103 	int ret = 0, rc;
1104 	u32 parity, i, usb_parity, lba, len;
1105 	static u32 usb_check_buffer[1024 * 256];
1106 
1107 	usb_parity = common->cmnd[9] | (common->cmnd[10] << 8) |
1108 			(common->cmnd[11] << 16) | (common->cmnd[12] << 24);
1109 
1110 	if (common->cmnd[0] == SC_WRITE_10 && (usb_parity)) {
1111 		lba = get_unaligned_be32(&common->cmnd[2]);
1112 		len = common->data_size_from_cmnd >> 9;
1113 		rc = blk_dread(&ums[common->lun].block_dev, lba, len, usb_check_buffer);
1114 		parity = 0x000055aa;
1115 		for (i = 0; i < len * 128; i++)
1116 			parity += usb_check_buffer[i];
1117 		if (!rc || parity != usb_parity)
1118 			common->phase_error = 1;
1119 	}
1120 
1121 	return ret;
1122 }
1123 
1124 DECLARE_GADGET_BIND_CALLBACK(rkusb_ums_dnl, fsg_add);
1125