Commit e7225315 authored by Sebastian Andrzej Siewior's avatar Sebastian Andrzej Siewior Committed by Felipe Balbi
Browse files

usb: dwc3: debugfs: remove test mode interface



There are some issues around for enabling/disabling this mode and
handling it. It does not work perfectly (yet). However we have a few
gadgets tested successfuly so far. That means we are quite confident
that we won't need this in near future.
So I'm for removing it and bringing a working version back once there is
a need for it.

Thanks to Dan Carpenter who spotted the wrong memory handling here.

[ balbi@ti.com : made it actually apply ]

Cc: Dan Carpenter <error27@gmail.com>
Cc: wharms@bfs.de
Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent c7fcdeb2
Loading
Loading
Loading
Loading
+0 −94
Original line number Diff line number Diff line
@@ -406,93 +406,6 @@ static const struct file_operations dwc3_regdump_fops = {
	.release		= single_release,
};


static int dwc3_send_testmode_cmd(struct dwc3 *dwc, int mode)
{
	u32 timeout = 250;

	dwc3_writel(dwc->regs, DWC3_DGCMDPAR, mode);
	dwc3_writel(dwc->regs, DWC3_DGCMD, DWC3_DGCMD_RUN_SOC_BUS_LOOPBACK |
			DWC3_DEPCMD_CMDACT);
	do {
		u32 reg;

		reg = dwc3_readl(dwc->regs, DWC3_DGCMD);
		if (!(reg & DWC3_DEPCMD_CMDACT))
			return 0;
		timeout--;
		if (!timeout)
			return -ETIMEDOUT;
		mdelay(1);
	} while (1);
}

static struct dwc3_trb_hw trb_0 __aligned(16);
static struct dwc3_trb_hw trb_1 __aligned(16);

#define BUF_SIZE	4096
static int dwc3_testmode_open(struct inode *inode, struct file *file)
{
	struct dwc3 *dwc = inode->i_private;
	struct dwc3_gadget_ep_cmd_params par0;
	struct dwc3_gadget_ep_cmd_params par1;
	struct dwc3_trb         trb;
	int ret;
	u8 *buf0;
	u8 *buf1;

	buf0 = kmalloc(BUF_SIZE, GFP_KERNEL);
	if (!buf0)
		return -ENOMEM;
	buf1 = kmalloc(BUF_SIZE, GFP_KERNEL);
	if (!buf1) {
		kfree(buf0);
		return -ENOMEM;
	}

	memset(buf0, 0xaa, BUF_SIZE);
	memset(buf1, 0x33, BUF_SIZE);

	memset(&trb, 0, sizeof(trb));
	memset(&par0, 0, sizeof(par0));
	memset(&par1, 0, sizeof(par1));

	trb.lst = 1;
	trb.trbctl = DWC3_TRBCTL_NORMAL;
	trb.length = BUF_SIZE;
	trb.hwo = 1;

	trb.bplh = virt_to_phys(buf0);
	dwc3_trb_to_hw(&trb, &trb_0);

	trb.bplh = virt_to_phys(buf1);
	dwc3_trb_to_hw(&trb, &trb_1);

	par0.param0.depstrtxfer.transfer_desc_addr_high =
		upper_32_bits(virt_to_phys(&trb_0));
	par0.param1.depstrtxfer.transfer_desc_addr_low =
		lower_32_bits(virt_to_phys(&trb_0));

	par1.param0.depstrtxfer.transfer_desc_addr_high =
		upper_32_bits(virt_to_phys(&trb_1));
	par1.param1.depstrtxfer.transfer_desc_addr_low =
		lower_32_bits(virt_to_phys(&trb_1));

	dwc3_send_testmode_cmd(dwc, 1);

	ret = dwc3_send_gadget_ep_cmd(dwc, 0, DWC3_DEPCMD_STARTTRANSFER, &par0);
	ret = dwc3_send_gadget_ep_cmd(dwc, 1, DWC3_DEPCMD_STARTTRANSFER, &par1);

	dwc3_send_testmode_cmd(dwc, 0);
	return -EBUSY;
}

static const struct file_operations dwc3_testmode_fops = {
	.open			= dwc3_testmode_open,
	.read			= seq_read,
	.release		= single_release,
};

int __devinit dwc3_debugfs_init(struct dwc3 *dwc)
{
	struct dentry		*root;
@@ -513,13 +426,6 @@ int __devinit dwc3_debugfs_init(struct dwc3 *dwc)
		ret = PTR_ERR(file);
		goto err1;
	}
	file = debugfs_create_file("testmode", S_IRUGO, root, dwc,
			&dwc3_testmode_fops);
	if (IS_ERR(file)) {
		ret = PTR_ERR(file);
		goto err1;
	}

	return 0;

err1: