|
@@ -725,6 +725,120 @@ static const struct debugfs_reg32 dwc2_regs[] = {
|
|
dump_register(HCDMAB(15)),
|
|
dump_register(HCDMAB(15)),
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+#define print_param(_seq, _ptr, _param) \
|
|
|
|
+seq_printf((_seq), "%-30s: %d\n", #_param, (_ptr)->_param)
|
|
|
|
+
|
|
|
|
+#define print_param_hex(_seq, _ptr, _param) \
|
|
|
|
+seq_printf((_seq), "%-30s: 0x%x\n", #_param, (_ptr)->_param)
|
|
|
|
+
|
|
|
|
+static int params_show(struct seq_file *seq, void *v)
|
|
|
|
+{
|
|
|
|
+ struct dwc2_hsotg *hsotg = seq->private;
|
|
|
|
+ struct dwc2_core_params *p = &hsotg->params;
|
|
|
|
+ int i;
|
|
|
|
+
|
|
|
|
+ print_param(seq, p, otg_cap);
|
|
|
|
+ print_param(seq, p, dma_desc_enable);
|
|
|
|
+ print_param(seq, p, dma_desc_fs_enable);
|
|
|
|
+ print_param(seq, p, speed);
|
|
|
|
+ print_param(seq, p, enable_dynamic_fifo);
|
|
|
|
+ print_param(seq, p, en_multiple_tx_fifo);
|
|
|
|
+ print_param(seq, p, host_rx_fifo_size);
|
|
|
|
+ print_param(seq, p, host_nperio_tx_fifo_size);
|
|
|
|
+ print_param(seq, p, host_perio_tx_fifo_size);
|
|
|
|
+ print_param(seq, p, max_transfer_size);
|
|
|
|
+ print_param(seq, p, max_packet_count);
|
|
|
|
+ print_param(seq, p, host_channels);
|
|
|
|
+ print_param(seq, p, phy_type);
|
|
|
|
+ print_param(seq, p, phy_utmi_width);
|
|
|
|
+ print_param(seq, p, phy_ulpi_ddr);
|
|
|
|
+ print_param(seq, p, phy_ulpi_ext_vbus);
|
|
|
|
+ print_param(seq, p, i2c_enable);
|
|
|
|
+ print_param(seq, p, ulpi_fs_ls);
|
|
|
|
+ print_param(seq, p, host_support_fs_ls_low_power);
|
|
|
|
+ print_param(seq, p, host_ls_low_power_phy_clk);
|
|
|
|
+ print_param(seq, p, ts_dline);
|
|
|
|
+ print_param(seq, p, reload_ctl);
|
|
|
|
+ print_param_hex(seq, p, ahbcfg);
|
|
|
|
+ print_param(seq, p, uframe_sched);
|
|
|
|
+ print_param(seq, p, external_id_pin_ctl);
|
|
|
|
+ print_param(seq, p, hibernation);
|
|
|
|
+ print_param(seq, p, host_dma);
|
|
|
|
+ print_param(seq, p, g_dma);
|
|
|
|
+ print_param(seq, p, g_dma_desc);
|
|
|
|
+ print_param(seq, p, g_rx_fifo_size);
|
|
|
|
+ print_param(seq, p, g_np_tx_fifo_size);
|
|
|
|
+
|
|
|
|
+ for (i = 0; i < MAX_EPS_CHANNELS; i++) {
|
|
|
|
+ char str[32];
|
|
|
|
+
|
|
|
|
+ snprintf(str, 32, "g_tx_fifo_size[%d]", i);
|
|
|
|
+ seq_printf(seq, "%-30s: %d\n", str, p->g_tx_fifo_size[i]);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int params_open(struct inode *inode, struct file *file)
|
|
|
|
+{
|
|
|
|
+ return single_open(file, params_show, inode->i_private);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static const struct file_operations params_fops = {
|
|
|
|
+ .owner = THIS_MODULE,
|
|
|
|
+ .open = params_open,
|
|
|
|
+ .read = seq_read,
|
|
|
|
+ .llseek = seq_lseek,
|
|
|
|
+ .release = single_release,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static int hw_params_show(struct seq_file *seq, void *v)
|
|
|
|
+{
|
|
|
|
+ struct dwc2_hsotg *hsotg = seq->private;
|
|
|
|
+ struct dwc2_hw_params *hw = &hsotg->hw_params;
|
|
|
|
+
|
|
|
|
+ print_param(seq, hw, op_mode);
|
|
|
|
+ print_param(seq, hw, arch);
|
|
|
|
+ print_param(seq, hw, dma_desc_enable);
|
|
|
|
+ print_param(seq, hw, enable_dynamic_fifo);
|
|
|
|
+ print_param(seq, hw, en_multiple_tx_fifo);
|
|
|
|
+ print_param(seq, hw, rx_fifo_size);
|
|
|
|
+ print_param(seq, hw, host_nperio_tx_fifo_size);
|
|
|
|
+ print_param(seq, hw, dev_nperio_tx_fifo_size);
|
|
|
|
+ print_param(seq, hw, host_perio_tx_fifo_size);
|
|
|
|
+ print_param(seq, hw, nperio_tx_q_depth);
|
|
|
|
+ print_param(seq, hw, host_perio_tx_q_depth);
|
|
|
|
+ print_param(seq, hw, dev_token_q_depth);
|
|
|
|
+ print_param(seq, hw, max_transfer_size);
|
|
|
|
+ print_param(seq, hw, max_packet_count);
|
|
|
|
+ print_param(seq, hw, host_channels);
|
|
|
|
+ print_param(seq, hw, hs_phy_type);
|
|
|
|
+ print_param(seq, hw, fs_phy_type);
|
|
|
|
+ print_param(seq, hw, i2c_enable);
|
|
|
|
+ print_param(seq, hw, num_dev_ep);
|
|
|
|
+ print_param(seq, hw, num_dev_perio_in_ep);
|
|
|
|
+ print_param(seq, hw, total_fifo_size);
|
|
|
|
+ print_param(seq, hw, power_optimized);
|
|
|
|
+ print_param(seq, hw, utmi_phy_data_width);
|
|
|
|
+ print_param_hex(seq, hw, snpsid);
|
|
|
|
+ print_param_hex(seq, hw, dev_ep_dirs);
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int hw_params_open(struct inode *inode, struct file *file)
|
|
|
|
+{
|
|
|
|
+ return single_open(file, hw_params_show, inode->i_private);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static const struct file_operations hw_params_fops = {
|
|
|
|
+ .owner = THIS_MODULE,
|
|
|
|
+ .open = hw_params_open,
|
|
|
|
+ .read = seq_read,
|
|
|
|
+ .llseek = seq_lseek,
|
|
|
|
+ .release = single_release,
|
|
|
|
+};
|
|
|
|
+
|
|
int dwc2_debugfs_init(struct dwc2_hsotg *hsotg)
|
|
int dwc2_debugfs_init(struct dwc2_hsotg *hsotg)
|
|
{
|
|
{
|
|
int ret;
|
|
int ret;
|
|
@@ -736,6 +850,19 @@ int dwc2_debugfs_init(struct dwc2_hsotg *hsotg)
|
|
goto err0;
|
|
goto err0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ file = debugfs_create_file("params", 0444,
|
|
|
|
+ hsotg->debug_root,
|
|
|
|
+ hsotg, ¶ms_fops);
|
|
|
|
+ if (IS_ERR(file))
|
|
|
|
+ dev_err(hsotg->dev, "%s: failed to create params\n", __func__);
|
|
|
|
+
|
|
|
|
+ file = debugfs_create_file("hw_params", 0444,
|
|
|
|
+ hsotg->debug_root,
|
|
|
|
+ hsotg, &hw_params_fops);
|
|
|
|
+ if (IS_ERR(file))
|
|
|
|
+ dev_err(hsotg->dev, "%s: failed to create hw_params\n",
|
|
|
|
+ __func__);
|
|
|
|
+
|
|
/* Add gadget debugfs nodes */
|
|
/* Add gadget debugfs nodes */
|
|
dwc2_hsotg_create_debug(hsotg);
|
|
dwc2_hsotg_create_debug(hsotg);
|
|
|
|
|