cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

bus.c (45702B)


      1// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
      2// Copyright(c) 2015-17 Intel Corporation.
      3
      4#include <linux/acpi.h>
      5#include <linux/delay.h>
      6#include <linux/mod_devicetable.h>
      7#include <linux/pm_runtime.h>
      8#include <linux/soundwire/sdw_registers.h>
      9#include <linux/soundwire/sdw.h>
     10#include "bus.h"
     11#include "sysfs_local.h"
     12
     13static DEFINE_IDA(sdw_ida);
     14
     15static int sdw_get_id(struct sdw_bus *bus)
     16{
     17	int rc = ida_alloc(&sdw_ida, GFP_KERNEL);
     18
     19	if (rc < 0)
     20		return rc;
     21
     22	bus->id = rc;
     23	return 0;
     24}
     25
     26/**
     27 * sdw_bus_master_add() - add a bus Master instance
     28 * @bus: bus instance
     29 * @parent: parent device
     30 * @fwnode: firmware node handle
     31 *
     32 * Initializes the bus instance, read properties and create child
     33 * devices.
     34 */
     35int sdw_bus_master_add(struct sdw_bus *bus, struct device *parent,
     36		       struct fwnode_handle *fwnode)
     37{
     38	struct sdw_master_prop *prop = NULL;
     39	int ret;
     40
     41	if (!parent) {
     42		pr_err("SoundWire parent device is not set\n");
     43		return -ENODEV;
     44	}
     45
     46	ret = sdw_get_id(bus);
     47	if (ret < 0) {
     48		dev_err(parent, "Failed to get bus id\n");
     49		return ret;
     50	}
     51
     52	ret = sdw_master_device_add(bus, parent, fwnode);
     53	if (ret < 0) {
     54		dev_err(parent, "Failed to add master device at link %d\n",
     55			bus->link_id);
     56		return ret;
     57	}
     58
     59	if (!bus->ops) {
     60		dev_err(bus->dev, "SoundWire Bus ops are not set\n");
     61		return -EINVAL;
     62	}
     63
     64	if (!bus->compute_params) {
     65		dev_err(bus->dev,
     66			"Bandwidth allocation not configured, compute_params no set\n");
     67		return -EINVAL;
     68	}
     69
     70	mutex_init(&bus->msg_lock);
     71	mutex_init(&bus->bus_lock);
     72	INIT_LIST_HEAD(&bus->slaves);
     73	INIT_LIST_HEAD(&bus->m_rt_list);
     74
     75	/*
     76	 * Initialize multi_link flag
     77	 * TODO: populate this flag by reading property from FW node
     78	 */
     79	bus->multi_link = false;
     80	if (bus->ops->read_prop) {
     81		ret = bus->ops->read_prop(bus);
     82		if (ret < 0) {
     83			dev_err(bus->dev,
     84				"Bus read properties failed:%d\n", ret);
     85			return ret;
     86		}
     87	}
     88
     89	sdw_bus_debugfs_init(bus);
     90
     91	/*
     92	 * Device numbers in SoundWire are 0 through 15. Enumeration device
     93	 * number (0), Broadcast device number (15), Group numbers (12 and
     94	 * 13) and Master device number (14) are not used for assignment so
     95	 * mask these and other higher bits.
     96	 */
     97
     98	/* Set higher order bits */
     99	*bus->assigned = ~GENMASK(SDW_BROADCAST_DEV_NUM, SDW_ENUM_DEV_NUM);
    100
    101	/* Set enumuration device number and broadcast device number */
    102	set_bit(SDW_ENUM_DEV_NUM, bus->assigned);
    103	set_bit(SDW_BROADCAST_DEV_NUM, bus->assigned);
    104
    105	/* Set group device numbers and master device number */
    106	set_bit(SDW_GROUP12_DEV_NUM, bus->assigned);
    107	set_bit(SDW_GROUP13_DEV_NUM, bus->assigned);
    108	set_bit(SDW_MASTER_DEV_NUM, bus->assigned);
    109
    110	/*
    111	 * SDW is an enumerable bus, but devices can be powered off. So,
    112	 * they won't be able to report as present.
    113	 *
    114	 * Create Slave devices based on Slaves described in
    115	 * the respective firmware (ACPI/DT)
    116	 */
    117	if (IS_ENABLED(CONFIG_ACPI) && ACPI_HANDLE(bus->dev))
    118		ret = sdw_acpi_find_slaves(bus);
    119	else if (IS_ENABLED(CONFIG_OF) && bus->dev->of_node)
    120		ret = sdw_of_find_slaves(bus);
    121	else
    122		ret = -ENOTSUPP; /* No ACPI/DT so error out */
    123
    124	if (ret < 0) {
    125		dev_err(bus->dev, "Finding slaves failed:%d\n", ret);
    126		return ret;
    127	}
    128
    129	/*
    130	 * Initialize clock values based on Master properties. The max
    131	 * frequency is read from max_clk_freq property. Current assumption
    132	 * is that the bus will start at highest clock frequency when
    133	 * powered on.
    134	 *
    135	 * Default active bank will be 0 as out of reset the Slaves have
    136	 * to start with bank 0 (Table 40 of Spec)
    137	 */
    138	prop = &bus->prop;
    139	bus->params.max_dr_freq = prop->max_clk_freq * SDW_DOUBLE_RATE_FACTOR;
    140	bus->params.curr_dr_freq = bus->params.max_dr_freq;
    141	bus->params.curr_bank = SDW_BANK0;
    142	bus->params.next_bank = SDW_BANK1;
    143
    144	return 0;
    145}
    146EXPORT_SYMBOL(sdw_bus_master_add);
    147
    148static int sdw_delete_slave(struct device *dev, void *data)
    149{
    150	struct sdw_slave *slave = dev_to_sdw_dev(dev);
    151	struct sdw_bus *bus = slave->bus;
    152
    153	pm_runtime_disable(dev);
    154
    155	sdw_slave_debugfs_exit(slave);
    156
    157	mutex_lock(&bus->bus_lock);
    158
    159	if (slave->dev_num) /* clear dev_num if assigned */
    160		clear_bit(slave->dev_num, bus->assigned);
    161
    162	list_del_init(&slave->node);
    163	mutex_unlock(&bus->bus_lock);
    164
    165	device_unregister(dev);
    166	return 0;
    167}
    168
    169/**
    170 * sdw_bus_master_delete() - delete the bus master instance
    171 * @bus: bus to be deleted
    172 *
    173 * Remove the instance, delete the child devices.
    174 */
    175void sdw_bus_master_delete(struct sdw_bus *bus)
    176{
    177	device_for_each_child(bus->dev, NULL, sdw_delete_slave);
    178	sdw_master_device_del(bus);
    179
    180	sdw_bus_debugfs_exit(bus);
    181	ida_free(&sdw_ida, bus->id);
    182}
    183EXPORT_SYMBOL(sdw_bus_master_delete);
    184
    185/*
    186 * SDW IO Calls
    187 */
    188
    189static inline int find_response_code(enum sdw_command_response resp)
    190{
    191	switch (resp) {
    192	case SDW_CMD_OK:
    193		return 0;
    194
    195	case SDW_CMD_IGNORED:
    196		return -ENODATA;
    197
    198	case SDW_CMD_TIMEOUT:
    199		return -ETIMEDOUT;
    200
    201	default:
    202		return -EIO;
    203	}
    204}
    205
    206static inline int do_transfer(struct sdw_bus *bus, struct sdw_msg *msg)
    207{
    208	int retry = bus->prop.err_threshold;
    209	enum sdw_command_response resp;
    210	int ret = 0, i;
    211
    212	for (i = 0; i <= retry; i++) {
    213		resp = bus->ops->xfer_msg(bus, msg);
    214		ret = find_response_code(resp);
    215
    216		/* if cmd is ok or ignored return */
    217		if (ret == 0 || ret == -ENODATA)
    218			return ret;
    219	}
    220
    221	return ret;
    222}
    223
    224static inline int do_transfer_defer(struct sdw_bus *bus,
    225				    struct sdw_msg *msg,
    226				    struct sdw_defer *defer)
    227{
    228	int retry = bus->prop.err_threshold;
    229	enum sdw_command_response resp;
    230	int ret = 0, i;
    231
    232	defer->msg = msg;
    233	defer->length = msg->len;
    234	init_completion(&defer->complete);
    235
    236	for (i = 0; i <= retry; i++) {
    237		resp = bus->ops->xfer_msg_defer(bus, msg, defer);
    238		ret = find_response_code(resp);
    239		/* if cmd is ok or ignored return */
    240		if (ret == 0 || ret == -ENODATA)
    241			return ret;
    242	}
    243
    244	return ret;
    245}
    246
    247static int sdw_reset_page(struct sdw_bus *bus, u16 dev_num)
    248{
    249	int retry = bus->prop.err_threshold;
    250	enum sdw_command_response resp;
    251	int ret = 0, i;
    252
    253	for (i = 0; i <= retry; i++) {
    254		resp = bus->ops->reset_page_addr(bus, dev_num);
    255		ret = find_response_code(resp);
    256		/* if cmd is ok or ignored return */
    257		if (ret == 0 || ret == -ENODATA)
    258			return ret;
    259	}
    260
    261	return ret;
    262}
    263
    264static int sdw_transfer_unlocked(struct sdw_bus *bus, struct sdw_msg *msg)
    265{
    266	int ret;
    267
    268	ret = do_transfer(bus, msg);
    269	if (ret != 0 && ret != -ENODATA)
    270		dev_err(bus->dev, "trf on Slave %d failed:%d %s addr %x count %d\n",
    271			msg->dev_num, ret,
    272			(msg->flags & SDW_MSG_FLAG_WRITE) ? "write" : "read",
    273			msg->addr, msg->len);
    274
    275	if (msg->page)
    276		sdw_reset_page(bus, msg->dev_num);
    277
    278	return ret;
    279}
    280
    281/**
    282 * sdw_transfer() - Synchronous transfer message to a SDW Slave device
    283 * @bus: SDW bus
    284 * @msg: SDW message to be xfered
    285 */
    286int sdw_transfer(struct sdw_bus *bus, struct sdw_msg *msg)
    287{
    288	int ret;
    289
    290	mutex_lock(&bus->msg_lock);
    291
    292	ret = sdw_transfer_unlocked(bus, msg);
    293
    294	mutex_unlock(&bus->msg_lock);
    295
    296	return ret;
    297}
    298
    299/**
    300 * sdw_transfer_defer() - Asynchronously transfer message to a SDW Slave device
    301 * @bus: SDW bus
    302 * @msg: SDW message to be xfered
    303 * @defer: Defer block for signal completion
    304 *
    305 * Caller needs to hold the msg_lock lock while calling this
    306 */
    307int sdw_transfer_defer(struct sdw_bus *bus, struct sdw_msg *msg,
    308		       struct sdw_defer *defer)
    309{
    310	int ret;
    311
    312	if (!bus->ops->xfer_msg_defer)
    313		return -ENOTSUPP;
    314
    315	ret = do_transfer_defer(bus, msg, defer);
    316	if (ret != 0 && ret != -ENODATA)
    317		dev_err(bus->dev, "Defer trf on Slave %d failed:%d\n",
    318			msg->dev_num, ret);
    319
    320	if (msg->page)
    321		sdw_reset_page(bus, msg->dev_num);
    322
    323	return ret;
    324}
    325
    326int sdw_fill_msg(struct sdw_msg *msg, struct sdw_slave *slave,
    327		 u32 addr, size_t count, u16 dev_num, u8 flags, u8 *buf)
    328{
    329	memset(msg, 0, sizeof(*msg));
    330	msg->addr = addr; /* addr is 16 bit and truncated here */
    331	msg->len = count;
    332	msg->dev_num = dev_num;
    333	msg->flags = flags;
    334	msg->buf = buf;
    335
    336	if (addr < SDW_REG_NO_PAGE) /* no paging area */
    337		return 0;
    338
    339	if (addr >= SDW_REG_MAX) { /* illegal addr */
    340		pr_err("SDW: Invalid address %x passed\n", addr);
    341		return -EINVAL;
    342	}
    343
    344	if (addr < SDW_REG_OPTIONAL_PAGE) { /* 32k but no page */
    345		if (slave && !slave->prop.paging_support)
    346			return 0;
    347		/* no need for else as that will fall-through to paging */
    348	}
    349
    350	/* paging mandatory */
    351	if (dev_num == SDW_ENUM_DEV_NUM || dev_num == SDW_BROADCAST_DEV_NUM) {
    352		pr_err("SDW: Invalid device for paging :%d\n", dev_num);
    353		return -EINVAL;
    354	}
    355
    356	if (!slave) {
    357		pr_err("SDW: No slave for paging addr\n");
    358		return -EINVAL;
    359	}
    360
    361	if (!slave->prop.paging_support) {
    362		dev_err(&slave->dev,
    363			"address %x needs paging but no support\n", addr);
    364		return -EINVAL;
    365	}
    366
    367	msg->addr_page1 = FIELD_GET(SDW_SCP_ADDRPAGE1_MASK, addr);
    368	msg->addr_page2 = FIELD_GET(SDW_SCP_ADDRPAGE2_MASK, addr);
    369	msg->addr |= BIT(15);
    370	msg->page = true;
    371
    372	return 0;
    373}
    374
    375/*
    376 * Read/Write IO functions.
    377 * no_pm versions can only be called by the bus, e.g. while enumerating or
    378 * handling suspend-resume sequences.
    379 * all clients need to use the pm versions
    380 */
    381
    382static int
    383sdw_nread_no_pm(struct sdw_slave *slave, u32 addr, size_t count, u8 *val)
    384{
    385	struct sdw_msg msg;
    386	int ret;
    387
    388	ret = sdw_fill_msg(&msg, slave, addr, count,
    389			   slave->dev_num, SDW_MSG_FLAG_READ, val);
    390	if (ret < 0)
    391		return ret;
    392
    393	ret = sdw_transfer(slave->bus, &msg);
    394	if (slave->is_mockup_device)
    395		ret = 0;
    396	return ret;
    397}
    398
    399static int
    400sdw_nwrite_no_pm(struct sdw_slave *slave, u32 addr, size_t count, const u8 *val)
    401{
    402	struct sdw_msg msg;
    403	int ret;
    404
    405	ret = sdw_fill_msg(&msg, slave, addr, count,
    406			   slave->dev_num, SDW_MSG_FLAG_WRITE, (u8 *)val);
    407	if (ret < 0)
    408		return ret;
    409
    410	ret = sdw_transfer(slave->bus, &msg);
    411	if (slave->is_mockup_device)
    412		ret = 0;
    413	return ret;
    414}
    415
    416int sdw_write_no_pm(struct sdw_slave *slave, u32 addr, u8 value)
    417{
    418	return sdw_nwrite_no_pm(slave, addr, 1, &value);
    419}
    420EXPORT_SYMBOL(sdw_write_no_pm);
    421
    422static int
    423sdw_bread_no_pm(struct sdw_bus *bus, u16 dev_num, u32 addr)
    424{
    425	struct sdw_msg msg;
    426	u8 buf;
    427	int ret;
    428
    429	ret = sdw_fill_msg(&msg, NULL, addr, 1, dev_num,
    430			   SDW_MSG_FLAG_READ, &buf);
    431	if (ret < 0)
    432		return ret;
    433
    434	ret = sdw_transfer(bus, &msg);
    435	if (ret < 0)
    436		return ret;
    437
    438	return buf;
    439}
    440
    441static int
    442sdw_bwrite_no_pm(struct sdw_bus *bus, u16 dev_num, u32 addr, u8 value)
    443{
    444	struct sdw_msg msg;
    445	int ret;
    446
    447	ret = sdw_fill_msg(&msg, NULL, addr, 1, dev_num,
    448			   SDW_MSG_FLAG_WRITE, &value);
    449	if (ret < 0)
    450		return ret;
    451
    452	return sdw_transfer(bus, &msg);
    453}
    454
    455int sdw_bread_no_pm_unlocked(struct sdw_bus *bus, u16 dev_num, u32 addr)
    456{
    457	struct sdw_msg msg;
    458	u8 buf;
    459	int ret;
    460
    461	ret = sdw_fill_msg(&msg, NULL, addr, 1, dev_num,
    462			   SDW_MSG_FLAG_READ, &buf);
    463	if (ret < 0)
    464		return ret;
    465
    466	ret = sdw_transfer_unlocked(bus, &msg);
    467	if (ret < 0)
    468		return ret;
    469
    470	return buf;
    471}
    472EXPORT_SYMBOL(sdw_bread_no_pm_unlocked);
    473
    474int sdw_bwrite_no_pm_unlocked(struct sdw_bus *bus, u16 dev_num, u32 addr, u8 value)
    475{
    476	struct sdw_msg msg;
    477	int ret;
    478
    479	ret = sdw_fill_msg(&msg, NULL, addr, 1, dev_num,
    480			   SDW_MSG_FLAG_WRITE, &value);
    481	if (ret < 0)
    482		return ret;
    483
    484	return sdw_transfer_unlocked(bus, &msg);
    485}
    486EXPORT_SYMBOL(sdw_bwrite_no_pm_unlocked);
    487
    488int sdw_read_no_pm(struct sdw_slave *slave, u32 addr)
    489{
    490	u8 buf;
    491	int ret;
    492
    493	ret = sdw_nread_no_pm(slave, addr, 1, &buf);
    494	if (ret < 0)
    495		return ret;
    496	else
    497		return buf;
    498}
    499EXPORT_SYMBOL(sdw_read_no_pm);
    500
    501int sdw_update_no_pm(struct sdw_slave *slave, u32 addr, u8 mask, u8 val)
    502{
    503	int tmp;
    504
    505	tmp = sdw_read_no_pm(slave, addr);
    506	if (tmp < 0)
    507		return tmp;
    508
    509	tmp = (tmp & ~mask) | val;
    510	return sdw_write_no_pm(slave, addr, tmp);
    511}
    512EXPORT_SYMBOL(sdw_update_no_pm);
    513
    514/* Read-Modify-Write Slave register */
    515int sdw_update(struct sdw_slave *slave, u32 addr, u8 mask, u8 val)
    516{
    517	int tmp;
    518
    519	tmp = sdw_read(slave, addr);
    520	if (tmp < 0)
    521		return tmp;
    522
    523	tmp = (tmp & ~mask) | val;
    524	return sdw_write(slave, addr, tmp);
    525}
    526EXPORT_SYMBOL(sdw_update);
    527
    528/**
    529 * sdw_nread() - Read "n" contiguous SDW Slave registers
    530 * @slave: SDW Slave
    531 * @addr: Register address
    532 * @count: length
    533 * @val: Buffer for values to be read
    534 */
    535int sdw_nread(struct sdw_slave *slave, u32 addr, size_t count, u8 *val)
    536{
    537	int ret;
    538
    539	ret = pm_runtime_resume_and_get(&slave->dev);
    540	if (ret < 0 && ret != -EACCES)
    541		return ret;
    542
    543	ret = sdw_nread_no_pm(slave, addr, count, val);
    544
    545	pm_runtime_mark_last_busy(&slave->dev);
    546	pm_runtime_put(&slave->dev);
    547
    548	return ret;
    549}
    550EXPORT_SYMBOL(sdw_nread);
    551
    552/**
    553 * sdw_nwrite() - Write "n" contiguous SDW Slave registers
    554 * @slave: SDW Slave
    555 * @addr: Register address
    556 * @count: length
    557 * @val: Buffer for values to be written
    558 */
    559int sdw_nwrite(struct sdw_slave *slave, u32 addr, size_t count, const u8 *val)
    560{
    561	int ret;
    562
    563	ret = pm_runtime_resume_and_get(&slave->dev);
    564	if (ret < 0 && ret != -EACCES)
    565		return ret;
    566
    567	ret = sdw_nwrite_no_pm(slave, addr, count, val);
    568
    569	pm_runtime_mark_last_busy(&slave->dev);
    570	pm_runtime_put(&slave->dev);
    571
    572	return ret;
    573}
    574EXPORT_SYMBOL(sdw_nwrite);
    575
    576/**
    577 * sdw_read() - Read a SDW Slave register
    578 * @slave: SDW Slave
    579 * @addr: Register address
    580 */
    581int sdw_read(struct sdw_slave *slave, u32 addr)
    582{
    583	u8 buf;
    584	int ret;
    585
    586	ret = sdw_nread(slave, addr, 1, &buf);
    587	if (ret < 0)
    588		return ret;
    589
    590	return buf;
    591}
    592EXPORT_SYMBOL(sdw_read);
    593
    594/**
    595 * sdw_write() - Write a SDW Slave register
    596 * @slave: SDW Slave
    597 * @addr: Register address
    598 * @value: Register value
    599 */
    600int sdw_write(struct sdw_slave *slave, u32 addr, u8 value)
    601{
    602	return sdw_nwrite(slave, addr, 1, &value);
    603}
    604EXPORT_SYMBOL(sdw_write);
    605
    606/*
    607 * SDW alert handling
    608 */
    609
    610/* called with bus_lock held */
    611static struct sdw_slave *sdw_get_slave(struct sdw_bus *bus, int i)
    612{
    613	struct sdw_slave *slave;
    614
    615	list_for_each_entry(slave, &bus->slaves, node) {
    616		if (slave->dev_num == i)
    617			return slave;
    618	}
    619
    620	return NULL;
    621}
    622
    623int sdw_compare_devid(struct sdw_slave *slave, struct sdw_slave_id id)
    624{
    625	if (slave->id.mfg_id != id.mfg_id ||
    626	    slave->id.part_id != id.part_id ||
    627	    slave->id.class_id != id.class_id ||
    628	    (slave->id.unique_id != SDW_IGNORED_UNIQUE_ID &&
    629	     slave->id.unique_id != id.unique_id))
    630		return -ENODEV;
    631
    632	return 0;
    633}
    634EXPORT_SYMBOL(sdw_compare_devid);
    635
    636/* called with bus_lock held */
    637static int sdw_get_device_num(struct sdw_slave *slave)
    638{
    639	int bit;
    640
    641	bit = find_first_zero_bit(slave->bus->assigned, SDW_MAX_DEVICES);
    642	if (bit == SDW_MAX_DEVICES) {
    643		bit = -ENODEV;
    644		goto err;
    645	}
    646
    647	/*
    648	 * Do not update dev_num in Slave data structure here,
    649	 * Update once program dev_num is successful
    650	 */
    651	set_bit(bit, slave->bus->assigned);
    652
    653err:
    654	return bit;
    655}
    656
    657static int sdw_assign_device_num(struct sdw_slave *slave)
    658{
    659	struct sdw_bus *bus = slave->bus;
    660	int ret, dev_num;
    661	bool new_device = false;
    662
    663	/* check first if device number is assigned, if so reuse that */
    664	if (!slave->dev_num) {
    665		if (!slave->dev_num_sticky) {
    666			mutex_lock(&slave->bus->bus_lock);
    667			dev_num = sdw_get_device_num(slave);
    668			mutex_unlock(&slave->bus->bus_lock);
    669			if (dev_num < 0) {
    670				dev_err(bus->dev, "Get dev_num failed: %d\n",
    671					dev_num);
    672				return dev_num;
    673			}
    674			slave->dev_num = dev_num;
    675			slave->dev_num_sticky = dev_num;
    676			new_device = true;
    677		} else {
    678			slave->dev_num = slave->dev_num_sticky;
    679		}
    680	}
    681
    682	if (!new_device)
    683		dev_dbg(bus->dev,
    684			"Slave already registered, reusing dev_num:%d\n",
    685			slave->dev_num);
    686
    687	/* Clear the slave->dev_num to transfer message on device 0 */
    688	dev_num = slave->dev_num;
    689	slave->dev_num = 0;
    690
    691	ret = sdw_write_no_pm(slave, SDW_SCP_DEVNUMBER, dev_num);
    692	if (ret < 0) {
    693		dev_err(bus->dev, "Program device_num %d failed: %d\n",
    694			dev_num, ret);
    695		return ret;
    696	}
    697
    698	/* After xfer of msg, restore dev_num */
    699	slave->dev_num = slave->dev_num_sticky;
    700
    701	return 0;
    702}
    703
    704void sdw_extract_slave_id(struct sdw_bus *bus,
    705			  u64 addr, struct sdw_slave_id *id)
    706{
    707	dev_dbg(bus->dev, "SDW Slave Addr: %llx\n", addr);
    708
    709	id->sdw_version = SDW_VERSION(addr);
    710	id->unique_id = SDW_UNIQUE_ID(addr);
    711	id->mfg_id = SDW_MFG_ID(addr);
    712	id->part_id = SDW_PART_ID(addr);
    713	id->class_id = SDW_CLASS_ID(addr);
    714
    715	dev_dbg(bus->dev,
    716		"SDW Slave class_id 0x%02x, mfg_id 0x%04x, part_id 0x%04x, unique_id 0x%x, version 0x%x\n",
    717		id->class_id, id->mfg_id, id->part_id, id->unique_id, id->sdw_version);
    718}
    719EXPORT_SYMBOL(sdw_extract_slave_id);
    720
    721static int sdw_program_device_num(struct sdw_bus *bus)
    722{
    723	u8 buf[SDW_NUM_DEV_ID_REGISTERS] = {0};
    724	struct sdw_slave *slave, *_s;
    725	struct sdw_slave_id id;
    726	struct sdw_msg msg;
    727	bool found;
    728	int count = 0, ret;
    729	u64 addr;
    730
    731	/* No Slave, so use raw xfer api */
    732	ret = sdw_fill_msg(&msg, NULL, SDW_SCP_DEVID_0,
    733			   SDW_NUM_DEV_ID_REGISTERS, 0, SDW_MSG_FLAG_READ, buf);
    734	if (ret < 0)
    735		return ret;
    736
    737	do {
    738		ret = sdw_transfer(bus, &msg);
    739		if (ret == -ENODATA) { /* end of device id reads */
    740			dev_dbg(bus->dev, "No more devices to enumerate\n");
    741			ret = 0;
    742			break;
    743		}
    744		if (ret < 0) {
    745			dev_err(bus->dev, "DEVID read fail:%d\n", ret);
    746			break;
    747		}
    748
    749		/*
    750		 * Construct the addr and extract. Cast the higher shift
    751		 * bits to avoid truncation due to size limit.
    752		 */
    753		addr = buf[5] | (buf[4] << 8) | (buf[3] << 16) |
    754			((u64)buf[2] << 24) | ((u64)buf[1] << 32) |
    755			((u64)buf[0] << 40);
    756
    757		sdw_extract_slave_id(bus, addr, &id);
    758
    759		found = false;
    760		/* Now compare with entries */
    761		list_for_each_entry_safe(slave, _s, &bus->slaves, node) {
    762			if (sdw_compare_devid(slave, id) == 0) {
    763				found = true;
    764
    765				/*
    766				 * Assign a new dev_num to this Slave and
    767				 * not mark it present. It will be marked
    768				 * present after it reports ATTACHED on new
    769				 * dev_num
    770				 */
    771				ret = sdw_assign_device_num(slave);
    772				if (ret < 0) {
    773					dev_err(bus->dev,
    774						"Assign dev_num failed:%d\n",
    775						ret);
    776					return ret;
    777				}
    778
    779				break;
    780			}
    781		}
    782
    783		if (!found) {
    784			/* TODO: Park this device in Group 13 */
    785
    786			/*
    787			 * add Slave device even if there is no platform
    788			 * firmware description. There will be no driver probe
    789			 * but the user/integration will be able to see the
    790			 * device, enumeration status and device number in sysfs
    791			 */
    792			sdw_slave_add(bus, &id, NULL);
    793
    794			dev_err(bus->dev, "Slave Entry not found\n");
    795		}
    796
    797		count++;
    798
    799		/*
    800		 * Check till error out or retry (count) exhausts.
    801		 * Device can drop off and rejoin during enumeration
    802		 * so count till twice the bound.
    803		 */
    804
    805	} while (ret == 0 && count < (SDW_MAX_DEVICES * 2));
    806
    807	return ret;
    808}
    809
    810static void sdw_modify_slave_status(struct sdw_slave *slave,
    811				    enum sdw_slave_status status)
    812{
    813	struct sdw_bus *bus = slave->bus;
    814
    815	mutex_lock(&bus->bus_lock);
    816
    817	dev_vdbg(bus->dev,
    818		 "%s: changing status slave %d status %d new status %d\n",
    819		 __func__, slave->dev_num, slave->status, status);
    820
    821	if (status == SDW_SLAVE_UNATTACHED) {
    822		dev_dbg(&slave->dev,
    823			"%s: initializing enumeration and init completion for Slave %d\n",
    824			__func__, slave->dev_num);
    825
    826		init_completion(&slave->enumeration_complete);
    827		init_completion(&slave->initialization_complete);
    828
    829	} else if ((status == SDW_SLAVE_ATTACHED) &&
    830		   (slave->status == SDW_SLAVE_UNATTACHED)) {
    831		dev_dbg(&slave->dev,
    832			"%s: signaling enumeration completion for Slave %d\n",
    833			__func__, slave->dev_num);
    834
    835		complete(&slave->enumeration_complete);
    836	}
    837	slave->status = status;
    838	mutex_unlock(&bus->bus_lock);
    839}
    840
    841static int sdw_slave_clk_stop_callback(struct sdw_slave *slave,
    842				       enum sdw_clk_stop_mode mode,
    843				       enum sdw_clk_stop_type type)
    844{
    845	int ret;
    846
    847	if (slave->ops && slave->ops->clk_stop) {
    848		ret = slave->ops->clk_stop(slave, mode, type);
    849		if (ret < 0)
    850			return ret;
    851	}
    852
    853	return 0;
    854}
    855
    856static int sdw_slave_clk_stop_prepare(struct sdw_slave *slave,
    857				      enum sdw_clk_stop_mode mode,
    858				      bool prepare)
    859{
    860	bool wake_en;
    861	u32 val = 0;
    862	int ret;
    863
    864	wake_en = slave->prop.wake_capable;
    865
    866	if (prepare) {
    867		val = SDW_SCP_SYSTEMCTRL_CLK_STP_PREP;
    868
    869		if (mode == SDW_CLK_STOP_MODE1)
    870			val |= SDW_SCP_SYSTEMCTRL_CLK_STP_MODE1;
    871
    872		if (wake_en)
    873			val |= SDW_SCP_SYSTEMCTRL_WAKE_UP_EN;
    874	} else {
    875		ret = sdw_read_no_pm(slave, SDW_SCP_SYSTEMCTRL);
    876		if (ret < 0) {
    877			if (ret != -ENODATA)
    878				dev_err(&slave->dev, "SDW_SCP_SYSTEMCTRL read failed:%d\n", ret);
    879			return ret;
    880		}
    881		val = ret;
    882		val &= ~(SDW_SCP_SYSTEMCTRL_CLK_STP_PREP);
    883	}
    884
    885	ret = sdw_write_no_pm(slave, SDW_SCP_SYSTEMCTRL, val);
    886
    887	if (ret < 0 && ret != -ENODATA)
    888		dev_err(&slave->dev, "SDW_SCP_SYSTEMCTRL write failed:%d\n", ret);
    889
    890	return ret;
    891}
    892
    893static int sdw_bus_wait_for_clk_prep_deprep(struct sdw_bus *bus, u16 dev_num)
    894{
    895	int retry = bus->clk_stop_timeout;
    896	int val;
    897
    898	do {
    899		val = sdw_bread_no_pm(bus, dev_num, SDW_SCP_STAT);
    900		if (val < 0) {
    901			if (val != -ENODATA)
    902				dev_err(bus->dev, "SDW_SCP_STAT bread failed:%d\n", val);
    903			return val;
    904		}
    905		val &= SDW_SCP_STAT_CLK_STP_NF;
    906		if (!val) {
    907			dev_dbg(bus->dev, "clock stop prep/de-prep done slave:%d\n",
    908				dev_num);
    909			return 0;
    910		}
    911
    912		usleep_range(1000, 1500);
    913		retry--;
    914	} while (retry);
    915
    916	dev_err(bus->dev, "clock stop prep/de-prep failed slave:%d\n",
    917		dev_num);
    918
    919	return -ETIMEDOUT;
    920}
    921
    922/**
    923 * sdw_bus_prep_clk_stop: prepare Slave(s) for clock stop
    924 *
    925 * @bus: SDW bus instance
    926 *
    927 * Query Slave for clock stop mode and prepare for that mode.
    928 */
    929int sdw_bus_prep_clk_stop(struct sdw_bus *bus)
    930{
    931	bool simple_clk_stop = true;
    932	struct sdw_slave *slave;
    933	bool is_slave = false;
    934	int ret = 0;
    935
    936	/*
    937	 * In order to save on transition time, prepare
    938	 * each Slave and then wait for all Slave(s) to be
    939	 * prepared for clock stop.
    940	 * If one of the Slave devices has lost sync and
    941	 * replies with Command Ignored/-ENODATA, we continue
    942	 * the loop
    943	 */
    944	list_for_each_entry(slave, &bus->slaves, node) {
    945		if (!slave->dev_num)
    946			continue;
    947
    948		if (slave->status != SDW_SLAVE_ATTACHED &&
    949		    slave->status != SDW_SLAVE_ALERT)
    950			continue;
    951
    952		/* Identify if Slave(s) are available on Bus */
    953		is_slave = true;
    954
    955		ret = sdw_slave_clk_stop_callback(slave,
    956						  SDW_CLK_STOP_MODE0,
    957						  SDW_CLK_PRE_PREPARE);
    958		if (ret < 0 && ret != -ENODATA) {
    959			dev_err(&slave->dev, "clock stop pre-prepare cb failed:%d\n", ret);
    960			return ret;
    961		}
    962
    963		/* Only prepare a Slave device if needed */
    964		if (!slave->prop.simple_clk_stop_capable) {
    965			simple_clk_stop = false;
    966
    967			ret = sdw_slave_clk_stop_prepare(slave,
    968							 SDW_CLK_STOP_MODE0,
    969							 true);
    970			if (ret < 0 && ret != -ENODATA) {
    971				dev_err(&slave->dev, "clock stop prepare failed:%d\n", ret);
    972				return ret;
    973			}
    974		}
    975	}
    976
    977	/* Skip remaining clock stop preparation if no Slave is attached */
    978	if (!is_slave)
    979		return 0;
    980
    981	/*
    982	 * Don't wait for all Slaves to be ready if they follow the simple
    983	 * state machine
    984	 */
    985	if (!simple_clk_stop) {
    986		ret = sdw_bus_wait_for_clk_prep_deprep(bus,
    987						       SDW_BROADCAST_DEV_NUM);
    988		/*
    989		 * if there are no Slave devices present and the reply is
    990		 * Command_Ignored/-ENODATA, we don't need to continue with the
    991		 * flow and can just return here. The error code is not modified
    992		 * and its handling left as an exercise for the caller.
    993		 */
    994		if (ret < 0)
    995			return ret;
    996	}
    997
    998	/* Inform slaves that prep is done */
    999	list_for_each_entry(slave, &bus->slaves, node) {
   1000		if (!slave->dev_num)
   1001			continue;
   1002
   1003		if (slave->status != SDW_SLAVE_ATTACHED &&
   1004		    slave->status != SDW_SLAVE_ALERT)
   1005			continue;
   1006
   1007		ret = sdw_slave_clk_stop_callback(slave,
   1008						  SDW_CLK_STOP_MODE0,
   1009						  SDW_CLK_POST_PREPARE);
   1010
   1011		if (ret < 0 && ret != -ENODATA) {
   1012			dev_err(&slave->dev, "clock stop post-prepare cb failed:%d\n", ret);
   1013			return ret;
   1014		}
   1015	}
   1016
   1017	return 0;
   1018}
   1019EXPORT_SYMBOL(sdw_bus_prep_clk_stop);
   1020
   1021/**
   1022 * sdw_bus_clk_stop: stop bus clock
   1023 *
   1024 * @bus: SDW bus instance
   1025 *
   1026 * After preparing the Slaves for clock stop, stop the clock by broadcasting
   1027 * write to SCP_CTRL register.
   1028 */
   1029int sdw_bus_clk_stop(struct sdw_bus *bus)
   1030{
   1031	int ret;
   1032
   1033	/*
   1034	 * broadcast clock stop now, attached Slaves will ACK this,
   1035	 * unattached will ignore
   1036	 */
   1037	ret = sdw_bwrite_no_pm(bus, SDW_BROADCAST_DEV_NUM,
   1038			       SDW_SCP_CTRL, SDW_SCP_CTRL_CLK_STP_NOW);
   1039	if (ret < 0) {
   1040		if (ret != -ENODATA)
   1041			dev_err(bus->dev, "ClockStopNow Broadcast msg failed %d\n", ret);
   1042		return ret;
   1043	}
   1044
   1045	return 0;
   1046}
   1047EXPORT_SYMBOL(sdw_bus_clk_stop);
   1048
   1049/**
   1050 * sdw_bus_exit_clk_stop: Exit clock stop mode
   1051 *
   1052 * @bus: SDW bus instance
   1053 *
   1054 * This De-prepares the Slaves by exiting Clock Stop Mode 0. For the Slaves
   1055 * exiting Clock Stop Mode 1, they will be de-prepared after they enumerate
   1056 * back.
   1057 */
   1058int sdw_bus_exit_clk_stop(struct sdw_bus *bus)
   1059{
   1060	bool simple_clk_stop = true;
   1061	struct sdw_slave *slave;
   1062	bool is_slave = false;
   1063	int ret;
   1064
   1065	/*
   1066	 * In order to save on transition time, de-prepare
   1067	 * each Slave and then wait for all Slave(s) to be
   1068	 * de-prepared after clock resume.
   1069	 */
   1070	list_for_each_entry(slave, &bus->slaves, node) {
   1071		if (!slave->dev_num)
   1072			continue;
   1073
   1074		if (slave->status != SDW_SLAVE_ATTACHED &&
   1075		    slave->status != SDW_SLAVE_ALERT)
   1076			continue;
   1077
   1078		/* Identify if Slave(s) are available on Bus */
   1079		is_slave = true;
   1080
   1081		ret = sdw_slave_clk_stop_callback(slave, SDW_CLK_STOP_MODE0,
   1082						  SDW_CLK_PRE_DEPREPARE);
   1083		if (ret < 0)
   1084			dev_warn(&slave->dev, "clock stop pre-deprepare cb failed:%d\n", ret);
   1085
   1086		/* Only de-prepare a Slave device if needed */
   1087		if (!slave->prop.simple_clk_stop_capable) {
   1088			simple_clk_stop = false;
   1089
   1090			ret = sdw_slave_clk_stop_prepare(slave, SDW_CLK_STOP_MODE0,
   1091							 false);
   1092
   1093			if (ret < 0)
   1094				dev_warn(&slave->dev, "clock stop deprepare failed:%d\n", ret);
   1095		}
   1096	}
   1097
   1098	/* Skip remaining clock stop de-preparation if no Slave is attached */
   1099	if (!is_slave)
   1100		return 0;
   1101
   1102	/*
   1103	 * Don't wait for all Slaves to be ready if they follow the simple
   1104	 * state machine
   1105	 */
   1106	if (!simple_clk_stop) {
   1107		ret = sdw_bus_wait_for_clk_prep_deprep(bus, SDW_BROADCAST_DEV_NUM);
   1108		if (ret < 0)
   1109			dev_warn(bus->dev, "clock stop deprepare wait failed:%d\n", ret);
   1110	}
   1111
   1112	list_for_each_entry(slave, &bus->slaves, node) {
   1113		if (!slave->dev_num)
   1114			continue;
   1115
   1116		if (slave->status != SDW_SLAVE_ATTACHED &&
   1117		    slave->status != SDW_SLAVE_ALERT)
   1118			continue;
   1119
   1120		ret = sdw_slave_clk_stop_callback(slave, SDW_CLK_STOP_MODE0,
   1121						  SDW_CLK_POST_DEPREPARE);
   1122		if (ret < 0)
   1123			dev_warn(&slave->dev, "clock stop post-deprepare cb failed:%d\n", ret);
   1124	}
   1125
   1126	return 0;
   1127}
   1128EXPORT_SYMBOL(sdw_bus_exit_clk_stop);
   1129
   1130int sdw_configure_dpn_intr(struct sdw_slave *slave,
   1131			   int port, bool enable, int mask)
   1132{
   1133	u32 addr;
   1134	int ret;
   1135	u8 val = 0;
   1136
   1137	if (slave->bus->params.s_data_mode != SDW_PORT_DATA_MODE_NORMAL) {
   1138		dev_dbg(&slave->dev, "TEST FAIL interrupt %s\n",
   1139			enable ? "on" : "off");
   1140		mask |= SDW_DPN_INT_TEST_FAIL;
   1141	}
   1142
   1143	addr = SDW_DPN_INTMASK(port);
   1144
   1145	/* Set/Clear port ready interrupt mask */
   1146	if (enable) {
   1147		val |= mask;
   1148		val |= SDW_DPN_INT_PORT_READY;
   1149	} else {
   1150		val &= ~(mask);
   1151		val &= ~SDW_DPN_INT_PORT_READY;
   1152	}
   1153
   1154	ret = sdw_update(slave, addr, (mask | SDW_DPN_INT_PORT_READY), val);
   1155	if (ret < 0)
   1156		dev_err(&slave->dev,
   1157			"SDW_DPN_INTMASK write failed:%d\n", val);
   1158
   1159	return ret;
   1160}
   1161
   1162static int sdw_slave_set_frequency(struct sdw_slave *slave)
   1163{
   1164	u32 mclk_freq = slave->bus->prop.mclk_freq;
   1165	u32 curr_freq = slave->bus->params.curr_dr_freq >> 1;
   1166	unsigned int scale;
   1167	u8 scale_index;
   1168	u8 base;
   1169	int ret;
   1170
   1171	/*
   1172	 * frequency base and scale registers are required for SDCA
   1173	 * devices. They may also be used for 1.2+/non-SDCA devices,
   1174	 * but we will need a DisCo property to cover this case
   1175	 */
   1176	if (!slave->id.class_id)
   1177		return 0;
   1178
   1179	if (!mclk_freq) {
   1180		dev_err(&slave->dev,
   1181			"no bus MCLK, cannot set SDW_SCP_BUS_CLOCK_BASE\n");
   1182		return -EINVAL;
   1183	}
   1184
   1185	/*
   1186	 * map base frequency using Table 89 of SoundWire 1.2 spec.
   1187	 * The order of the tests just follows the specification, this
   1188	 * is not a selection between possible values or a search for
   1189	 * the best value but just a mapping.  Only one case per platform
   1190	 * is relevant.
   1191	 * Some BIOS have inconsistent values for mclk_freq but a
   1192	 * correct root so we force the mclk_freq to avoid variations.
   1193	 */
   1194	if (!(19200000 % mclk_freq)) {
   1195		mclk_freq = 19200000;
   1196		base = SDW_SCP_BASE_CLOCK_19200000_HZ;
   1197	} else if (!(24000000 % mclk_freq)) {
   1198		mclk_freq = 24000000;
   1199		base = SDW_SCP_BASE_CLOCK_24000000_HZ;
   1200	} else if (!(24576000 % mclk_freq)) {
   1201		mclk_freq = 24576000;
   1202		base = SDW_SCP_BASE_CLOCK_24576000_HZ;
   1203	} else if (!(22579200 % mclk_freq)) {
   1204		mclk_freq = 22579200;
   1205		base = SDW_SCP_BASE_CLOCK_22579200_HZ;
   1206	} else if (!(32000000 % mclk_freq)) {
   1207		mclk_freq = 32000000;
   1208		base = SDW_SCP_BASE_CLOCK_32000000_HZ;
   1209	} else {
   1210		dev_err(&slave->dev,
   1211			"Unsupported clock base, mclk %d\n",
   1212			mclk_freq);
   1213		return -EINVAL;
   1214	}
   1215
   1216	if (mclk_freq % curr_freq) {
   1217		dev_err(&slave->dev,
   1218			"mclk %d is not multiple of bus curr_freq %d\n",
   1219			mclk_freq, curr_freq);
   1220		return -EINVAL;
   1221	}
   1222
   1223	scale = mclk_freq / curr_freq;
   1224
   1225	/*
   1226	 * map scale to Table 90 of SoundWire 1.2 spec - and check
   1227	 * that the scale is a power of two and maximum 64
   1228	 */
   1229	scale_index = ilog2(scale);
   1230
   1231	if (BIT(scale_index) != scale || scale_index > 6) {
   1232		dev_err(&slave->dev,
   1233			"No match found for scale %d, bus mclk %d curr_freq %d\n",
   1234			scale, mclk_freq, curr_freq);
   1235		return -EINVAL;
   1236	}
   1237	scale_index++;
   1238
   1239	ret = sdw_write_no_pm(slave, SDW_SCP_BUS_CLOCK_BASE, base);
   1240	if (ret < 0) {
   1241		dev_err(&slave->dev,
   1242			"SDW_SCP_BUS_CLOCK_BASE write failed:%d\n", ret);
   1243		return ret;
   1244	}
   1245
   1246	/* initialize scale for both banks */
   1247	ret = sdw_write_no_pm(slave, SDW_SCP_BUSCLOCK_SCALE_B0, scale_index);
   1248	if (ret < 0) {
   1249		dev_err(&slave->dev,
   1250			"SDW_SCP_BUSCLOCK_SCALE_B0 write failed:%d\n", ret);
   1251		return ret;
   1252	}
   1253	ret = sdw_write_no_pm(slave, SDW_SCP_BUSCLOCK_SCALE_B1, scale_index);
   1254	if (ret < 0)
   1255		dev_err(&slave->dev,
   1256			"SDW_SCP_BUSCLOCK_SCALE_B1 write failed:%d\n", ret);
   1257
   1258	dev_dbg(&slave->dev,
   1259		"Configured bus base %d, scale %d, mclk %d, curr_freq %d\n",
   1260		base, scale_index, mclk_freq, curr_freq);
   1261
   1262	return ret;
   1263}
   1264
   1265static int sdw_initialize_slave(struct sdw_slave *slave)
   1266{
   1267	struct sdw_slave_prop *prop = &slave->prop;
   1268	int status;
   1269	int ret;
   1270	u8 val;
   1271
   1272	ret = sdw_slave_set_frequency(slave);
   1273	if (ret < 0)
   1274		return ret;
   1275
   1276	if (slave->bus->prop.quirks & SDW_MASTER_QUIRKS_CLEAR_INITIAL_CLASH) {
   1277		/* Clear bus clash interrupt before enabling interrupt mask */
   1278		status = sdw_read_no_pm(slave, SDW_SCP_INT1);
   1279		if (status < 0) {
   1280			dev_err(&slave->dev,
   1281				"SDW_SCP_INT1 (BUS_CLASH) read failed:%d\n", status);
   1282			return status;
   1283		}
   1284		if (status & SDW_SCP_INT1_BUS_CLASH) {
   1285			dev_warn(&slave->dev, "Bus clash detected before INT mask is enabled\n");
   1286			ret = sdw_write_no_pm(slave, SDW_SCP_INT1, SDW_SCP_INT1_BUS_CLASH);
   1287			if (ret < 0) {
   1288				dev_err(&slave->dev,
   1289					"SDW_SCP_INT1 (BUS_CLASH) write failed:%d\n", ret);
   1290				return ret;
   1291			}
   1292		}
   1293	}
   1294	if ((slave->bus->prop.quirks & SDW_MASTER_QUIRKS_CLEAR_INITIAL_PARITY) &&
   1295	    !(slave->prop.quirks & SDW_SLAVE_QUIRKS_INVALID_INITIAL_PARITY)) {
   1296		/* Clear parity interrupt before enabling interrupt mask */
   1297		status = sdw_read_no_pm(slave, SDW_SCP_INT1);
   1298		if (status < 0) {
   1299			dev_err(&slave->dev,
   1300				"SDW_SCP_INT1 (PARITY) read failed:%d\n", status);
   1301			return status;
   1302		}
   1303		if (status & SDW_SCP_INT1_PARITY) {
   1304			dev_warn(&slave->dev, "PARITY error detected before INT mask is enabled\n");
   1305			ret = sdw_write_no_pm(slave, SDW_SCP_INT1, SDW_SCP_INT1_PARITY);
   1306			if (ret < 0) {
   1307				dev_err(&slave->dev,
   1308					"SDW_SCP_INT1 (PARITY) write failed:%d\n", ret);
   1309				return ret;
   1310			}
   1311		}
   1312	}
   1313
   1314	/*
   1315	 * Set SCP_INT1_MASK register, typically bus clash and
   1316	 * implementation-defined interrupt mask. The Parity detection
   1317	 * may not always be correct on startup so its use is
   1318	 * device-dependent, it might e.g. only be enabled in
   1319	 * steady-state after a couple of frames.
   1320	 */
   1321	val = slave->prop.scp_int1_mask;
   1322
   1323	/* Enable SCP interrupts */
   1324	ret = sdw_update_no_pm(slave, SDW_SCP_INTMASK1, val, val);
   1325	if (ret < 0) {
   1326		dev_err(&slave->dev,
   1327			"SDW_SCP_INTMASK1 write failed:%d\n", ret);
   1328		return ret;
   1329	}
   1330
   1331	/* No need to continue if DP0 is not present */
   1332	if (!slave->prop.dp0_prop)
   1333		return 0;
   1334
   1335	/* Enable DP0 interrupts */
   1336	val = prop->dp0_prop->imp_def_interrupts;
   1337	val |= SDW_DP0_INT_PORT_READY | SDW_DP0_INT_BRA_FAILURE;
   1338
   1339	ret = sdw_update_no_pm(slave, SDW_DP0_INTMASK, val, val);
   1340	if (ret < 0)
   1341		dev_err(&slave->dev,
   1342			"SDW_DP0_INTMASK read failed:%d\n", ret);
   1343	return ret;
   1344}
   1345
   1346static int sdw_handle_dp0_interrupt(struct sdw_slave *slave, u8 *slave_status)
   1347{
   1348	u8 clear, impl_int_mask;
   1349	int status, status2, ret, count = 0;
   1350
   1351	status = sdw_read_no_pm(slave, SDW_DP0_INT);
   1352	if (status < 0) {
   1353		dev_err(&slave->dev,
   1354			"SDW_DP0_INT read failed:%d\n", status);
   1355		return status;
   1356	}
   1357
   1358	do {
   1359		clear = status & ~SDW_DP0_INTERRUPTS;
   1360
   1361		if (status & SDW_DP0_INT_TEST_FAIL) {
   1362			dev_err(&slave->dev, "Test fail for port 0\n");
   1363			clear |= SDW_DP0_INT_TEST_FAIL;
   1364		}
   1365
   1366		/*
   1367		 * Assumption: PORT_READY interrupt will be received only for
   1368		 * ports implementing Channel Prepare state machine (CP_SM)
   1369		 */
   1370
   1371		if (status & SDW_DP0_INT_PORT_READY) {
   1372			complete(&slave->port_ready[0]);
   1373			clear |= SDW_DP0_INT_PORT_READY;
   1374		}
   1375
   1376		if (status & SDW_DP0_INT_BRA_FAILURE) {
   1377			dev_err(&slave->dev, "BRA failed\n");
   1378			clear |= SDW_DP0_INT_BRA_FAILURE;
   1379		}
   1380
   1381		impl_int_mask = SDW_DP0_INT_IMPDEF1 |
   1382			SDW_DP0_INT_IMPDEF2 | SDW_DP0_INT_IMPDEF3;
   1383
   1384		if (status & impl_int_mask) {
   1385			clear |= impl_int_mask;
   1386			*slave_status = clear;
   1387		}
   1388
   1389		/* clear the interrupts but don't touch reserved and SDCA_CASCADE fields */
   1390		ret = sdw_write_no_pm(slave, SDW_DP0_INT, clear);
   1391		if (ret < 0) {
   1392			dev_err(&slave->dev,
   1393				"SDW_DP0_INT write failed:%d\n", ret);
   1394			return ret;
   1395		}
   1396
   1397		/* Read DP0 interrupt again */
   1398		status2 = sdw_read_no_pm(slave, SDW_DP0_INT);
   1399		if (status2 < 0) {
   1400			dev_err(&slave->dev,
   1401				"SDW_DP0_INT read failed:%d\n", status2);
   1402			return status2;
   1403		}
   1404		/* filter to limit loop to interrupts identified in the first status read */
   1405		status &= status2;
   1406
   1407		count++;
   1408
   1409		/* we can get alerts while processing so keep retrying */
   1410	} while ((status & SDW_DP0_INTERRUPTS) && (count < SDW_READ_INTR_CLEAR_RETRY));
   1411
   1412	if (count == SDW_READ_INTR_CLEAR_RETRY)
   1413		dev_warn(&slave->dev, "Reached MAX_RETRY on DP0 read\n");
   1414
   1415	return ret;
   1416}
   1417
   1418static int sdw_handle_port_interrupt(struct sdw_slave *slave,
   1419				     int port, u8 *slave_status)
   1420{
   1421	u8 clear, impl_int_mask;
   1422	int status, status2, ret, count = 0;
   1423	u32 addr;
   1424
   1425	if (port == 0)
   1426		return sdw_handle_dp0_interrupt(slave, slave_status);
   1427
   1428	addr = SDW_DPN_INT(port);
   1429	status = sdw_read_no_pm(slave, addr);
   1430	if (status < 0) {
   1431		dev_err(&slave->dev,
   1432			"SDW_DPN_INT read failed:%d\n", status);
   1433
   1434		return status;
   1435	}
   1436
   1437	do {
   1438		clear = status & ~SDW_DPN_INTERRUPTS;
   1439
   1440		if (status & SDW_DPN_INT_TEST_FAIL) {
   1441			dev_err(&slave->dev, "Test fail for port:%d\n", port);
   1442			clear |= SDW_DPN_INT_TEST_FAIL;
   1443		}
   1444
   1445		/*
   1446		 * Assumption: PORT_READY interrupt will be received only
   1447		 * for ports implementing CP_SM.
   1448		 */
   1449		if (status & SDW_DPN_INT_PORT_READY) {
   1450			complete(&slave->port_ready[port]);
   1451			clear |= SDW_DPN_INT_PORT_READY;
   1452		}
   1453
   1454		impl_int_mask = SDW_DPN_INT_IMPDEF1 |
   1455			SDW_DPN_INT_IMPDEF2 | SDW_DPN_INT_IMPDEF3;
   1456
   1457		if (status & impl_int_mask) {
   1458			clear |= impl_int_mask;
   1459			*slave_status = clear;
   1460		}
   1461
   1462		/* clear the interrupt but don't touch reserved fields */
   1463		ret = sdw_write_no_pm(slave, addr, clear);
   1464		if (ret < 0) {
   1465			dev_err(&slave->dev,
   1466				"SDW_DPN_INT write failed:%d\n", ret);
   1467			return ret;
   1468		}
   1469
   1470		/* Read DPN interrupt again */
   1471		status2 = sdw_read_no_pm(slave, addr);
   1472		if (status2 < 0) {
   1473			dev_err(&slave->dev,
   1474				"SDW_DPN_INT read failed:%d\n", status2);
   1475			return status2;
   1476		}
   1477		/* filter to limit loop to interrupts identified in the first status read */
   1478		status &= status2;
   1479
   1480		count++;
   1481
   1482		/* we can get alerts while processing so keep retrying */
   1483	} while ((status & SDW_DPN_INTERRUPTS) && (count < SDW_READ_INTR_CLEAR_RETRY));
   1484
   1485	if (count == SDW_READ_INTR_CLEAR_RETRY)
   1486		dev_warn(&slave->dev, "Reached MAX_RETRY on port read");
   1487
   1488	return ret;
   1489}
   1490
   1491static int sdw_handle_slave_alerts(struct sdw_slave *slave)
   1492{
   1493	struct sdw_slave_intr_status slave_intr;
   1494	u8 clear = 0, bit, port_status[15] = {0};
   1495	int port_num, stat, ret, count = 0;
   1496	unsigned long port;
   1497	bool slave_notify;
   1498	u8 sdca_cascade = 0;
   1499	u8 buf, buf2[2], _buf, _buf2[2];
   1500	bool parity_check;
   1501	bool parity_quirk;
   1502
   1503	sdw_modify_slave_status(slave, SDW_SLAVE_ALERT);
   1504
   1505	ret = pm_runtime_resume_and_get(&slave->dev);
   1506	if (ret < 0 && ret != -EACCES) {
   1507		dev_err(&slave->dev, "Failed to resume device: %d\n", ret);
   1508		return ret;
   1509	}
   1510
   1511	/* Read Intstat 1, Intstat 2 and Intstat 3 registers */
   1512	ret = sdw_read_no_pm(slave, SDW_SCP_INT1);
   1513	if (ret < 0) {
   1514		dev_err(&slave->dev,
   1515			"SDW_SCP_INT1 read failed:%d\n", ret);
   1516		goto io_err;
   1517	}
   1518	buf = ret;
   1519
   1520	ret = sdw_nread_no_pm(slave, SDW_SCP_INTSTAT2, 2, buf2);
   1521	if (ret < 0) {
   1522		dev_err(&slave->dev,
   1523			"SDW_SCP_INT2/3 read failed:%d\n", ret);
   1524		goto io_err;
   1525	}
   1526
   1527	if (slave->prop.is_sdca) {
   1528		ret = sdw_read_no_pm(slave, SDW_DP0_INT);
   1529		if (ret < 0) {
   1530			dev_err(&slave->dev,
   1531				"SDW_DP0_INT read failed:%d\n", ret);
   1532			goto io_err;
   1533		}
   1534		sdca_cascade = ret & SDW_DP0_SDCA_CASCADE;
   1535	}
   1536
   1537	do {
   1538		slave_notify = false;
   1539
   1540		/*
   1541		 * Check parity, bus clash and Slave (impl defined)
   1542		 * interrupt
   1543		 */
   1544		if (buf & SDW_SCP_INT1_PARITY) {
   1545			parity_check = slave->prop.scp_int1_mask & SDW_SCP_INT1_PARITY;
   1546			parity_quirk = !slave->first_interrupt_done &&
   1547				(slave->prop.quirks & SDW_SLAVE_QUIRKS_INVALID_INITIAL_PARITY);
   1548
   1549			if (parity_check && !parity_quirk)
   1550				dev_err(&slave->dev, "Parity error detected\n");
   1551			clear |= SDW_SCP_INT1_PARITY;
   1552		}
   1553
   1554		if (buf & SDW_SCP_INT1_BUS_CLASH) {
   1555			if (slave->prop.scp_int1_mask & SDW_SCP_INT1_BUS_CLASH)
   1556				dev_err(&slave->dev, "Bus clash detected\n");
   1557			clear |= SDW_SCP_INT1_BUS_CLASH;
   1558		}
   1559
   1560		/*
   1561		 * When bus clash or parity errors are detected, such errors
   1562		 * are unlikely to be recoverable errors.
   1563		 * TODO: In such scenario, reset bus. Make this configurable
   1564		 * via sysfs property with bus reset being the default.
   1565		 */
   1566
   1567		if (buf & SDW_SCP_INT1_IMPL_DEF) {
   1568			if (slave->prop.scp_int1_mask & SDW_SCP_INT1_IMPL_DEF) {
   1569				dev_dbg(&slave->dev, "Slave impl defined interrupt\n");
   1570				slave_notify = true;
   1571			}
   1572			clear |= SDW_SCP_INT1_IMPL_DEF;
   1573		}
   1574
   1575		/* the SDCA interrupts are cleared in the codec driver .interrupt_callback() */
   1576		if (sdca_cascade)
   1577			slave_notify = true;
   1578
   1579		/* Check port 0 - 3 interrupts */
   1580		port = buf & SDW_SCP_INT1_PORT0_3;
   1581
   1582		/* To get port number corresponding to bits, shift it */
   1583		port = FIELD_GET(SDW_SCP_INT1_PORT0_3, port);
   1584		for_each_set_bit(bit, &port, 8) {
   1585			sdw_handle_port_interrupt(slave, bit,
   1586						  &port_status[bit]);
   1587		}
   1588
   1589		/* Check if cascade 2 interrupt is present */
   1590		if (buf & SDW_SCP_INT1_SCP2_CASCADE) {
   1591			port = buf2[0] & SDW_SCP_INTSTAT2_PORT4_10;
   1592			for_each_set_bit(bit, &port, 8) {
   1593				/* scp2 ports start from 4 */
   1594				port_num = bit + 3;
   1595				sdw_handle_port_interrupt(slave,
   1596						port_num,
   1597						&port_status[port_num]);
   1598			}
   1599		}
   1600
   1601		/* now check last cascade */
   1602		if (buf2[0] & SDW_SCP_INTSTAT2_SCP3_CASCADE) {
   1603			port = buf2[1] & SDW_SCP_INTSTAT3_PORT11_14;
   1604			for_each_set_bit(bit, &port, 8) {
   1605				/* scp3 ports start from 11 */
   1606				port_num = bit + 10;
   1607				sdw_handle_port_interrupt(slave,
   1608						port_num,
   1609						&port_status[port_num]);
   1610			}
   1611		}
   1612
   1613		/* Update the Slave driver */
   1614		if (slave_notify && slave->ops &&
   1615		    slave->ops->interrupt_callback) {
   1616			slave_intr.sdca_cascade = sdca_cascade;
   1617			slave_intr.control_port = clear;
   1618			memcpy(slave_intr.port, &port_status,
   1619			       sizeof(slave_intr.port));
   1620
   1621			slave->ops->interrupt_callback(slave, &slave_intr);
   1622		}
   1623
   1624		/* Ack interrupt */
   1625		ret = sdw_write_no_pm(slave, SDW_SCP_INT1, clear);
   1626		if (ret < 0) {
   1627			dev_err(&slave->dev,
   1628				"SDW_SCP_INT1 write failed:%d\n", ret);
   1629			goto io_err;
   1630		}
   1631
   1632		/* at this point all initial interrupt sources were handled */
   1633		slave->first_interrupt_done = true;
   1634
   1635		/*
   1636		 * Read status again to ensure no new interrupts arrived
   1637		 * while servicing interrupts.
   1638		 */
   1639		ret = sdw_read_no_pm(slave, SDW_SCP_INT1);
   1640		if (ret < 0) {
   1641			dev_err(&slave->dev,
   1642				"SDW_SCP_INT1 recheck read failed:%d\n", ret);
   1643			goto io_err;
   1644		}
   1645		_buf = ret;
   1646
   1647		ret = sdw_nread_no_pm(slave, SDW_SCP_INTSTAT2, 2, _buf2);
   1648		if (ret < 0) {
   1649			dev_err(&slave->dev,
   1650				"SDW_SCP_INT2/3 recheck read failed:%d\n", ret);
   1651			goto io_err;
   1652		}
   1653
   1654		if (slave->prop.is_sdca) {
   1655			ret = sdw_read_no_pm(slave, SDW_DP0_INT);
   1656			if (ret < 0) {
   1657				dev_err(&slave->dev,
   1658					"SDW_DP0_INT recheck read failed:%d\n", ret);
   1659				goto io_err;
   1660			}
   1661			sdca_cascade = ret & SDW_DP0_SDCA_CASCADE;
   1662		}
   1663
   1664		/*
   1665		 * Make sure no interrupts are pending, but filter to limit loop
   1666		 * to interrupts identified in the first status read
   1667		 */
   1668		buf &= _buf;
   1669		buf2[0] &= _buf2[0];
   1670		buf2[1] &= _buf2[1];
   1671		stat = buf || buf2[0] || buf2[1] || sdca_cascade;
   1672
   1673		/*
   1674		 * Exit loop if Slave is continuously in ALERT state even
   1675		 * after servicing the interrupt multiple times.
   1676		 */
   1677		count++;
   1678
   1679		/* we can get alerts while processing so keep retrying */
   1680	} while (stat != 0 && count < SDW_READ_INTR_CLEAR_RETRY);
   1681
   1682	if (count == SDW_READ_INTR_CLEAR_RETRY)
   1683		dev_warn(&slave->dev, "Reached MAX_RETRY on alert read\n");
   1684
   1685io_err:
   1686	pm_runtime_mark_last_busy(&slave->dev);
   1687	pm_runtime_put_autosuspend(&slave->dev);
   1688
   1689	return ret;
   1690}
   1691
   1692static int sdw_update_slave_status(struct sdw_slave *slave,
   1693				   enum sdw_slave_status status)
   1694{
   1695	unsigned long time;
   1696
   1697	if (!slave->probed) {
   1698		/*
   1699		 * the slave status update is typically handled in an
   1700		 * interrupt thread, which can race with the driver
   1701		 * probe, e.g. when a module needs to be loaded.
   1702		 *
   1703		 * make sure the probe is complete before updating
   1704		 * status.
   1705		 */
   1706		time = wait_for_completion_timeout(&slave->probe_complete,
   1707				msecs_to_jiffies(DEFAULT_PROBE_TIMEOUT));
   1708		if (!time) {
   1709			dev_err(&slave->dev, "Probe not complete, timed out\n");
   1710			return -ETIMEDOUT;
   1711		}
   1712	}
   1713
   1714	if (!slave->ops || !slave->ops->update_status)
   1715		return 0;
   1716
   1717	return slave->ops->update_status(slave, status);
   1718}
   1719
   1720/**
   1721 * sdw_handle_slave_status() - Handle Slave status
   1722 * @bus: SDW bus instance
   1723 * @status: Status for all Slave(s)
   1724 */
   1725int sdw_handle_slave_status(struct sdw_bus *bus,
   1726			    enum sdw_slave_status status[])
   1727{
   1728	enum sdw_slave_status prev_status;
   1729	struct sdw_slave *slave;
   1730	bool attached_initializing;
   1731	int i, ret = 0;
   1732
   1733	/* first check if any Slaves fell off the bus */
   1734	for (i = 1; i <= SDW_MAX_DEVICES; i++) {
   1735		mutex_lock(&bus->bus_lock);
   1736		if (test_bit(i, bus->assigned) == false) {
   1737			mutex_unlock(&bus->bus_lock);
   1738			continue;
   1739		}
   1740		mutex_unlock(&bus->bus_lock);
   1741
   1742		slave = sdw_get_slave(bus, i);
   1743		if (!slave)
   1744			continue;
   1745
   1746		if (status[i] == SDW_SLAVE_UNATTACHED &&
   1747		    slave->status != SDW_SLAVE_UNATTACHED) {
   1748			dev_warn(&slave->dev, "Slave %d state check1: UNATTACHED, status was %d\n",
   1749				 i, slave->status);
   1750			sdw_modify_slave_status(slave, SDW_SLAVE_UNATTACHED);
   1751		}
   1752	}
   1753
   1754	if (status[0] == SDW_SLAVE_ATTACHED) {
   1755		dev_dbg(bus->dev, "Slave attached, programming device number\n");
   1756		ret = sdw_program_device_num(bus);
   1757		if (ret < 0)
   1758			dev_err(bus->dev, "Slave attach failed: %d\n", ret);
   1759		/*
   1760		 * programming a device number will have side effects,
   1761		 * so we deal with other devices at a later time
   1762		 */
   1763		return ret;
   1764	}
   1765
   1766	/* Continue to check other slave statuses */
   1767	for (i = 1; i <= SDW_MAX_DEVICES; i++) {
   1768		mutex_lock(&bus->bus_lock);
   1769		if (test_bit(i, bus->assigned) == false) {
   1770			mutex_unlock(&bus->bus_lock);
   1771			continue;
   1772		}
   1773		mutex_unlock(&bus->bus_lock);
   1774
   1775		slave = sdw_get_slave(bus, i);
   1776		if (!slave)
   1777			continue;
   1778
   1779		attached_initializing = false;
   1780
   1781		switch (status[i]) {
   1782		case SDW_SLAVE_UNATTACHED:
   1783			if (slave->status == SDW_SLAVE_UNATTACHED)
   1784				break;
   1785
   1786			dev_warn(&slave->dev, "Slave %d state check2: UNATTACHED, status was %d\n",
   1787				 i, slave->status);
   1788
   1789			sdw_modify_slave_status(slave, SDW_SLAVE_UNATTACHED);
   1790			break;
   1791
   1792		case SDW_SLAVE_ALERT:
   1793			ret = sdw_handle_slave_alerts(slave);
   1794			if (ret < 0)
   1795				dev_err(&slave->dev,
   1796					"Slave %d alert handling failed: %d\n",
   1797					i, ret);
   1798			break;
   1799
   1800		case SDW_SLAVE_ATTACHED:
   1801			if (slave->status == SDW_SLAVE_ATTACHED)
   1802				break;
   1803
   1804			prev_status = slave->status;
   1805			sdw_modify_slave_status(slave, SDW_SLAVE_ATTACHED);
   1806
   1807			if (prev_status == SDW_SLAVE_ALERT)
   1808				break;
   1809
   1810			attached_initializing = true;
   1811
   1812			ret = sdw_initialize_slave(slave);
   1813			if (ret < 0)
   1814				dev_err(&slave->dev,
   1815					"Slave %d initialization failed: %d\n",
   1816					i, ret);
   1817
   1818			break;
   1819
   1820		default:
   1821			dev_err(&slave->dev, "Invalid slave %d status:%d\n",
   1822				i, status[i]);
   1823			break;
   1824		}
   1825
   1826		ret = sdw_update_slave_status(slave, status[i]);
   1827		if (ret < 0)
   1828			dev_err(&slave->dev,
   1829				"Update Slave status failed:%d\n", ret);
   1830		if (attached_initializing) {
   1831			dev_dbg(&slave->dev,
   1832				"%s: signaling initialization completion for Slave %d\n",
   1833				__func__, slave->dev_num);
   1834
   1835			complete(&slave->initialization_complete);
   1836
   1837			/*
   1838			 * If the manager became pm_runtime active, the peripherals will be
   1839			 * restarted and attach, but their pm_runtime status may remain
   1840			 * suspended. If the 'update_slave_status' callback initiates
   1841			 * any sort of deferred processing, this processing would not be
   1842			 * cancelled on pm_runtime suspend.
   1843			 * To avoid such zombie states, we queue a request to resume.
   1844			 * This would be a no-op in case the peripheral was being resumed
   1845			 * by e.g. the ALSA/ASoC framework.
   1846			 */
   1847			pm_request_resume(&slave->dev);
   1848		}
   1849	}
   1850
   1851	return ret;
   1852}
   1853EXPORT_SYMBOL(sdw_handle_slave_status);
   1854
   1855void sdw_clear_slave_status(struct sdw_bus *bus, u32 request)
   1856{
   1857	struct sdw_slave *slave;
   1858	int i;
   1859
   1860	/* Check all non-zero devices */
   1861	for (i = 1; i <= SDW_MAX_DEVICES; i++) {
   1862		mutex_lock(&bus->bus_lock);
   1863		if (test_bit(i, bus->assigned) == false) {
   1864			mutex_unlock(&bus->bus_lock);
   1865			continue;
   1866		}
   1867		mutex_unlock(&bus->bus_lock);
   1868
   1869		slave = sdw_get_slave(bus, i);
   1870		if (!slave)
   1871			continue;
   1872
   1873		if (slave->status != SDW_SLAVE_UNATTACHED) {
   1874			sdw_modify_slave_status(slave, SDW_SLAVE_UNATTACHED);
   1875			slave->first_interrupt_done = false;
   1876			sdw_update_slave_status(slave, SDW_SLAVE_UNATTACHED);
   1877		}
   1878
   1879		/* keep track of request, used in pm_runtime resume */
   1880		slave->unattach_request = request;
   1881	}
   1882}
   1883EXPORT_SYMBOL(sdw_clear_slave_status);