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