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

stream.c (50046B)


      1// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
      2// Copyright(c) 2015-18 Intel Corporation.
      3
      4/*
      5 *  stream.c - SoundWire Bus stream operations.
      6 */
      7
      8#include <linux/delay.h>
      9#include <linux/device.h>
     10#include <linux/init.h>
     11#include <linux/module.h>
     12#include <linux/mod_devicetable.h>
     13#include <linux/slab.h>
     14#include <linux/soundwire/sdw_registers.h>
     15#include <linux/soundwire/sdw.h>
     16#include <sound/soc.h>
     17#include "bus.h"
     18
     19/*
     20 * Array of supported rows and columns as per MIPI SoundWire Specification 1.1
     21 *
     22 * The rows are arranged as per the array index value programmed
     23 * in register. The index 15 has dummy value 0 in order to fill hole.
     24 */
     25int sdw_rows[SDW_FRAME_ROWS] = {48, 50, 60, 64, 75, 80, 125, 147,
     26			96, 100, 120, 128, 150, 160, 250, 0,
     27			192, 200, 240, 256, 72, 144, 90, 180};
     28EXPORT_SYMBOL(sdw_rows);
     29
     30int sdw_cols[SDW_FRAME_COLS] = {2, 4, 6, 8, 10, 12, 14, 16};
     31EXPORT_SYMBOL(sdw_cols);
     32
     33int sdw_find_col_index(int col)
     34{
     35	int i;
     36
     37	for (i = 0; i < SDW_FRAME_COLS; i++) {
     38		if (sdw_cols[i] == col)
     39			return i;
     40	}
     41
     42	pr_warn("Requested column not found, selecting lowest column no: 2\n");
     43	return 0;
     44}
     45EXPORT_SYMBOL(sdw_find_col_index);
     46
     47int sdw_find_row_index(int row)
     48{
     49	int i;
     50
     51	for (i = 0; i < SDW_FRAME_ROWS; i++) {
     52		if (sdw_rows[i] == row)
     53			return i;
     54	}
     55
     56	pr_warn("Requested row not found, selecting lowest row no: 48\n");
     57	return 0;
     58}
     59EXPORT_SYMBOL(sdw_find_row_index);
     60
     61static int _sdw_program_slave_port_params(struct sdw_bus *bus,
     62					  struct sdw_slave *slave,
     63					  struct sdw_transport_params *t_params,
     64					  enum sdw_dpn_type type)
     65{
     66	u32 addr1, addr2, addr3, addr4;
     67	int ret;
     68	u16 wbuf;
     69
     70	if (bus->params.next_bank) {
     71		addr1 = SDW_DPN_OFFSETCTRL2_B1(t_params->port_num);
     72		addr2 = SDW_DPN_BLOCKCTRL3_B1(t_params->port_num);
     73		addr3 = SDW_DPN_SAMPLECTRL2_B1(t_params->port_num);
     74		addr4 = SDW_DPN_HCTRL_B1(t_params->port_num);
     75	} else {
     76		addr1 = SDW_DPN_OFFSETCTRL2_B0(t_params->port_num);
     77		addr2 = SDW_DPN_BLOCKCTRL3_B0(t_params->port_num);
     78		addr3 = SDW_DPN_SAMPLECTRL2_B0(t_params->port_num);
     79		addr4 = SDW_DPN_HCTRL_B0(t_params->port_num);
     80	}
     81
     82	/* Program DPN_OffsetCtrl2 registers */
     83	ret = sdw_write(slave, addr1, t_params->offset2);
     84	if (ret < 0) {
     85		dev_err(bus->dev, "DPN_OffsetCtrl2 register write failed\n");
     86		return ret;
     87	}
     88
     89	/* Program DPN_BlockCtrl3 register */
     90	ret = sdw_write(slave, addr2, t_params->blk_pkg_mode);
     91	if (ret < 0) {
     92		dev_err(bus->dev, "DPN_BlockCtrl3 register write failed\n");
     93		return ret;
     94	}
     95
     96	/*
     97	 * Data ports are FULL, SIMPLE and REDUCED. This function handles
     98	 * FULL and REDUCED only and beyond this point only FULL is
     99	 * handled, so bail out if we are not FULL data port type
    100	 */
    101	if (type != SDW_DPN_FULL)
    102		return ret;
    103
    104	/* Program DPN_SampleCtrl2 register */
    105	wbuf = FIELD_GET(SDW_DPN_SAMPLECTRL_HIGH, t_params->sample_interval - 1);
    106
    107	ret = sdw_write(slave, addr3, wbuf);
    108	if (ret < 0) {
    109		dev_err(bus->dev, "DPN_SampleCtrl2 register write failed\n");
    110		return ret;
    111	}
    112
    113	/* Program DPN_HCtrl register */
    114	wbuf = FIELD_PREP(SDW_DPN_HCTRL_HSTART, t_params->hstart);
    115	wbuf |= FIELD_PREP(SDW_DPN_HCTRL_HSTOP, t_params->hstop);
    116
    117	ret = sdw_write(slave, addr4, wbuf);
    118	if (ret < 0)
    119		dev_err(bus->dev, "DPN_HCtrl register write failed\n");
    120
    121	return ret;
    122}
    123
    124static int sdw_program_slave_port_params(struct sdw_bus *bus,
    125					 struct sdw_slave_runtime *s_rt,
    126					 struct sdw_port_runtime *p_rt)
    127{
    128	struct sdw_transport_params *t_params = &p_rt->transport_params;
    129	struct sdw_port_params *p_params = &p_rt->port_params;
    130	struct sdw_slave_prop *slave_prop = &s_rt->slave->prop;
    131	u32 addr1, addr2, addr3, addr4, addr5, addr6;
    132	struct sdw_dpn_prop *dpn_prop;
    133	int ret;
    134	u8 wbuf;
    135
    136	if (s_rt->slave->is_mockup_device)
    137		return 0;
    138
    139	dpn_prop = sdw_get_slave_dpn_prop(s_rt->slave,
    140					  s_rt->direction,
    141					  t_params->port_num);
    142	if (!dpn_prop)
    143		return -EINVAL;
    144
    145	addr1 = SDW_DPN_PORTCTRL(t_params->port_num);
    146	addr2 = SDW_DPN_BLOCKCTRL1(t_params->port_num);
    147
    148	if (bus->params.next_bank) {
    149		addr3 = SDW_DPN_SAMPLECTRL1_B1(t_params->port_num);
    150		addr4 = SDW_DPN_OFFSETCTRL1_B1(t_params->port_num);
    151		addr5 = SDW_DPN_BLOCKCTRL2_B1(t_params->port_num);
    152		addr6 = SDW_DPN_LANECTRL_B1(t_params->port_num);
    153
    154	} else {
    155		addr3 = SDW_DPN_SAMPLECTRL1_B0(t_params->port_num);
    156		addr4 = SDW_DPN_OFFSETCTRL1_B0(t_params->port_num);
    157		addr5 = SDW_DPN_BLOCKCTRL2_B0(t_params->port_num);
    158		addr6 = SDW_DPN_LANECTRL_B0(t_params->port_num);
    159	}
    160
    161	/* Program DPN_PortCtrl register */
    162	wbuf = FIELD_PREP(SDW_DPN_PORTCTRL_DATAMODE, p_params->data_mode);
    163	wbuf |= FIELD_PREP(SDW_DPN_PORTCTRL_FLOWMODE, p_params->flow_mode);
    164
    165	ret = sdw_update(s_rt->slave, addr1, 0xF, wbuf);
    166	if (ret < 0) {
    167		dev_err(&s_rt->slave->dev,
    168			"DPN_PortCtrl register write failed for port %d\n",
    169			t_params->port_num);
    170		return ret;
    171	}
    172
    173	if (!dpn_prop->read_only_wordlength) {
    174		/* Program DPN_BlockCtrl1 register */
    175		ret = sdw_write(s_rt->slave, addr2, (p_params->bps - 1));
    176		if (ret < 0) {
    177			dev_err(&s_rt->slave->dev,
    178				"DPN_BlockCtrl1 register write failed for port %d\n",
    179				t_params->port_num);
    180			return ret;
    181		}
    182	}
    183
    184	/* Program DPN_SampleCtrl1 register */
    185	wbuf = (t_params->sample_interval - 1) & SDW_DPN_SAMPLECTRL_LOW;
    186	ret = sdw_write(s_rt->slave, addr3, wbuf);
    187	if (ret < 0) {
    188		dev_err(&s_rt->slave->dev,
    189			"DPN_SampleCtrl1 register write failed for port %d\n",
    190			t_params->port_num);
    191		return ret;
    192	}
    193
    194	/* Program DPN_OffsetCtrl1 registers */
    195	ret = sdw_write(s_rt->slave, addr4, t_params->offset1);
    196	if (ret < 0) {
    197		dev_err(&s_rt->slave->dev,
    198			"DPN_OffsetCtrl1 register write failed for port %d\n",
    199			t_params->port_num);
    200		return ret;
    201	}
    202
    203	/* Program DPN_BlockCtrl2 register*/
    204	if (t_params->blk_grp_ctrl_valid) {
    205		ret = sdw_write(s_rt->slave, addr5, t_params->blk_grp_ctrl);
    206		if (ret < 0) {
    207			dev_err(&s_rt->slave->dev,
    208				"DPN_BlockCtrl2 reg write failed for port %d\n",
    209				t_params->port_num);
    210			return ret;
    211		}
    212	}
    213
    214	/* program DPN_LaneCtrl register */
    215	if (slave_prop->lane_control_support) {
    216		ret = sdw_write(s_rt->slave, addr6, t_params->lane_ctrl);
    217		if (ret < 0) {
    218			dev_err(&s_rt->slave->dev,
    219				"DPN_LaneCtrl register write failed for port %d\n",
    220				t_params->port_num);
    221			return ret;
    222		}
    223	}
    224
    225	if (dpn_prop->type != SDW_DPN_SIMPLE) {
    226		ret = _sdw_program_slave_port_params(bus, s_rt->slave,
    227						     t_params, dpn_prop->type);
    228		if (ret < 0)
    229			dev_err(&s_rt->slave->dev,
    230				"Transport reg write failed for port: %d\n",
    231				t_params->port_num);
    232	}
    233
    234	return ret;
    235}
    236
    237static int sdw_program_master_port_params(struct sdw_bus *bus,
    238					  struct sdw_port_runtime *p_rt)
    239{
    240	int ret;
    241
    242	/*
    243	 * we need to set transport and port parameters for the port.
    244	 * Transport parameters refers to the sample interval, offsets and
    245	 * hstart/stop etc of the data. Port parameters refers to word
    246	 * length, flow mode etc of the port
    247	 */
    248	ret = bus->port_ops->dpn_set_port_transport_params(bus,
    249					&p_rt->transport_params,
    250					bus->params.next_bank);
    251	if (ret < 0)
    252		return ret;
    253
    254	return bus->port_ops->dpn_set_port_params(bus,
    255						  &p_rt->port_params,
    256						  bus->params.next_bank);
    257}
    258
    259/**
    260 * sdw_program_port_params() - Programs transport parameters of Master(s)
    261 * and Slave(s)
    262 *
    263 * @m_rt: Master stream runtime
    264 */
    265static int sdw_program_port_params(struct sdw_master_runtime *m_rt)
    266{
    267	struct sdw_slave_runtime *s_rt;
    268	struct sdw_bus *bus = m_rt->bus;
    269	struct sdw_port_runtime *p_rt;
    270	int ret = 0;
    271
    272	/* Program transport & port parameters for Slave(s) */
    273	list_for_each_entry(s_rt, &m_rt->slave_rt_list, m_rt_node) {
    274		list_for_each_entry(p_rt, &s_rt->port_list, port_node) {
    275			ret = sdw_program_slave_port_params(bus, s_rt, p_rt);
    276			if (ret < 0)
    277				return ret;
    278		}
    279	}
    280
    281	/* Program transport & port parameters for Master(s) */
    282	list_for_each_entry(p_rt, &m_rt->port_list, port_node) {
    283		ret = sdw_program_master_port_params(bus, p_rt);
    284		if (ret < 0)
    285			return ret;
    286	}
    287
    288	return 0;
    289}
    290
    291/**
    292 * sdw_enable_disable_slave_ports: Enable/disable slave data port
    293 *
    294 * @bus: bus instance
    295 * @s_rt: slave runtime
    296 * @p_rt: port runtime
    297 * @en: enable or disable operation
    298 *
    299 * This function only sets the enable/disable bits in the relevant bank, the
    300 * actual enable/disable is done with a bank switch
    301 */
    302static int sdw_enable_disable_slave_ports(struct sdw_bus *bus,
    303					  struct sdw_slave_runtime *s_rt,
    304					  struct sdw_port_runtime *p_rt,
    305					  bool en)
    306{
    307	struct sdw_transport_params *t_params = &p_rt->transport_params;
    308	u32 addr;
    309	int ret;
    310
    311	if (bus->params.next_bank)
    312		addr = SDW_DPN_CHANNELEN_B1(p_rt->num);
    313	else
    314		addr = SDW_DPN_CHANNELEN_B0(p_rt->num);
    315
    316	/*
    317	 * Since bus doesn't support sharing a port across two streams,
    318	 * it is safe to reset this register
    319	 */
    320	if (en)
    321		ret = sdw_write(s_rt->slave, addr, p_rt->ch_mask);
    322	else
    323		ret = sdw_write(s_rt->slave, addr, 0x0);
    324
    325	if (ret < 0)
    326		dev_err(&s_rt->slave->dev,
    327			"Slave chn_en reg write failed:%d port:%d\n",
    328			ret, t_params->port_num);
    329
    330	return ret;
    331}
    332
    333static int sdw_enable_disable_master_ports(struct sdw_master_runtime *m_rt,
    334					   struct sdw_port_runtime *p_rt,
    335					   bool en)
    336{
    337	struct sdw_transport_params *t_params = &p_rt->transport_params;
    338	struct sdw_bus *bus = m_rt->bus;
    339	struct sdw_enable_ch enable_ch;
    340	int ret;
    341
    342	enable_ch.port_num = p_rt->num;
    343	enable_ch.ch_mask = p_rt->ch_mask;
    344	enable_ch.enable = en;
    345
    346	/* Perform Master port channel(s) enable/disable */
    347	if (bus->port_ops->dpn_port_enable_ch) {
    348		ret = bus->port_ops->dpn_port_enable_ch(bus,
    349							&enable_ch,
    350							bus->params.next_bank);
    351		if (ret < 0) {
    352			dev_err(bus->dev,
    353				"Master chn_en write failed:%d port:%d\n",
    354				ret, t_params->port_num);
    355			return ret;
    356		}
    357	} else {
    358		dev_err(bus->dev,
    359			"dpn_port_enable_ch not supported, %s failed\n",
    360			en ? "enable" : "disable");
    361		return -EINVAL;
    362	}
    363
    364	return 0;
    365}
    366
    367/**
    368 * sdw_enable_disable_ports() - Enable/disable port(s) for Master and
    369 * Slave(s)
    370 *
    371 * @m_rt: Master stream runtime
    372 * @en: mode (enable/disable)
    373 */
    374static int sdw_enable_disable_ports(struct sdw_master_runtime *m_rt, bool en)
    375{
    376	struct sdw_port_runtime *s_port, *m_port;
    377	struct sdw_slave_runtime *s_rt;
    378	int ret = 0;
    379
    380	/* Enable/Disable Slave port(s) */
    381	list_for_each_entry(s_rt, &m_rt->slave_rt_list, m_rt_node) {
    382		list_for_each_entry(s_port, &s_rt->port_list, port_node) {
    383			ret = sdw_enable_disable_slave_ports(m_rt->bus, s_rt,
    384							     s_port, en);
    385			if (ret < 0)
    386				return ret;
    387		}
    388	}
    389
    390	/* Enable/Disable Master port(s) */
    391	list_for_each_entry(m_port, &m_rt->port_list, port_node) {
    392		ret = sdw_enable_disable_master_ports(m_rt, m_port, en);
    393		if (ret < 0)
    394			return ret;
    395	}
    396
    397	return 0;
    398}
    399
    400static int sdw_do_port_prep(struct sdw_slave_runtime *s_rt,
    401			    struct sdw_prepare_ch prep_ch,
    402			    enum sdw_port_prep_ops cmd)
    403{
    404	const struct sdw_slave_ops *ops = s_rt->slave->ops;
    405	int ret;
    406
    407	if (ops->port_prep) {
    408		ret = ops->port_prep(s_rt->slave, &prep_ch, cmd);
    409		if (ret < 0) {
    410			dev_err(&s_rt->slave->dev,
    411				"Slave Port Prep cmd %d failed: %d\n",
    412				cmd, ret);
    413			return ret;
    414		}
    415	}
    416
    417	return 0;
    418}
    419
    420static int sdw_prep_deprep_slave_ports(struct sdw_bus *bus,
    421				       struct sdw_slave_runtime *s_rt,
    422				       struct sdw_port_runtime *p_rt,
    423				       bool prep)
    424{
    425	struct completion *port_ready;
    426	struct sdw_dpn_prop *dpn_prop;
    427	struct sdw_prepare_ch prep_ch;
    428	bool intr = false;
    429	int ret = 0, val;
    430	u32 addr;
    431
    432	prep_ch.num = p_rt->num;
    433	prep_ch.ch_mask = p_rt->ch_mask;
    434
    435	dpn_prop = sdw_get_slave_dpn_prop(s_rt->slave,
    436					  s_rt->direction,
    437					  prep_ch.num);
    438	if (!dpn_prop) {
    439		dev_err(bus->dev,
    440			"Slave Port:%d properties not found\n", prep_ch.num);
    441		return -EINVAL;
    442	}
    443
    444	prep_ch.prepare = prep;
    445
    446	prep_ch.bank = bus->params.next_bank;
    447
    448	if (dpn_prop->imp_def_interrupts || !dpn_prop->simple_ch_prep_sm ||
    449	    bus->params.s_data_mode != SDW_PORT_DATA_MODE_NORMAL)
    450		intr = true;
    451
    452	/*
    453	 * Enable interrupt before Port prepare.
    454	 * For Port de-prepare, it is assumed that port
    455	 * was prepared earlier
    456	 */
    457	if (prep && intr) {
    458		ret = sdw_configure_dpn_intr(s_rt->slave, p_rt->num, prep,
    459					     dpn_prop->imp_def_interrupts);
    460		if (ret < 0)
    461			return ret;
    462	}
    463
    464	/* Inform slave about the impending port prepare */
    465	sdw_do_port_prep(s_rt, prep_ch, SDW_OPS_PORT_PRE_PREP);
    466
    467	/* Prepare Slave port implementing CP_SM */
    468	if (!dpn_prop->simple_ch_prep_sm) {
    469		addr = SDW_DPN_PREPARECTRL(p_rt->num);
    470
    471		if (prep)
    472			ret = sdw_write(s_rt->slave, addr, p_rt->ch_mask);
    473		else
    474			ret = sdw_write(s_rt->slave, addr, 0x0);
    475
    476		if (ret < 0) {
    477			dev_err(&s_rt->slave->dev,
    478				"Slave prep_ctrl reg write failed\n");
    479			return ret;
    480		}
    481
    482		/* Wait for completion on port ready */
    483		port_ready = &s_rt->slave->port_ready[prep_ch.num];
    484		wait_for_completion_timeout(port_ready,
    485			msecs_to_jiffies(dpn_prop->ch_prep_timeout));
    486
    487		val = sdw_read(s_rt->slave, SDW_DPN_PREPARESTATUS(p_rt->num));
    488		if ((val < 0) || (val & p_rt->ch_mask)) {
    489			ret = (val < 0) ? val : -ETIMEDOUT;
    490			dev_err(&s_rt->slave->dev,
    491				"Chn prep failed for port %d: %d\n", prep_ch.num, ret);
    492			return ret;
    493		}
    494	}
    495
    496	/* Inform slaves about ports prepared */
    497	sdw_do_port_prep(s_rt, prep_ch, SDW_OPS_PORT_POST_PREP);
    498
    499	/* Disable interrupt after Port de-prepare */
    500	if (!prep && intr)
    501		ret = sdw_configure_dpn_intr(s_rt->slave, p_rt->num, prep,
    502					     dpn_prop->imp_def_interrupts);
    503
    504	return ret;
    505}
    506
    507static int sdw_prep_deprep_master_ports(struct sdw_master_runtime *m_rt,
    508					struct sdw_port_runtime *p_rt,
    509					bool prep)
    510{
    511	struct sdw_transport_params *t_params = &p_rt->transport_params;
    512	struct sdw_bus *bus = m_rt->bus;
    513	const struct sdw_master_port_ops *ops = bus->port_ops;
    514	struct sdw_prepare_ch prep_ch;
    515	int ret = 0;
    516
    517	prep_ch.num = p_rt->num;
    518	prep_ch.ch_mask = p_rt->ch_mask;
    519	prep_ch.prepare = prep; /* Prepare/De-prepare */
    520	prep_ch.bank = bus->params.next_bank;
    521
    522	/* Pre-prepare/Pre-deprepare port(s) */
    523	if (ops->dpn_port_prep) {
    524		ret = ops->dpn_port_prep(bus, &prep_ch);
    525		if (ret < 0) {
    526			dev_err(bus->dev, "Port prepare failed for port:%d\n",
    527				t_params->port_num);
    528			return ret;
    529		}
    530	}
    531
    532	return ret;
    533}
    534
    535/**
    536 * sdw_prep_deprep_ports() - Prepare/De-prepare port(s) for Master(s) and
    537 * Slave(s)
    538 *
    539 * @m_rt: Master runtime handle
    540 * @prep: Prepare or De-prepare
    541 */
    542static int sdw_prep_deprep_ports(struct sdw_master_runtime *m_rt, bool prep)
    543{
    544	struct sdw_slave_runtime *s_rt;
    545	struct sdw_port_runtime *p_rt;
    546	int ret = 0;
    547
    548	/* Prepare/De-prepare Slave port(s) */
    549	list_for_each_entry(s_rt, &m_rt->slave_rt_list, m_rt_node) {
    550		list_for_each_entry(p_rt, &s_rt->port_list, port_node) {
    551			ret = sdw_prep_deprep_slave_ports(m_rt->bus, s_rt,
    552							  p_rt, prep);
    553			if (ret < 0)
    554				return ret;
    555		}
    556	}
    557
    558	/* Prepare/De-prepare Master port(s) */
    559	list_for_each_entry(p_rt, &m_rt->port_list, port_node) {
    560		ret = sdw_prep_deprep_master_ports(m_rt, p_rt, prep);
    561		if (ret < 0)
    562			return ret;
    563	}
    564
    565	return ret;
    566}
    567
    568/**
    569 * sdw_notify_config() - Notify bus configuration
    570 *
    571 * @m_rt: Master runtime handle
    572 *
    573 * This function notifies the Master(s) and Slave(s) of the
    574 * new bus configuration.
    575 */
    576static int sdw_notify_config(struct sdw_master_runtime *m_rt)
    577{
    578	struct sdw_slave_runtime *s_rt;
    579	struct sdw_bus *bus = m_rt->bus;
    580	struct sdw_slave *slave;
    581	int ret = 0;
    582
    583	if (bus->ops->set_bus_conf) {
    584		ret = bus->ops->set_bus_conf(bus, &bus->params);
    585		if (ret < 0)
    586			return ret;
    587	}
    588
    589	list_for_each_entry(s_rt, &m_rt->slave_rt_list, m_rt_node) {
    590		slave = s_rt->slave;
    591
    592		if (slave->ops->bus_config) {
    593			ret = slave->ops->bus_config(slave, &bus->params);
    594			if (ret < 0) {
    595				dev_err(bus->dev, "Notify Slave: %d failed\n",
    596					slave->dev_num);
    597				return ret;
    598			}
    599		}
    600	}
    601
    602	return ret;
    603}
    604
    605/**
    606 * sdw_program_params() - Program transport and port parameters for Master(s)
    607 * and Slave(s)
    608 *
    609 * @bus: SDW bus instance
    610 * @prepare: true if sdw_program_params() is called by _prepare.
    611 */
    612static int sdw_program_params(struct sdw_bus *bus, bool prepare)
    613{
    614	struct sdw_master_runtime *m_rt;
    615	int ret = 0;
    616
    617	list_for_each_entry(m_rt, &bus->m_rt_list, bus_node) {
    618
    619		/*
    620		 * this loop walks through all master runtimes for a
    621		 * bus, but the ports can only be configured while
    622		 * explicitly preparing a stream or handling an
    623		 * already-prepared stream otherwise.
    624		 */
    625		if (!prepare &&
    626		    m_rt->stream->state == SDW_STREAM_CONFIGURED)
    627			continue;
    628
    629		ret = sdw_program_port_params(m_rt);
    630		if (ret < 0) {
    631			dev_err(bus->dev,
    632				"Program transport params failed: %d\n", ret);
    633			return ret;
    634		}
    635
    636		ret = sdw_notify_config(m_rt);
    637		if (ret < 0) {
    638			dev_err(bus->dev,
    639				"Notify bus config failed: %d\n", ret);
    640			return ret;
    641		}
    642
    643		/* Enable port(s) on alternate bank for all active streams */
    644		if (m_rt->stream->state != SDW_STREAM_ENABLED)
    645			continue;
    646
    647		ret = sdw_enable_disable_ports(m_rt, true);
    648		if (ret < 0) {
    649			dev_err(bus->dev, "Enable channel failed: %d\n", ret);
    650			return ret;
    651		}
    652	}
    653
    654	return ret;
    655}
    656
    657static int sdw_bank_switch(struct sdw_bus *bus, int m_rt_count)
    658{
    659	int col_index, row_index;
    660	bool multi_link;
    661	struct sdw_msg *wr_msg;
    662	u8 *wbuf;
    663	int ret;
    664	u16 addr;
    665
    666	wr_msg = kzalloc(sizeof(*wr_msg), GFP_KERNEL);
    667	if (!wr_msg)
    668		return -ENOMEM;
    669
    670	bus->defer_msg.msg = wr_msg;
    671
    672	wbuf = kzalloc(sizeof(*wbuf), GFP_KERNEL);
    673	if (!wbuf) {
    674		ret = -ENOMEM;
    675		goto error_1;
    676	}
    677
    678	/* Get row and column index to program register */
    679	col_index = sdw_find_col_index(bus->params.col);
    680	row_index = sdw_find_row_index(bus->params.row);
    681	wbuf[0] = col_index | (row_index << 3);
    682
    683	if (bus->params.next_bank)
    684		addr = SDW_SCP_FRAMECTRL_B1;
    685	else
    686		addr = SDW_SCP_FRAMECTRL_B0;
    687
    688	sdw_fill_msg(wr_msg, NULL, addr, 1, SDW_BROADCAST_DEV_NUM,
    689		     SDW_MSG_FLAG_WRITE, wbuf);
    690	wr_msg->ssp_sync = true;
    691
    692	/*
    693	 * Set the multi_link flag only when both the hardware supports
    694	 * and hardware-based sync is required
    695	 */
    696	multi_link = bus->multi_link && (m_rt_count >= bus->hw_sync_min_links);
    697
    698	if (multi_link)
    699		ret = sdw_transfer_defer(bus, wr_msg, &bus->defer_msg);
    700	else
    701		ret = sdw_transfer(bus, wr_msg);
    702
    703	if (ret < 0 && ret != -ENODATA) {
    704		dev_err(bus->dev, "Slave frame_ctrl reg write failed\n");
    705		goto error;
    706	}
    707
    708	if (!multi_link) {
    709		kfree(wr_msg);
    710		kfree(wbuf);
    711		bus->defer_msg.msg = NULL;
    712		bus->params.curr_bank = !bus->params.curr_bank;
    713		bus->params.next_bank = !bus->params.next_bank;
    714	}
    715
    716	return 0;
    717
    718error:
    719	kfree(wbuf);
    720error_1:
    721	kfree(wr_msg);
    722	bus->defer_msg.msg = NULL;
    723	return ret;
    724}
    725
    726/**
    727 * sdw_ml_sync_bank_switch: Multilink register bank switch
    728 *
    729 * @bus: SDW bus instance
    730 *
    731 * Caller function should free the buffers on error
    732 */
    733static int sdw_ml_sync_bank_switch(struct sdw_bus *bus)
    734{
    735	unsigned long time_left;
    736
    737	if (!bus->multi_link)
    738		return 0;
    739
    740	/* Wait for completion of transfer */
    741	time_left = wait_for_completion_timeout(&bus->defer_msg.complete,
    742						bus->bank_switch_timeout);
    743
    744	if (!time_left) {
    745		dev_err(bus->dev, "Controller Timed out on bank switch\n");
    746		return -ETIMEDOUT;
    747	}
    748
    749	bus->params.curr_bank = !bus->params.curr_bank;
    750	bus->params.next_bank = !bus->params.next_bank;
    751
    752	if (bus->defer_msg.msg) {
    753		kfree(bus->defer_msg.msg->buf);
    754		kfree(bus->defer_msg.msg);
    755	}
    756
    757	return 0;
    758}
    759
    760static int do_bank_switch(struct sdw_stream_runtime *stream)
    761{
    762	struct sdw_master_runtime *m_rt;
    763	const struct sdw_master_ops *ops;
    764	struct sdw_bus *bus;
    765	bool multi_link = false;
    766	int m_rt_count;
    767	int ret = 0;
    768
    769	m_rt_count = stream->m_rt_count;
    770
    771	list_for_each_entry(m_rt, &stream->master_list, stream_node) {
    772		bus = m_rt->bus;
    773		ops = bus->ops;
    774
    775		if (bus->multi_link && m_rt_count >= bus->hw_sync_min_links) {
    776			multi_link = true;
    777			mutex_lock(&bus->msg_lock);
    778		}
    779
    780		/* Pre-bank switch */
    781		if (ops->pre_bank_switch) {
    782			ret = ops->pre_bank_switch(bus);
    783			if (ret < 0) {
    784				dev_err(bus->dev,
    785					"Pre bank switch op failed: %d\n", ret);
    786				goto msg_unlock;
    787			}
    788		}
    789
    790		/*
    791		 * Perform Bank switch operation.
    792		 * For multi link cases, the actual bank switch is
    793		 * synchronized across all Masters and happens later as a
    794		 * part of post_bank_switch ops.
    795		 */
    796		ret = sdw_bank_switch(bus, m_rt_count);
    797		if (ret < 0) {
    798			dev_err(bus->dev, "Bank switch failed: %d\n", ret);
    799			goto error;
    800		}
    801	}
    802
    803	/*
    804	 * For multi link cases, it is expected that the bank switch is
    805	 * triggered by the post_bank_switch for the first Master in the list
    806	 * and for the other Masters the post_bank_switch() should return doing
    807	 * nothing.
    808	 */
    809	list_for_each_entry(m_rt, &stream->master_list, stream_node) {
    810		bus = m_rt->bus;
    811		ops = bus->ops;
    812
    813		/* Post-bank switch */
    814		if (ops->post_bank_switch) {
    815			ret = ops->post_bank_switch(bus);
    816			if (ret < 0) {
    817				dev_err(bus->dev,
    818					"Post bank switch op failed: %d\n",
    819					ret);
    820				goto error;
    821			}
    822		} else if (multi_link) {
    823			dev_err(bus->dev,
    824				"Post bank switch ops not implemented\n");
    825			ret = -EINVAL;
    826			goto error;
    827		}
    828
    829		/* Set the bank switch timeout to default, if not set */
    830		if (!bus->bank_switch_timeout)
    831			bus->bank_switch_timeout = DEFAULT_BANK_SWITCH_TIMEOUT;
    832
    833		/* Check if bank switch was successful */
    834		ret = sdw_ml_sync_bank_switch(bus);
    835		if (ret < 0) {
    836			dev_err(bus->dev,
    837				"multi link bank switch failed: %d\n", ret);
    838			goto error;
    839		}
    840
    841		if (multi_link)
    842			mutex_unlock(&bus->msg_lock);
    843	}
    844
    845	return ret;
    846
    847error:
    848	list_for_each_entry(m_rt, &stream->master_list, stream_node) {
    849		bus = m_rt->bus;
    850		if (bus->defer_msg.msg) {
    851			kfree(bus->defer_msg.msg->buf);
    852			kfree(bus->defer_msg.msg);
    853		}
    854	}
    855
    856msg_unlock:
    857
    858	if (multi_link) {
    859		list_for_each_entry(m_rt, &stream->master_list, stream_node) {
    860			bus = m_rt->bus;
    861			if (mutex_is_locked(&bus->msg_lock))
    862				mutex_unlock(&bus->msg_lock);
    863		}
    864	}
    865
    866	return ret;
    867}
    868
    869static struct sdw_port_runtime *sdw_port_alloc(struct list_head *port_list)
    870{
    871	struct sdw_port_runtime *p_rt;
    872
    873	p_rt = kzalloc(sizeof(*p_rt), GFP_KERNEL);
    874	if (!p_rt)
    875		return NULL;
    876
    877	list_add_tail(&p_rt->port_node, port_list);
    878
    879	return p_rt;
    880}
    881
    882static int sdw_port_config(struct sdw_port_runtime *p_rt,
    883			   struct sdw_port_config *port_config,
    884			   int port_index)
    885{
    886	p_rt->ch_mask = port_config[port_index].ch_mask;
    887	p_rt->num = port_config[port_index].num;
    888
    889	/*
    890	 * TODO: Check port capabilities for requested configuration
    891	 */
    892
    893	return 0;
    894}
    895
    896static void sdw_port_free(struct sdw_port_runtime *p_rt)
    897{
    898	list_del(&p_rt->port_node);
    899	kfree(p_rt);
    900}
    901
    902static bool sdw_slave_port_allocated(struct sdw_slave_runtime *s_rt)
    903{
    904	return !list_empty(&s_rt->port_list);
    905}
    906
    907static void sdw_slave_port_free(struct sdw_slave *slave,
    908				struct sdw_stream_runtime *stream)
    909{
    910	struct sdw_port_runtime *p_rt, *_p_rt;
    911	struct sdw_master_runtime *m_rt;
    912	struct sdw_slave_runtime *s_rt;
    913
    914	list_for_each_entry(m_rt, &stream->master_list, stream_node) {
    915		list_for_each_entry(s_rt, &m_rt->slave_rt_list, m_rt_node) {
    916			if (s_rt->slave != slave)
    917				continue;
    918
    919			list_for_each_entry_safe(p_rt, _p_rt,
    920						 &s_rt->port_list, port_node) {
    921				sdw_port_free(p_rt);
    922			}
    923		}
    924	}
    925}
    926
    927static int sdw_slave_port_alloc(struct sdw_slave *slave,
    928				struct sdw_slave_runtime *s_rt,
    929				unsigned int num_config)
    930{
    931	struct sdw_port_runtime *p_rt;
    932	int i;
    933
    934	/* Iterate for number of ports to perform initialization */
    935	for (i = 0; i < num_config; i++) {
    936		p_rt = sdw_port_alloc(&s_rt->port_list);
    937		if (!p_rt)
    938			return -ENOMEM;
    939	}
    940
    941	return 0;
    942}
    943
    944static int sdw_slave_port_is_valid_range(struct device *dev, int num)
    945{
    946	if (!SDW_VALID_PORT_RANGE(num)) {
    947		dev_err(dev, "SoundWire: Invalid port number :%d\n", num);
    948		return -EINVAL;
    949	}
    950
    951	return 0;
    952}
    953
    954static int sdw_slave_port_config(struct sdw_slave *slave,
    955				 struct sdw_slave_runtime *s_rt,
    956				 struct sdw_port_config *port_config)
    957{
    958	struct sdw_port_runtime *p_rt;
    959	int ret;
    960	int i;
    961
    962	i = 0;
    963	list_for_each_entry(p_rt, &s_rt->port_list, port_node) {
    964		/*
    965		 * TODO: Check valid port range as defined by DisCo/
    966		 * slave
    967		 */
    968		ret = sdw_slave_port_is_valid_range(&slave->dev, port_config[i].num);
    969		if (ret < 0)
    970			return ret;
    971
    972		ret = sdw_port_config(p_rt, port_config, i);
    973		if (ret < 0)
    974			return ret;
    975		i++;
    976	}
    977
    978	return 0;
    979}
    980
    981static bool sdw_master_port_allocated(struct sdw_master_runtime *m_rt)
    982{
    983	return !list_empty(&m_rt->port_list);
    984}
    985
    986static void sdw_master_port_free(struct sdw_master_runtime *m_rt)
    987{
    988	struct sdw_port_runtime *p_rt, *_p_rt;
    989
    990	list_for_each_entry_safe(p_rt, _p_rt, &m_rt->port_list, port_node) {
    991		sdw_port_free(p_rt);
    992	}
    993}
    994
    995static int sdw_master_port_alloc(struct sdw_master_runtime *m_rt,
    996				 unsigned int num_ports)
    997{
    998	struct sdw_port_runtime *p_rt;
    999	int i;
   1000
   1001	/* Iterate for number of ports to perform initialization */
   1002	for (i = 0; i < num_ports; i++) {
   1003		p_rt = sdw_port_alloc(&m_rt->port_list);
   1004		if (!p_rt)
   1005			return -ENOMEM;
   1006	}
   1007
   1008	return 0;
   1009}
   1010
   1011static int sdw_master_port_config(struct sdw_master_runtime *m_rt,
   1012				  struct sdw_port_config *port_config)
   1013{
   1014	struct sdw_port_runtime *p_rt;
   1015	int ret;
   1016	int i;
   1017
   1018	i = 0;
   1019	list_for_each_entry(p_rt, &m_rt->port_list, port_node) {
   1020		ret = sdw_port_config(p_rt, port_config, i);
   1021		if (ret < 0)
   1022			return ret;
   1023		i++;
   1024	}
   1025
   1026	return 0;
   1027}
   1028
   1029/**
   1030 * sdw_slave_rt_alloc() - Allocate a Slave runtime handle.
   1031 *
   1032 * @slave: Slave handle
   1033 * @m_rt: Master runtime handle
   1034 *
   1035 * This function is to be called with bus_lock held.
   1036 */
   1037static struct sdw_slave_runtime
   1038*sdw_slave_rt_alloc(struct sdw_slave *slave,
   1039		    struct sdw_master_runtime *m_rt)
   1040{
   1041	struct sdw_slave_runtime *s_rt;
   1042
   1043	s_rt = kzalloc(sizeof(*s_rt), GFP_KERNEL);
   1044	if (!s_rt)
   1045		return NULL;
   1046
   1047	INIT_LIST_HEAD(&s_rt->port_list);
   1048	s_rt->slave = slave;
   1049
   1050	list_add_tail(&s_rt->m_rt_node, &m_rt->slave_rt_list);
   1051
   1052	return s_rt;
   1053}
   1054
   1055/**
   1056 * sdw_slave_rt_config() - Configure a Slave runtime handle.
   1057 *
   1058 * @s_rt: Slave runtime handle
   1059 * @stream_config: Stream configuration
   1060 *
   1061 * This function is to be called with bus_lock held.
   1062 */
   1063static int sdw_slave_rt_config(struct sdw_slave_runtime *s_rt,
   1064			       struct sdw_stream_config *stream_config)
   1065{
   1066	s_rt->ch_count = stream_config->ch_count;
   1067	s_rt->direction = stream_config->direction;
   1068
   1069	return 0;
   1070}
   1071
   1072static struct sdw_slave_runtime *sdw_slave_rt_find(struct sdw_slave *slave,
   1073						   struct sdw_stream_runtime *stream)
   1074{
   1075	struct sdw_slave_runtime *s_rt, *_s_rt;
   1076	struct sdw_master_runtime *m_rt;
   1077
   1078	list_for_each_entry(m_rt, &stream->master_list, stream_node) {
   1079		/* Retrieve Slave runtime handle */
   1080		list_for_each_entry_safe(s_rt, _s_rt,
   1081					 &m_rt->slave_rt_list, m_rt_node) {
   1082			if (s_rt->slave == slave)
   1083				return s_rt;
   1084		}
   1085	}
   1086	return NULL;
   1087}
   1088
   1089/**
   1090 * sdw_slave_rt_free() - Free Slave(s) runtime handle
   1091 *
   1092 * @slave: Slave handle.
   1093 * @stream: Stream runtime handle.
   1094 *
   1095 * This function is to be called with bus_lock held.
   1096 */
   1097static void sdw_slave_rt_free(struct sdw_slave *slave,
   1098			      struct sdw_stream_runtime *stream)
   1099{
   1100	struct sdw_slave_runtime *s_rt;
   1101
   1102	s_rt = sdw_slave_rt_find(slave, stream);
   1103	if (s_rt) {
   1104		list_del(&s_rt->m_rt_node);
   1105		kfree(s_rt);
   1106	}
   1107}
   1108
   1109static struct sdw_master_runtime
   1110*sdw_master_rt_find(struct sdw_bus *bus,
   1111		    struct sdw_stream_runtime *stream)
   1112{
   1113	struct sdw_master_runtime *m_rt;
   1114
   1115	/* Retrieve Bus handle if already available */
   1116	list_for_each_entry(m_rt, &stream->master_list, stream_node) {
   1117		if (m_rt->bus == bus)
   1118			return m_rt;
   1119	}
   1120
   1121	return NULL;
   1122}
   1123
   1124/**
   1125 * sdw_master_rt_alloc() - Allocates a Master runtime handle
   1126 *
   1127 * @bus: SDW bus instance
   1128 * @stream: Stream runtime handle.
   1129 *
   1130 * This function is to be called with bus_lock held.
   1131 */
   1132static struct sdw_master_runtime
   1133*sdw_master_rt_alloc(struct sdw_bus *bus,
   1134		     struct sdw_stream_runtime *stream)
   1135{
   1136	struct sdw_master_runtime *m_rt;
   1137
   1138	m_rt = kzalloc(sizeof(*m_rt), GFP_KERNEL);
   1139	if (!m_rt)
   1140		return NULL;
   1141
   1142	/* Initialization of Master runtime handle */
   1143	INIT_LIST_HEAD(&m_rt->port_list);
   1144	INIT_LIST_HEAD(&m_rt->slave_rt_list);
   1145	list_add_tail(&m_rt->stream_node, &stream->master_list);
   1146
   1147	list_add_tail(&m_rt->bus_node, &bus->m_rt_list);
   1148
   1149	m_rt->bus = bus;
   1150	m_rt->stream = stream;
   1151
   1152	return m_rt;
   1153}
   1154
   1155/**
   1156 * sdw_master_rt_config() - Configure Master runtime handle
   1157 *
   1158 * @m_rt: Master runtime handle
   1159 * @stream_config: Stream configuration
   1160 *
   1161 * This function is to be called with bus_lock held.
   1162 */
   1163
   1164static int sdw_master_rt_config(struct sdw_master_runtime *m_rt,
   1165				struct sdw_stream_config *stream_config)
   1166{
   1167	m_rt->ch_count = stream_config->ch_count;
   1168	m_rt->direction = stream_config->direction;
   1169
   1170	return 0;
   1171}
   1172
   1173/**
   1174 * sdw_master_rt_free() - Free Master runtime handle
   1175 *
   1176 * @m_rt: Master runtime node
   1177 * @stream: Stream runtime handle.
   1178 *
   1179 * This function is to be called with bus_lock held
   1180 * It frees the Master runtime handle and associated Slave(s) runtime
   1181 * handle. If this is called first then sdw_slave_rt_free() will have
   1182 * no effect as Slave(s) runtime handle would already be freed up.
   1183 */
   1184static void sdw_master_rt_free(struct sdw_master_runtime *m_rt,
   1185			       struct sdw_stream_runtime *stream)
   1186{
   1187	struct sdw_slave_runtime *s_rt, *_s_rt;
   1188
   1189	list_for_each_entry_safe(s_rt, _s_rt, &m_rt->slave_rt_list, m_rt_node) {
   1190		sdw_slave_port_free(s_rt->slave, stream);
   1191		sdw_slave_rt_free(s_rt->slave, stream);
   1192	}
   1193
   1194	list_del(&m_rt->stream_node);
   1195	list_del(&m_rt->bus_node);
   1196	kfree(m_rt);
   1197}
   1198
   1199/**
   1200 * sdw_config_stream() - Configure the allocated stream
   1201 *
   1202 * @dev: SDW device
   1203 * @stream: SoundWire stream
   1204 * @stream_config: Stream configuration for audio stream
   1205 * @is_slave: is API called from Slave or Master
   1206 *
   1207 * This function is to be called with bus_lock held.
   1208 */
   1209static int sdw_config_stream(struct device *dev,
   1210			     struct sdw_stream_runtime *stream,
   1211			     struct sdw_stream_config *stream_config,
   1212			     bool is_slave)
   1213{
   1214	/*
   1215	 * Update the stream rate, channel and bps based on data
   1216	 * source. For more than one data source (multilink),
   1217	 * match the rate, bps, stream type and increment number of channels.
   1218	 *
   1219	 * If rate/bps is zero, it means the values are not set, so skip
   1220	 * comparison and allow the value to be set and stored in stream
   1221	 */
   1222	if (stream->params.rate &&
   1223	    stream->params.rate != stream_config->frame_rate) {
   1224		dev_err(dev, "rate not matching, stream:%s\n", stream->name);
   1225		return -EINVAL;
   1226	}
   1227
   1228	if (stream->params.bps &&
   1229	    stream->params.bps != stream_config->bps) {
   1230		dev_err(dev, "bps not matching, stream:%s\n", stream->name);
   1231		return -EINVAL;
   1232	}
   1233
   1234	stream->type = stream_config->type;
   1235	stream->params.rate = stream_config->frame_rate;
   1236	stream->params.bps = stream_config->bps;
   1237
   1238	/* TODO: Update this check during Device-device support */
   1239	if (is_slave)
   1240		stream->params.ch_count += stream_config->ch_count;
   1241
   1242	return 0;
   1243}
   1244
   1245/**
   1246 * sdw_get_slave_dpn_prop() - Get Slave port capabilities
   1247 *
   1248 * @slave: Slave handle
   1249 * @direction: Data direction.
   1250 * @port_num: Port number
   1251 */
   1252struct sdw_dpn_prop *sdw_get_slave_dpn_prop(struct sdw_slave *slave,
   1253					    enum sdw_data_direction direction,
   1254					    unsigned int port_num)
   1255{
   1256	struct sdw_dpn_prop *dpn_prop;
   1257	u8 num_ports;
   1258	int i;
   1259
   1260	if (direction == SDW_DATA_DIR_TX) {
   1261		num_ports = hweight32(slave->prop.source_ports);
   1262		dpn_prop = slave->prop.src_dpn_prop;
   1263	} else {
   1264		num_ports = hweight32(slave->prop.sink_ports);
   1265		dpn_prop = slave->prop.sink_dpn_prop;
   1266	}
   1267
   1268	for (i = 0; i < num_ports; i++) {
   1269		if (dpn_prop[i].num == port_num)
   1270			return &dpn_prop[i];
   1271	}
   1272
   1273	return NULL;
   1274}
   1275
   1276/**
   1277 * sdw_acquire_bus_lock: Acquire bus lock for all Master runtime(s)
   1278 *
   1279 * @stream: SoundWire stream
   1280 *
   1281 * Acquire bus_lock for each of the master runtime(m_rt) part of this
   1282 * stream to reconfigure the bus.
   1283 * NOTE: This function is called from SoundWire stream ops and is
   1284 * expected that a global lock is held before acquiring bus_lock.
   1285 */
   1286static void sdw_acquire_bus_lock(struct sdw_stream_runtime *stream)
   1287{
   1288	struct sdw_master_runtime *m_rt;
   1289	struct sdw_bus *bus;
   1290
   1291	/* Iterate for all Master(s) in Master list */
   1292	list_for_each_entry(m_rt, &stream->master_list, stream_node) {
   1293		bus = m_rt->bus;
   1294
   1295		mutex_lock(&bus->bus_lock);
   1296	}
   1297}
   1298
   1299/**
   1300 * sdw_release_bus_lock: Release bus lock for all Master runtime(s)
   1301 *
   1302 * @stream: SoundWire stream
   1303 *
   1304 * Release the previously held bus_lock after reconfiguring the bus.
   1305 * NOTE: This function is called from SoundWire stream ops and is
   1306 * expected that a global lock is held before releasing bus_lock.
   1307 */
   1308static void sdw_release_bus_lock(struct sdw_stream_runtime *stream)
   1309{
   1310	struct sdw_master_runtime *m_rt;
   1311	struct sdw_bus *bus;
   1312
   1313	/* Iterate for all Master(s) in Master list */
   1314	list_for_each_entry_reverse(m_rt, &stream->master_list, stream_node) {
   1315		bus = m_rt->bus;
   1316		mutex_unlock(&bus->bus_lock);
   1317	}
   1318}
   1319
   1320static int _sdw_prepare_stream(struct sdw_stream_runtime *stream,
   1321			       bool update_params)
   1322{
   1323	struct sdw_master_runtime *m_rt;
   1324	struct sdw_bus *bus = NULL;
   1325	struct sdw_master_prop *prop;
   1326	struct sdw_bus_params params;
   1327	int ret;
   1328
   1329	/* Prepare  Master(s) and Slave(s) port(s) associated with stream */
   1330	list_for_each_entry(m_rt, &stream->master_list, stream_node) {
   1331		bus = m_rt->bus;
   1332		prop = &bus->prop;
   1333		memcpy(&params, &bus->params, sizeof(params));
   1334
   1335		/* TODO: Support Asynchronous mode */
   1336		if ((prop->max_clk_freq % stream->params.rate) != 0) {
   1337			dev_err(bus->dev, "Async mode not supported\n");
   1338			return -EINVAL;
   1339		}
   1340
   1341		if (!update_params)
   1342			goto program_params;
   1343
   1344		/* Increment cumulative bus bandwidth */
   1345		/* TODO: Update this during Device-Device support */
   1346		bus->params.bandwidth += m_rt->stream->params.rate *
   1347			m_rt->ch_count * m_rt->stream->params.bps;
   1348
   1349		/* Compute params */
   1350		if (bus->compute_params) {
   1351			ret = bus->compute_params(bus);
   1352			if (ret < 0) {
   1353				dev_err(bus->dev, "Compute params failed: %d\n",
   1354					ret);
   1355				return ret;
   1356			}
   1357		}
   1358
   1359program_params:
   1360		/* Program params */
   1361		ret = sdw_program_params(bus, true);
   1362		if (ret < 0) {
   1363			dev_err(bus->dev, "Program params failed: %d\n", ret);
   1364			goto restore_params;
   1365		}
   1366	}
   1367
   1368	if (!bus) {
   1369		pr_err("Configuration error in %s\n", __func__);
   1370		return -EINVAL;
   1371	}
   1372
   1373	ret = do_bank_switch(stream);
   1374	if (ret < 0) {
   1375		dev_err(bus->dev, "Bank switch failed: %d\n", ret);
   1376		goto restore_params;
   1377	}
   1378
   1379	list_for_each_entry(m_rt, &stream->master_list, stream_node) {
   1380		bus = m_rt->bus;
   1381
   1382		/* Prepare port(s) on the new clock configuration */
   1383		ret = sdw_prep_deprep_ports(m_rt, true);
   1384		if (ret < 0) {
   1385			dev_err(bus->dev, "Prepare port(s) failed ret = %d\n",
   1386				ret);
   1387			return ret;
   1388		}
   1389	}
   1390
   1391	stream->state = SDW_STREAM_PREPARED;
   1392
   1393	return ret;
   1394
   1395restore_params:
   1396	memcpy(&bus->params, &params, sizeof(params));
   1397	return ret;
   1398}
   1399
   1400/**
   1401 * sdw_prepare_stream() - Prepare SoundWire stream
   1402 *
   1403 * @stream: Soundwire stream
   1404 *
   1405 * Documentation/driver-api/soundwire/stream.rst explains this API in detail
   1406 */
   1407int sdw_prepare_stream(struct sdw_stream_runtime *stream)
   1408{
   1409	bool update_params = true;
   1410	int ret;
   1411
   1412	if (!stream) {
   1413		pr_err("SoundWire: Handle not found for stream\n");
   1414		return -EINVAL;
   1415	}
   1416
   1417	sdw_acquire_bus_lock(stream);
   1418
   1419	if (stream->state == SDW_STREAM_PREPARED) {
   1420		ret = 0;
   1421		goto state_err;
   1422	}
   1423
   1424	if (stream->state != SDW_STREAM_CONFIGURED &&
   1425	    stream->state != SDW_STREAM_DEPREPARED &&
   1426	    stream->state != SDW_STREAM_DISABLED) {
   1427		pr_err("%s: %s: inconsistent state state %d\n",
   1428		       __func__, stream->name, stream->state);
   1429		ret = -EINVAL;
   1430		goto state_err;
   1431	}
   1432
   1433	/*
   1434	 * when the stream is DISABLED, this means sdw_prepare_stream()
   1435	 * is called as a result of an underflow or a resume operation.
   1436	 * In this case, the bus parameters shall not be recomputed, but
   1437	 * still need to be re-applied
   1438	 */
   1439	if (stream->state == SDW_STREAM_DISABLED)
   1440		update_params = false;
   1441
   1442	ret = _sdw_prepare_stream(stream, update_params);
   1443
   1444state_err:
   1445	sdw_release_bus_lock(stream);
   1446	return ret;
   1447}
   1448EXPORT_SYMBOL(sdw_prepare_stream);
   1449
   1450static int _sdw_enable_stream(struct sdw_stream_runtime *stream)
   1451{
   1452	struct sdw_master_runtime *m_rt;
   1453	struct sdw_bus *bus = NULL;
   1454	int ret;
   1455
   1456	/* Enable Master(s) and Slave(s) port(s) associated with stream */
   1457	list_for_each_entry(m_rt, &stream->master_list, stream_node) {
   1458		bus = m_rt->bus;
   1459
   1460		/* Program params */
   1461		ret = sdw_program_params(bus, false);
   1462		if (ret < 0) {
   1463			dev_err(bus->dev, "Program params failed: %d\n", ret);
   1464			return ret;
   1465		}
   1466
   1467		/* Enable port(s) */
   1468		ret = sdw_enable_disable_ports(m_rt, true);
   1469		if (ret < 0) {
   1470			dev_err(bus->dev,
   1471				"Enable port(s) failed ret: %d\n", ret);
   1472			return ret;
   1473		}
   1474	}
   1475
   1476	if (!bus) {
   1477		pr_err("Configuration error in %s\n", __func__);
   1478		return -EINVAL;
   1479	}
   1480
   1481	ret = do_bank_switch(stream);
   1482	if (ret < 0) {
   1483		dev_err(bus->dev, "Bank switch failed: %d\n", ret);
   1484		return ret;
   1485	}
   1486
   1487	stream->state = SDW_STREAM_ENABLED;
   1488	return 0;
   1489}
   1490
   1491/**
   1492 * sdw_enable_stream() - Enable SoundWire stream
   1493 *
   1494 * @stream: Soundwire stream
   1495 *
   1496 * Documentation/driver-api/soundwire/stream.rst explains this API in detail
   1497 */
   1498int sdw_enable_stream(struct sdw_stream_runtime *stream)
   1499{
   1500	int ret;
   1501
   1502	if (!stream) {
   1503		pr_err("SoundWire: Handle not found for stream\n");
   1504		return -EINVAL;
   1505	}
   1506
   1507	sdw_acquire_bus_lock(stream);
   1508
   1509	if (stream->state == SDW_STREAM_ENABLED) {
   1510		ret = 0;
   1511		goto state_err;
   1512	}
   1513
   1514	if (stream->state != SDW_STREAM_PREPARED &&
   1515	    stream->state != SDW_STREAM_DISABLED) {
   1516		pr_err("%s: %s: inconsistent state state %d\n",
   1517		       __func__, stream->name, stream->state);
   1518		ret = -EINVAL;
   1519		goto state_err;
   1520	}
   1521
   1522	ret = _sdw_enable_stream(stream);
   1523
   1524state_err:
   1525	sdw_release_bus_lock(stream);
   1526	return ret;
   1527}
   1528EXPORT_SYMBOL(sdw_enable_stream);
   1529
   1530static int _sdw_disable_stream(struct sdw_stream_runtime *stream)
   1531{
   1532	struct sdw_master_runtime *m_rt;
   1533	int ret;
   1534
   1535	list_for_each_entry(m_rt, &stream->master_list, stream_node) {
   1536		struct sdw_bus *bus = m_rt->bus;
   1537
   1538		/* Disable port(s) */
   1539		ret = sdw_enable_disable_ports(m_rt, false);
   1540		if (ret < 0) {
   1541			dev_err(bus->dev, "Disable port(s) failed: %d\n", ret);
   1542			return ret;
   1543		}
   1544	}
   1545	stream->state = SDW_STREAM_DISABLED;
   1546
   1547	list_for_each_entry(m_rt, &stream->master_list, stream_node) {
   1548		struct sdw_bus *bus = m_rt->bus;
   1549
   1550		/* Program params */
   1551		ret = sdw_program_params(bus, false);
   1552		if (ret < 0) {
   1553			dev_err(bus->dev, "Program params failed: %d\n", ret);
   1554			return ret;
   1555		}
   1556	}
   1557
   1558	ret = do_bank_switch(stream);
   1559	if (ret < 0) {
   1560		pr_err("Bank switch failed: %d\n", ret);
   1561		return ret;
   1562	}
   1563
   1564	/* make sure alternate bank (previous current) is also disabled */
   1565	list_for_each_entry(m_rt, &stream->master_list, stream_node) {
   1566		struct sdw_bus *bus = m_rt->bus;
   1567
   1568		/* Disable port(s) */
   1569		ret = sdw_enable_disable_ports(m_rt, false);
   1570		if (ret < 0) {
   1571			dev_err(bus->dev, "Disable port(s) failed: %d\n", ret);
   1572			return ret;
   1573		}
   1574	}
   1575
   1576	return 0;
   1577}
   1578
   1579/**
   1580 * sdw_disable_stream() - Disable SoundWire stream
   1581 *
   1582 * @stream: Soundwire stream
   1583 *
   1584 * Documentation/driver-api/soundwire/stream.rst explains this API in detail
   1585 */
   1586int sdw_disable_stream(struct sdw_stream_runtime *stream)
   1587{
   1588	int ret;
   1589
   1590	if (!stream) {
   1591		pr_err("SoundWire: Handle not found for stream\n");
   1592		return -EINVAL;
   1593	}
   1594
   1595	sdw_acquire_bus_lock(stream);
   1596
   1597	if (stream->state == SDW_STREAM_DISABLED) {
   1598		ret = 0;
   1599		goto state_err;
   1600	}
   1601
   1602	if (stream->state != SDW_STREAM_ENABLED) {
   1603		pr_err("%s: %s: inconsistent state state %d\n",
   1604		       __func__, stream->name, stream->state);
   1605		ret = -EINVAL;
   1606		goto state_err;
   1607	}
   1608
   1609	ret = _sdw_disable_stream(stream);
   1610
   1611state_err:
   1612	sdw_release_bus_lock(stream);
   1613	return ret;
   1614}
   1615EXPORT_SYMBOL(sdw_disable_stream);
   1616
   1617static int _sdw_deprepare_stream(struct sdw_stream_runtime *stream)
   1618{
   1619	struct sdw_master_runtime *m_rt;
   1620	struct sdw_bus *bus;
   1621	int ret = 0;
   1622
   1623	list_for_each_entry(m_rt, &stream->master_list, stream_node) {
   1624		bus = m_rt->bus;
   1625		/* De-prepare port(s) */
   1626		ret = sdw_prep_deprep_ports(m_rt, false);
   1627		if (ret < 0) {
   1628			dev_err(bus->dev,
   1629				"De-prepare port(s) failed: %d\n", ret);
   1630			return ret;
   1631		}
   1632
   1633		/* TODO: Update this during Device-Device support */
   1634		bus->params.bandwidth -= m_rt->stream->params.rate *
   1635			m_rt->ch_count * m_rt->stream->params.bps;
   1636
   1637		/* Compute params */
   1638		if (bus->compute_params) {
   1639			ret = bus->compute_params(bus);
   1640			if (ret < 0) {
   1641				dev_err(bus->dev, "Compute params failed: %d\n",
   1642					ret);
   1643				return ret;
   1644			}
   1645		}
   1646
   1647		/* Program params */
   1648		ret = sdw_program_params(bus, false);
   1649		if (ret < 0) {
   1650			dev_err(bus->dev, "Program params failed: %d\n", ret);
   1651			return ret;
   1652		}
   1653	}
   1654
   1655	stream->state = SDW_STREAM_DEPREPARED;
   1656	return do_bank_switch(stream);
   1657}
   1658
   1659/**
   1660 * sdw_deprepare_stream() - Deprepare SoundWire stream
   1661 *
   1662 * @stream: Soundwire stream
   1663 *
   1664 * Documentation/driver-api/soundwire/stream.rst explains this API in detail
   1665 */
   1666int sdw_deprepare_stream(struct sdw_stream_runtime *stream)
   1667{
   1668	int ret;
   1669
   1670	if (!stream) {
   1671		pr_err("SoundWire: Handle not found for stream\n");
   1672		return -EINVAL;
   1673	}
   1674
   1675	sdw_acquire_bus_lock(stream);
   1676
   1677	if (stream->state == SDW_STREAM_DEPREPARED) {
   1678		ret = 0;
   1679		goto state_err;
   1680	}
   1681
   1682	if (stream->state != SDW_STREAM_PREPARED &&
   1683	    stream->state != SDW_STREAM_DISABLED) {
   1684		pr_err("%s: %s: inconsistent state state %d\n",
   1685		       __func__, stream->name, stream->state);
   1686		ret = -EINVAL;
   1687		goto state_err;
   1688	}
   1689
   1690	ret = _sdw_deprepare_stream(stream);
   1691
   1692state_err:
   1693	sdw_release_bus_lock(stream);
   1694	return ret;
   1695}
   1696EXPORT_SYMBOL(sdw_deprepare_stream);
   1697
   1698static int set_stream(struct snd_pcm_substream *substream,
   1699		      struct sdw_stream_runtime *sdw_stream)
   1700{
   1701	struct snd_soc_pcm_runtime *rtd = substream->private_data;
   1702	struct snd_soc_dai *dai;
   1703	int ret = 0;
   1704	int i;
   1705
   1706	/* Set stream pointer on all DAIs */
   1707	for_each_rtd_dais(rtd, i, dai) {
   1708		ret = snd_soc_dai_set_stream(dai, sdw_stream, substream->stream);
   1709		if (ret < 0) {
   1710			dev_err(rtd->dev, "failed to set stream pointer on dai %s\n", dai->name);
   1711			break;
   1712		}
   1713	}
   1714
   1715	return ret;
   1716}
   1717
   1718/**
   1719 * sdw_alloc_stream() - Allocate and return stream runtime
   1720 *
   1721 * @stream_name: SoundWire stream name
   1722 *
   1723 * Allocates a SoundWire stream runtime instance.
   1724 * sdw_alloc_stream should be called only once per stream. Typically
   1725 * invoked from ALSA/ASoC machine/platform driver.
   1726 */
   1727struct sdw_stream_runtime *sdw_alloc_stream(const char *stream_name)
   1728{
   1729	struct sdw_stream_runtime *stream;
   1730
   1731	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
   1732	if (!stream)
   1733		return NULL;
   1734
   1735	stream->name = stream_name;
   1736	INIT_LIST_HEAD(&stream->master_list);
   1737	stream->state = SDW_STREAM_ALLOCATED;
   1738	stream->m_rt_count = 0;
   1739
   1740	return stream;
   1741}
   1742EXPORT_SYMBOL(sdw_alloc_stream);
   1743
   1744/**
   1745 * sdw_startup_stream() - Startup SoundWire stream
   1746 *
   1747 * @sdw_substream: Soundwire stream
   1748 *
   1749 * Documentation/driver-api/soundwire/stream.rst explains this API in detail
   1750 */
   1751int sdw_startup_stream(void *sdw_substream)
   1752{
   1753	struct snd_pcm_substream *substream = sdw_substream;
   1754	struct snd_soc_pcm_runtime *rtd = substream->private_data;
   1755	struct sdw_stream_runtime *sdw_stream;
   1756	char *name;
   1757	int ret;
   1758
   1759	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
   1760		name = kasprintf(GFP_KERNEL, "%s-Playback", substream->name);
   1761	else
   1762		name = kasprintf(GFP_KERNEL, "%s-Capture", substream->name);
   1763
   1764	if (!name)
   1765		return -ENOMEM;
   1766
   1767	sdw_stream = sdw_alloc_stream(name);
   1768	if (!sdw_stream) {
   1769		dev_err(rtd->dev, "alloc stream failed for substream DAI %s\n", substream->name);
   1770		ret = -ENOMEM;
   1771		goto error;
   1772	}
   1773
   1774	ret = set_stream(substream, sdw_stream);
   1775	if (ret < 0)
   1776		goto release_stream;
   1777	return 0;
   1778
   1779release_stream:
   1780	sdw_release_stream(sdw_stream);
   1781	set_stream(substream, NULL);
   1782error:
   1783	kfree(name);
   1784	return ret;
   1785}
   1786EXPORT_SYMBOL(sdw_startup_stream);
   1787
   1788/**
   1789 * sdw_shutdown_stream() - Shutdown SoundWire stream
   1790 *
   1791 * @sdw_substream: Soundwire stream
   1792 *
   1793 * Documentation/driver-api/soundwire/stream.rst explains this API in detail
   1794 */
   1795void sdw_shutdown_stream(void *sdw_substream)
   1796{
   1797	struct snd_pcm_substream *substream = sdw_substream;
   1798	struct snd_soc_pcm_runtime *rtd = substream->private_data;
   1799	struct sdw_stream_runtime *sdw_stream;
   1800	struct snd_soc_dai *dai;
   1801
   1802	/* Find stream from first CPU DAI */
   1803	dai = asoc_rtd_to_cpu(rtd, 0);
   1804
   1805	sdw_stream = snd_soc_dai_get_stream(dai, substream->stream);
   1806
   1807	if (IS_ERR(sdw_stream)) {
   1808		dev_err(rtd->dev, "no stream found for DAI %s\n", dai->name);
   1809		return;
   1810	}
   1811
   1812	/* release memory */
   1813	kfree(sdw_stream->name);
   1814	sdw_release_stream(sdw_stream);
   1815
   1816	/* clear DAI data */
   1817	set_stream(substream, NULL);
   1818}
   1819EXPORT_SYMBOL(sdw_shutdown_stream);
   1820
   1821/**
   1822 * sdw_release_stream() - Free the assigned stream runtime
   1823 *
   1824 * @stream: SoundWire stream runtime
   1825 *
   1826 * sdw_release_stream should be called only once per stream
   1827 */
   1828void sdw_release_stream(struct sdw_stream_runtime *stream)
   1829{
   1830	kfree(stream);
   1831}
   1832EXPORT_SYMBOL(sdw_release_stream);
   1833
   1834/**
   1835 * sdw_stream_add_master() - Allocate and add master runtime to a stream
   1836 *
   1837 * @bus: SDW Bus instance
   1838 * @stream_config: Stream configuration for audio stream
   1839 * @port_config: Port configuration for audio stream
   1840 * @num_ports: Number of ports
   1841 * @stream: SoundWire stream
   1842 */
   1843int sdw_stream_add_master(struct sdw_bus *bus,
   1844			  struct sdw_stream_config *stream_config,
   1845			  struct sdw_port_config *port_config,
   1846			  unsigned int num_ports,
   1847			  struct sdw_stream_runtime *stream)
   1848{
   1849	struct sdw_master_runtime *m_rt;
   1850	bool alloc_master_rt = true;
   1851	int ret;
   1852
   1853	mutex_lock(&bus->bus_lock);
   1854
   1855	/*
   1856	 * For multi link streams, add the second master only if
   1857	 * the bus supports it.
   1858	 * Check if bus->multi_link is set
   1859	 */
   1860	if (!bus->multi_link && stream->m_rt_count > 0) {
   1861		dev_err(bus->dev,
   1862			"Multilink not supported, link %d\n", bus->link_id);
   1863		ret = -EINVAL;
   1864		goto unlock;
   1865	}
   1866
   1867	/*
   1868	 * check if Master is already allocated (e.g. as a result of Slave adding
   1869	 * it first), if so skip allocation and go to configuration
   1870	 */
   1871	m_rt = sdw_master_rt_find(bus, stream);
   1872	if (m_rt) {
   1873		alloc_master_rt = false;
   1874		goto skip_alloc_master_rt;
   1875	}
   1876
   1877	m_rt = sdw_master_rt_alloc(bus, stream);
   1878	if (!m_rt) {
   1879		dev_err(bus->dev, "Master runtime alloc failed for stream:%s\n", stream->name);
   1880		ret = -ENOMEM;
   1881		goto unlock;
   1882	}
   1883skip_alloc_master_rt:
   1884
   1885	if (sdw_master_port_allocated(m_rt))
   1886		goto skip_alloc_master_port;
   1887
   1888	ret = sdw_master_port_alloc(m_rt, num_ports);
   1889	if (ret)
   1890		goto alloc_error;
   1891
   1892	stream->m_rt_count++;
   1893
   1894skip_alloc_master_port:
   1895
   1896	ret = sdw_master_rt_config(m_rt, stream_config);
   1897	if (ret < 0)
   1898		goto unlock;
   1899
   1900	ret = sdw_config_stream(bus->dev, stream, stream_config, false);
   1901	if (ret)
   1902		goto unlock;
   1903
   1904	ret = sdw_master_port_config(m_rt, port_config);
   1905
   1906	goto unlock;
   1907
   1908alloc_error:
   1909	/*
   1910	 * we only cleanup what was allocated in this routine
   1911	 */
   1912	if (alloc_master_rt)
   1913		sdw_master_rt_free(m_rt, stream);
   1914unlock:
   1915	mutex_unlock(&bus->bus_lock);
   1916	return ret;
   1917}
   1918EXPORT_SYMBOL(sdw_stream_add_master);
   1919
   1920/**
   1921 * sdw_stream_remove_master() - Remove master from sdw_stream
   1922 *
   1923 * @bus: SDW Bus instance
   1924 * @stream: SoundWire stream
   1925 *
   1926 * This removes and frees port_rt and master_rt from a stream
   1927 */
   1928int sdw_stream_remove_master(struct sdw_bus *bus,
   1929			     struct sdw_stream_runtime *stream)
   1930{
   1931	struct sdw_master_runtime *m_rt, *_m_rt;
   1932
   1933	mutex_lock(&bus->bus_lock);
   1934
   1935	list_for_each_entry_safe(m_rt, _m_rt,
   1936				 &stream->master_list, stream_node) {
   1937		if (m_rt->bus != bus)
   1938			continue;
   1939
   1940		sdw_master_port_free(m_rt);
   1941		sdw_master_rt_free(m_rt, stream);
   1942		stream->m_rt_count--;
   1943	}
   1944
   1945	if (list_empty(&stream->master_list))
   1946		stream->state = SDW_STREAM_RELEASED;
   1947
   1948	mutex_unlock(&bus->bus_lock);
   1949
   1950	return 0;
   1951}
   1952EXPORT_SYMBOL(sdw_stream_remove_master);
   1953
   1954/**
   1955 * sdw_stream_add_slave() - Allocate and add master/slave runtime to a stream
   1956 *
   1957 * @slave: SDW Slave instance
   1958 * @stream_config: Stream configuration for audio stream
   1959 * @stream: SoundWire stream
   1960 * @port_config: Port configuration for audio stream
   1961 * @num_ports: Number of ports
   1962 *
   1963 * It is expected that Slave is added before adding Master
   1964 * to the Stream.
   1965 *
   1966 */
   1967int sdw_stream_add_slave(struct sdw_slave *slave,
   1968			 struct sdw_stream_config *stream_config,
   1969			 struct sdw_port_config *port_config,
   1970			 unsigned int num_ports,
   1971			 struct sdw_stream_runtime *stream)
   1972{
   1973	struct sdw_slave_runtime *s_rt;
   1974	struct sdw_master_runtime *m_rt;
   1975	bool alloc_master_rt = true;
   1976	bool alloc_slave_rt = true;
   1977
   1978	int ret;
   1979
   1980	mutex_lock(&slave->bus->bus_lock);
   1981
   1982	/*
   1983	 * check if Master is already allocated, if so skip allocation
   1984	 * and go to configuration
   1985	 */
   1986	m_rt = sdw_master_rt_find(slave->bus, stream);
   1987	if (m_rt) {
   1988		alloc_master_rt = false;
   1989		goto skip_alloc_master_rt;
   1990	}
   1991
   1992	/*
   1993	 * If this API is invoked by Slave first then m_rt is not valid.
   1994	 * So, allocate m_rt and add Slave to it.
   1995	 */
   1996	m_rt = sdw_master_rt_alloc(slave->bus, stream);
   1997	if (!m_rt) {
   1998		dev_err(&slave->dev, "Master runtime alloc failed for stream:%s\n", stream->name);
   1999		ret = -ENOMEM;
   2000		goto unlock;
   2001	}
   2002
   2003skip_alloc_master_rt:
   2004	s_rt = sdw_slave_rt_find(slave, stream);
   2005	if (s_rt)
   2006		goto skip_alloc_slave_rt;
   2007
   2008	s_rt = sdw_slave_rt_alloc(slave, m_rt);
   2009	if (!s_rt) {
   2010		dev_err(&slave->dev, "Slave runtime alloc failed for stream:%s\n", stream->name);
   2011		alloc_slave_rt = false;
   2012		ret = -ENOMEM;
   2013		goto alloc_error;
   2014	}
   2015
   2016skip_alloc_slave_rt:
   2017	if (sdw_slave_port_allocated(s_rt))
   2018		goto skip_port_alloc;
   2019
   2020	ret = sdw_slave_port_alloc(slave, s_rt, num_ports);
   2021	if (ret)
   2022		goto alloc_error;
   2023
   2024skip_port_alloc:
   2025	ret =  sdw_master_rt_config(m_rt, stream_config);
   2026	if (ret)
   2027		goto unlock;
   2028
   2029	ret = sdw_slave_rt_config(s_rt, stream_config);
   2030	if (ret)
   2031		goto unlock;
   2032
   2033	ret = sdw_config_stream(&slave->dev, stream, stream_config, true);
   2034	if (ret)
   2035		goto unlock;
   2036
   2037	ret = sdw_slave_port_config(slave, s_rt, port_config);
   2038	if (ret)
   2039		goto unlock;
   2040
   2041	/*
   2042	 * Change stream state to CONFIGURED on first Slave add.
   2043	 * Bus is not aware of number of Slave(s) in a stream at this
   2044	 * point so cannot depend on all Slave(s) to be added in order to
   2045	 * change stream state to CONFIGURED.
   2046	 */
   2047	stream->state = SDW_STREAM_CONFIGURED;
   2048	goto unlock;
   2049
   2050alloc_error:
   2051	/*
   2052	 * we only cleanup what was allocated in this routine. The 'else if'
   2053	 * is intentional, the 'master_rt_free' will call sdw_slave_rt_free()
   2054	 * internally.
   2055	 */
   2056	if (alloc_master_rt)
   2057		sdw_master_rt_free(m_rt, stream);
   2058	else if (alloc_slave_rt)
   2059		sdw_slave_rt_free(slave, stream);
   2060unlock:
   2061	mutex_unlock(&slave->bus->bus_lock);
   2062	return ret;
   2063}
   2064EXPORT_SYMBOL(sdw_stream_add_slave);
   2065
   2066/**
   2067 * sdw_stream_remove_slave() - Remove slave from sdw_stream
   2068 *
   2069 * @slave: SDW Slave instance
   2070 * @stream: SoundWire stream
   2071 *
   2072 * This removes and frees port_rt and slave_rt from a stream
   2073 */
   2074int sdw_stream_remove_slave(struct sdw_slave *slave,
   2075			    struct sdw_stream_runtime *stream)
   2076{
   2077	mutex_lock(&slave->bus->bus_lock);
   2078
   2079	sdw_slave_port_free(slave, stream);
   2080	sdw_slave_rt_free(slave, stream);
   2081
   2082	mutex_unlock(&slave->bus->bus_lock);
   2083
   2084	return 0;
   2085}
   2086EXPORT_SYMBOL(sdw_stream_remove_slave);