mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-24 21:24:00 +08:00
soundwire: cadence: add status in dev_dbg 'State change' log
The existing debug log only mentions a state change, without providing any details. For integration and stress-tests, it's helpful to see in the dmesg log the reason for the state change. The value is intended for power users and isn't converted as human-readable values. But for the record each device has a 4-bit status: BIT(0): Unattached BIT(1): Attached BIT(2): Alert BIT(3): Reserved (should not happen) Example: [ 121.891288] intel-sdw intel-sdw.0: Slave status change: 0x2 << this shows a Device0 Attached [ 121.891295] soundwire sdw-master-0: Slave attached, programming device number [ 121.891629] soundwire sdw-master-0: SDW Slave Addr: 30025d071101 [ 121.891632] soundwire sdw-master-0: SDW Slave class_id 1, part_id 711, mfg_id 25d, unique_id 0, version 3 [ 121.892011] intel-sdw intel-sdw.0: Msg ignored for Slave 0 [ 121.892013] soundwire sdw-master-0: No more devices to enumerate [ 121.892200] intel-sdw intel-sdw.0: Slave status change: 0x21 << this shows the device now Attached as Device1 and Unattached as Device0, i.e. a successful enumeration. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Link: https://lore.kernel.org/r/20210115053738.22630-3-yung-chuan.liao@linux.intel.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
c397efb77d
commit
6f206833ce
@ -734,21 +734,18 @@ static void cdns_read_response(struct sdw_cdns *cdns)
|
||||
}
|
||||
|
||||
static int cdns_update_slave_status(struct sdw_cdns *cdns,
|
||||
u32 slave0, u32 slave1)
|
||||
u64 slave_intstat)
|
||||
{
|
||||
enum sdw_slave_status status[SDW_MAX_DEVICES + 1];
|
||||
bool is_slave = false;
|
||||
u64 slave;
|
||||
u32 mask;
|
||||
int i, set_status;
|
||||
|
||||
/* combine the two status */
|
||||
slave = ((u64)slave1 << 32) | slave0;
|
||||
memset(status, 0, sizeof(status));
|
||||
|
||||
for (i = 0; i <= SDW_MAX_DEVICES; i++) {
|
||||
mask = (slave >> (i * CDNS_MCP_SLAVE_STATUS_NUM)) &
|
||||
CDNS_MCP_SLAVE_STATUS_BITS;
|
||||
mask = (slave_intstat >> (i * CDNS_MCP_SLAVE_STATUS_NUM)) &
|
||||
CDNS_MCP_SLAVE_STATUS_BITS;
|
||||
if (!mask)
|
||||
continue;
|
||||
|
||||
@ -918,13 +915,17 @@ static void cdns_update_slave_status_work(struct work_struct *work)
|
||||
struct sdw_cdns *cdns =
|
||||
container_of(work, struct sdw_cdns, work);
|
||||
u32 slave0, slave1;
|
||||
|
||||
dev_dbg_ratelimited(cdns->dev, "Slave status change\n");
|
||||
u64 slave_intstat;
|
||||
|
||||
slave0 = cdns_readl(cdns, CDNS_MCP_SLAVE_INTSTAT0);
|
||||
slave1 = cdns_readl(cdns, CDNS_MCP_SLAVE_INTSTAT1);
|
||||
|
||||
cdns_update_slave_status(cdns, slave0, slave1);
|
||||
/* combine the two status */
|
||||
slave_intstat = ((u64)slave1 << 32) | slave0;
|
||||
|
||||
dev_dbg_ratelimited(cdns->dev, "Slave status change: 0x%llx\n", slave_intstat);
|
||||
|
||||
cdns_update_slave_status(cdns, slave_intstat);
|
||||
cdns_writel(cdns, CDNS_MCP_SLAVE_INTSTAT0, slave0);
|
||||
cdns_writel(cdns, CDNS_MCP_SLAVE_INTSTAT1, slave1);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user