mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 06:34:12 +08:00
thunderbolt: Make the driver less verbose
Currently the driver logs quite a lot to the system message buffer even when doing normal operations. This information is not useful for ordinary users and might even annoy some. For this reason convert most of the logs at info level to happen at debug level instead. The nice output formatting is untouched. Logging can be easily re-enabled by passing "thunderbolt.dyndbg" in the kernel command line (or using the corresponding control file runtime). Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> Acked-by: Yehezkel Bernat <yehezkelshb@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
0bb5a1a28e
commit
daa5140f7e
@ -631,7 +631,7 @@ struct tb_ctl *tb_ctl_alloc(struct tb_nhi *nhi, event_cb cb, void *cb_data)
|
||||
ctl->rx_packets[i]->frame.callback = tb_ctl_rx_callback;
|
||||
}
|
||||
|
||||
tb_ctl_info(ctl, "control channel created\n");
|
||||
tb_ctl_dbg(ctl, "control channel created\n");
|
||||
return ctl;
|
||||
err:
|
||||
tb_ctl_free(ctl);
|
||||
@ -672,7 +672,7 @@ void tb_ctl_free(struct tb_ctl *ctl)
|
||||
void tb_ctl_start(struct tb_ctl *ctl)
|
||||
{
|
||||
int i;
|
||||
tb_ctl_info(ctl, "control channel starting...\n");
|
||||
tb_ctl_dbg(ctl, "control channel starting...\n");
|
||||
tb_ring_start(ctl->tx); /* is used to ack hotplug packets, start first */
|
||||
tb_ring_start(ctl->rx);
|
||||
for (i = 0; i < TB_CTL_RX_PKG_COUNT; i++)
|
||||
@ -701,7 +701,7 @@ void tb_ctl_stop(struct tb_ctl *ctl)
|
||||
if (!list_empty(&ctl->request_queue))
|
||||
tb_ctl_WARN(ctl, "dangling request in request_queue\n");
|
||||
INIT_LIST_HEAD(&ctl->request_queue);
|
||||
tb_ctl_info(ctl, "control channel stopped\n");
|
||||
tb_ctl_dbg(ctl, "control channel stopped\n");
|
||||
}
|
||||
|
||||
/* public interface, commands */
|
||||
|
@ -540,7 +540,7 @@ int tb_drom_read(struct tb_switch *sw)
|
||||
return res;
|
||||
size &= 0x3ff;
|
||||
size += TB_DROM_DATA_START;
|
||||
tb_sw_info(sw, "reading drom (length: %#x)\n", size);
|
||||
tb_sw_dbg(sw, "reading drom (length: %#x)\n", size);
|
||||
if (size < sizeof(*header)) {
|
||||
tb_sw_warn(sw, "drom too small, aborting\n");
|
||||
return -EIO;
|
||||
|
@ -95,9 +95,9 @@ static void ring_interrupt_active(struct tb_ring *ring, bool active)
|
||||
else
|
||||
new = old & ~mask;
|
||||
|
||||
dev_info(&ring->nhi->pdev->dev,
|
||||
"%s interrupt at register %#x bit %d (%#x -> %#x)\n",
|
||||
active ? "enabling" : "disabling", reg, bit, old, new);
|
||||
dev_dbg(&ring->nhi->pdev->dev,
|
||||
"%s interrupt at register %#x bit %d (%#x -> %#x)\n",
|
||||
active ? "enabling" : "disabling", reg, bit, old, new);
|
||||
|
||||
if (new == old)
|
||||
dev_WARN(&ring->nhi->pdev->dev,
|
||||
@ -476,8 +476,9 @@ static struct tb_ring *tb_ring_alloc(struct tb_nhi *nhi, u32 hop, int size,
|
||||
void *poll_data)
|
||||
{
|
||||
struct tb_ring *ring = NULL;
|
||||
dev_info(&nhi->pdev->dev, "allocating %s ring %d of size %d\n",
|
||||
transmit ? "TX" : "RX", hop, size);
|
||||
|
||||
dev_dbg(&nhi->pdev->dev, "allocating %s ring %d of size %d\n",
|
||||
transmit ? "TX" : "RX", hop, size);
|
||||
|
||||
/* Tx Ring 2 is reserved for E2E workaround */
|
||||
if (transmit && hop == RING_E2E_UNUSED_HOPID)
|
||||
@ -585,8 +586,8 @@ void tb_ring_start(struct tb_ring *ring)
|
||||
dev_WARN(&ring->nhi->pdev->dev, "ring already started\n");
|
||||
goto err;
|
||||
}
|
||||
dev_info(&ring->nhi->pdev->dev, "starting %s %d\n",
|
||||
RING_TYPE(ring), ring->hop);
|
||||
dev_dbg(&ring->nhi->pdev->dev, "starting %s %d\n",
|
||||
RING_TYPE(ring), ring->hop);
|
||||
|
||||
if (ring->flags & RING_FLAG_FRAME) {
|
||||
/* Means 4096 */
|
||||
@ -647,8 +648,8 @@ void tb_ring_stop(struct tb_ring *ring)
|
||||
{
|
||||
spin_lock_irq(&ring->nhi->lock);
|
||||
spin_lock(&ring->lock);
|
||||
dev_info(&ring->nhi->pdev->dev, "stopping %s %d\n",
|
||||
RING_TYPE(ring), ring->hop);
|
||||
dev_dbg(&ring->nhi->pdev->dev, "stopping %s %d\n",
|
||||
RING_TYPE(ring), ring->hop);
|
||||
if (ring->nhi->going_away)
|
||||
goto err;
|
||||
if (!ring->running) {
|
||||
@ -716,10 +717,8 @@ void tb_ring_free(struct tb_ring *ring)
|
||||
ring->descriptors_dma = 0;
|
||||
|
||||
|
||||
dev_info(&ring->nhi->pdev->dev,
|
||||
"freeing %s %d\n",
|
||||
RING_TYPE(ring),
|
||||
ring->hop);
|
||||
dev_dbg(&ring->nhi->pdev->dev, "freeing %s %d\n", RING_TYPE(ring),
|
||||
ring->hop);
|
||||
|
||||
/**
|
||||
* ring->work can no longer be scheduled (it is scheduled only
|
||||
@ -931,7 +930,8 @@ static int nhi_runtime_resume(struct device *dev)
|
||||
static void nhi_shutdown(struct tb_nhi *nhi)
|
||||
{
|
||||
int i;
|
||||
dev_info(&nhi->pdev->dev, "shutdown\n");
|
||||
|
||||
dev_dbg(&nhi->pdev->dev, "shutdown\n");
|
||||
|
||||
for (i = 0; i < nhi->hop_count; i++) {
|
||||
if (nhi->tx_rings[i])
|
||||
@ -1059,7 +1059,7 @@ static int nhi_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
dev_info(&nhi->pdev->dev, "NHI initialized, starting thunderbolt\n");
|
||||
dev_dbg(&nhi->pdev->dev, "NHI initialized, starting thunderbolt\n");
|
||||
|
||||
res = tb_domain_add(tb);
|
||||
if (res) {
|
||||
|
@ -13,19 +13,19 @@
|
||||
|
||||
static void tb_dump_hop(struct tb_port *port, struct tb_regs_hop *hop)
|
||||
{
|
||||
tb_port_info(port, " Hop through port %d to hop %d (%s)\n",
|
||||
hop->out_port, hop->next_hop,
|
||||
hop->enable ? "enabled" : "disabled");
|
||||
tb_port_info(port, " Weight: %d Priority: %d Credits: %d Drop: %d\n",
|
||||
hop->weight, hop->priority,
|
||||
hop->initial_credits, hop->drop_packages);
|
||||
tb_port_info(port, " Counter enabled: %d Counter index: %d\n",
|
||||
hop->counter_enable, hop->counter);
|
||||
tb_port_info(port, " Flow Control (In/Eg): %d/%d Shared Buffer (In/Eg): %d/%d\n",
|
||||
hop->ingress_fc, hop->egress_fc,
|
||||
hop->ingress_shared_buffer, hop->egress_shared_buffer);
|
||||
tb_port_info(port, " Unknown1: %#x Unknown2: %#x Unknown3: %#x\n",
|
||||
hop->unknown1, hop->unknown2, hop->unknown3);
|
||||
tb_port_dbg(port, " Hop through port %d to hop %d (%s)\n",
|
||||
hop->out_port, hop->next_hop,
|
||||
hop->enable ? "enabled" : "disabled");
|
||||
tb_port_dbg(port, " Weight: %d Priority: %d Credits: %d Drop: %d\n",
|
||||
hop->weight, hop->priority,
|
||||
hop->initial_credits, hop->drop_packages);
|
||||
tb_port_dbg(port, " Counter enabled: %d Counter index: %d\n",
|
||||
hop->counter_enable, hop->counter);
|
||||
tb_port_dbg(port, " Flow Control (In/Eg): %d/%d Shared Buffer (In/Eg): %d/%d\n",
|
||||
hop->ingress_fc, hop->egress_fc,
|
||||
hop->ingress_shared_buffer, hop->egress_shared_buffer);
|
||||
tb_port_dbg(port, " Unknown1: %#x Unknown2: %#x Unknown3: %#x\n",
|
||||
hop->unknown1, hop->unknown2, hop->unknown3);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -436,15 +436,15 @@ static const char *tb_port_type(struct tb_regs_port_header *port)
|
||||
|
||||
static void tb_dump_port(struct tb *tb, struct tb_regs_port_header *port)
|
||||
{
|
||||
tb_info(tb,
|
||||
" Port %d: %x:%x (Revision: %d, TB Version: %d, Type: %s (%#x))\n",
|
||||
port->port_number, port->vendor_id, port->device_id,
|
||||
port->revision, port->thunderbolt_version, tb_port_type(port),
|
||||
port->type);
|
||||
tb_info(tb, " Max hop id (in/out): %d/%d\n",
|
||||
port->max_in_hop_id, port->max_out_hop_id);
|
||||
tb_info(tb, " Max counters: %d\n", port->max_counters);
|
||||
tb_info(tb, " NFC Credits: %#x\n", port->nfc_credits);
|
||||
tb_dbg(tb,
|
||||
" Port %d: %x:%x (Revision: %d, TB Version: %d, Type: %s (%#x))\n",
|
||||
port->port_number, port->vendor_id, port->device_id,
|
||||
port->revision, port->thunderbolt_version, tb_port_type(port),
|
||||
port->type);
|
||||
tb_dbg(tb, " Max hop id (in/out): %d/%d\n",
|
||||
port->max_in_hop_id, port->max_out_hop_id);
|
||||
tb_dbg(tb, " Max counters: %d\n", port->max_counters);
|
||||
tb_dbg(tb, " NFC Credits: %#x\n", port->nfc_credits);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -605,20 +605,18 @@ static int tb_init_port(struct tb_port *port)
|
||||
|
||||
static void tb_dump_switch(struct tb *tb, struct tb_regs_switch_header *sw)
|
||||
{
|
||||
tb_info(tb,
|
||||
" Switch: %x:%x (Revision: %d, TB Version: %d)\n",
|
||||
sw->vendor_id, sw->device_id, sw->revision,
|
||||
sw->thunderbolt_version);
|
||||
tb_info(tb, " Max Port Number: %d\n", sw->max_port_number);
|
||||
tb_info(tb, " Config:\n");
|
||||
tb_info(tb,
|
||||
tb_dbg(tb, " Switch: %x:%x (Revision: %d, TB Version: %d)\n",
|
||||
sw->vendor_id, sw->device_id, sw->revision,
|
||||
sw->thunderbolt_version);
|
||||
tb_dbg(tb, " Max Port Number: %d\n", sw->max_port_number);
|
||||
tb_dbg(tb, " Config:\n");
|
||||
tb_dbg(tb,
|
||||
" Upstream Port Number: %d Depth: %d Route String: %#llx Enabled: %d, PlugEventsDelay: %dms\n",
|
||||
sw->upstream_port_number, sw->depth,
|
||||
(((u64) sw->route_hi) << 32) | sw->route_lo,
|
||||
sw->enabled, sw->plug_events_delay);
|
||||
tb_info(tb,
|
||||
" unknown1: %#x unknown4: %#x\n",
|
||||
sw->__unknown1, sw->__unknown4);
|
||||
sw->upstream_port_number, sw->depth,
|
||||
(((u64) sw->route_hi) << 32) | sw->route_lo,
|
||||
sw->enabled, sw->plug_events_delay);
|
||||
tb_dbg(tb, " unknown1: %#x unknown4: %#x\n",
|
||||
sw->__unknown1, sw->__unknown4);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -634,7 +632,7 @@ int tb_switch_reset(struct tb *tb, u64 route)
|
||||
header.route_lo = route,
|
||||
header.enabled = true,
|
||||
};
|
||||
tb_info(tb, "resetting switch at %llx\n", route);
|
||||
tb_dbg(tb, "resetting switch at %llx\n", route);
|
||||
res.err = tb_cfg_write(tb->ctl, ((u32 *) &header) + 2, route,
|
||||
0, 2, 2, 2);
|
||||
if (res.err)
|
||||
@ -1139,7 +1137,7 @@ struct tb_switch *tb_switch_alloc(struct tb *tb, struct device *parent,
|
||||
if (tb_cfg_read(tb->ctl, &sw->config, route, 0, TB_CFG_SWITCH, 0, 5))
|
||||
goto err_free_sw_ports;
|
||||
|
||||
tb_info(tb, "current switch config:\n");
|
||||
tb_dbg(tb, "current switch config:\n");
|
||||
tb_dump_switch(tb, &sw->config);
|
||||
|
||||
/* configure switch */
|
||||
@ -1246,9 +1244,8 @@ int tb_switch_configure(struct tb_switch *sw)
|
||||
int ret;
|
||||
|
||||
route = tb_route(sw);
|
||||
tb_info(tb,
|
||||
"initializing Switch at %#llx (depth: %d, up port: %d)\n",
|
||||
route, tb_route_length(route), sw->config.upstream_port_number);
|
||||
tb_dbg(tb, "initializing Switch at %#llx (depth: %d, up port: %d)\n",
|
||||
route, tb_route_length(route), sw->config.upstream_port_number);
|
||||
|
||||
if (sw->config.vendor_id != PCI_VENDOR_ID_INTEL)
|
||||
tb_sw_warn(sw, "unknown switch vendor id %#x\n",
|
||||
@ -1386,13 +1383,13 @@ int tb_switch_add(struct tb_switch *sw)
|
||||
tb_sw_warn(sw, "tb_eeprom_read_rom failed\n");
|
||||
return ret;
|
||||
}
|
||||
tb_sw_info(sw, "uid: %#llx\n", sw->uid);
|
||||
tb_sw_dbg(sw, "uid: %#llx\n", sw->uid);
|
||||
|
||||
tb_switch_set_uuid(sw);
|
||||
|
||||
for (i = 0; i <= sw->config.max_port_number; i++) {
|
||||
if (sw->ports[i].disabled) {
|
||||
tb_port_info(&sw->ports[i], "disabled by eeprom\n");
|
||||
tb_port_dbg(&sw->ports[i], "disabled by eeprom\n");
|
||||
continue;
|
||||
}
|
||||
ret = tb_init_port(&sw->ports[i]);
|
||||
@ -1483,7 +1480,7 @@ void tb_sw_set_unplugged(struct tb_switch *sw)
|
||||
int tb_switch_resume(struct tb_switch *sw)
|
||||
{
|
||||
int i, err;
|
||||
tb_sw_info(sw, "resuming switch\n");
|
||||
tb_sw_dbg(sw, "resuming switch\n");
|
||||
|
||||
/*
|
||||
* Check for UID of the connected switches except for root
|
||||
|
@ -404,10 +404,10 @@ static int tb_suspend_noirq(struct tb *tb)
|
||||
{
|
||||
struct tb_cm *tcm = tb_priv(tb);
|
||||
|
||||
tb_info(tb, "suspending...\n");
|
||||
tb_dbg(tb, "suspending...\n");
|
||||
tb_switch_suspend(tb->root_switch);
|
||||
tcm->hotplug_active = false; /* signal tb_handle_hotplug to quit */
|
||||
tb_info(tb, "suspend finished\n");
|
||||
tb_dbg(tb, "suspend finished\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -417,7 +417,7 @@ static int tb_resume_noirq(struct tb *tb)
|
||||
struct tb_cm *tcm = tb_priv(tb);
|
||||
struct tb_pci_tunnel *tunnel, *n;
|
||||
|
||||
tb_info(tb, "resuming...\n");
|
||||
tb_dbg(tb, "resuming...\n");
|
||||
|
||||
/* remove any pci devices the firmware might have setup */
|
||||
tb_switch_reset(tb, 0);
|
||||
@ -432,12 +432,12 @@ static int tb_resume_noirq(struct tb *tb)
|
||||
* the pcie links need some time to get going.
|
||||
* 100ms works for me...
|
||||
*/
|
||||
tb_info(tb, "tunnels restarted, sleeping for 100ms\n");
|
||||
tb_dbg(tb, "tunnels restarted, sleeping for 100ms\n");
|
||||
msleep(100);
|
||||
}
|
||||
/* Allow tb_handle_hotplug to progress events */
|
||||
tcm->hotplug_active = true;
|
||||
tb_info(tb, "resume finished\n");
|
||||
tb_dbg(tb, "resume finished\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -327,7 +327,7 @@ static inline int tb_port_write(struct tb_port *port, const void *buffer,
|
||||
#define tb_WARN(tb, fmt, arg...) dev_WARN(&(tb)->nhi->pdev->dev, fmt, ## arg)
|
||||
#define tb_warn(tb, fmt, arg...) dev_warn(&(tb)->nhi->pdev->dev, fmt, ## arg)
|
||||
#define tb_info(tb, fmt, arg...) dev_info(&(tb)->nhi->pdev->dev, fmt, ## arg)
|
||||
|
||||
#define tb_dbg(tb, fmt, arg...) dev_dbg(&(tb)->nhi->pdev->dev, fmt, ## arg)
|
||||
|
||||
#define __TB_SW_PRINT(level, sw, fmt, arg...) \
|
||||
do { \
|
||||
@ -338,7 +338,7 @@ static inline int tb_port_write(struct tb_port *port, const void *buffer,
|
||||
#define tb_sw_WARN(sw, fmt, arg...) __TB_SW_PRINT(tb_WARN, sw, fmt, ##arg)
|
||||
#define tb_sw_warn(sw, fmt, arg...) __TB_SW_PRINT(tb_warn, sw, fmt, ##arg)
|
||||
#define tb_sw_info(sw, fmt, arg...) __TB_SW_PRINT(tb_info, sw, fmt, ##arg)
|
||||
|
||||
#define tb_sw_dbg(sw, fmt, arg...) __TB_SW_PRINT(tb_dbg, sw, fmt, ##arg)
|
||||
|
||||
#define __TB_PORT_PRINT(level, _port, fmt, arg...) \
|
||||
do { \
|
||||
@ -352,6 +352,8 @@ static inline int tb_port_write(struct tb_port *port, const void *buffer,
|
||||
__TB_PORT_PRINT(tb_warn, port, fmt, ##arg)
|
||||
#define tb_port_info(port, fmt, arg...) \
|
||||
__TB_PORT_PRINT(tb_info, port, fmt, ##arg)
|
||||
#define tb_port_dbg(port, fmt, arg...) \
|
||||
__TB_PORT_PRINT(tb_dbg, port, fmt, ##arg)
|
||||
|
||||
struct tb *icm_probe(struct tb_nhi *nhi);
|
||||
struct tb *tb_probe(struct tb_nhi *nhi);
|
||||
|
Loading…
Reference in New Issue
Block a user