Commit 2f4281f4 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Merge tag 'soundwire-5.3-rc1' of...

Merge tag 'soundwire-5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire into char-misc-next

Vinod writes:

soundwire updates for v5.3-rc1

Updates for 5.3 include:
 - module_sdw_driver macro for drivers
 - Documentation updates for code-blocks
 - Improvement from Pierre on intel and cadence driver
 - Clarification of DisCo properties and updates

* tag 'soundwire-5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire:
  soundwire: add module_sdw_driver helper macro
  docs: soundwire: locking: fix tags for a code-block
  soundwire: intel_init: add checks on link numbers
  soundwire: fix typo in comments
  soundwire: Intel: add log for number of PCM and PDM PDIs
  soundwire: cadence_master: check the number of bidir PDIs
  soundwire: cadence_master: log Slave status mask on errors
  soundwire: cadence_master: use rate_limited dynamic debug
  soundwire: rename/clarify MIPI DisCo properties
  soundwire: clarify comment
  soundwire: mipi-disco: fix clock stop modes
  soundwire: rename 'freq' fields
  soundwire: mipi-disco: remove master_count property for masters
  soundwire: remove master data port properties
  soundwire: add port-related definitions
  soundwire: mipi_disco: fix master/link error
  soundwire: intel: filter SoundWire controller device search
  soundwire: cdns: Fix compilation error on arm64
parents 996cdfaf 2aeac95d
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -44,7 +44,9 @@ Message transfer.
     b. Transfer message (Read/Write) to Slave1 or broadcast message on
        Bus in case of bank switch.

     c. Release Message lock ::
     c. Release Message lock

     ::

	+----------+                    +---------+
	|          |                    |         |
+3 −3
Original line number Diff line number Diff line
@@ -87,7 +87,7 @@ int sdw_add_bus_master(struct sdw_bus *bus)

	/*
	 * Initialize clock values based on Master properties. The max
	 * frequency is read from max_freq property. Current assumption
	 * frequency is read from max_clk_freq property. Current assumption
	 * is that the bus will start at highest clock frequency when
	 * powered on.
	 *
@@ -95,7 +95,7 @@ int sdw_add_bus_master(struct sdw_bus *bus)
	 * to start with bank 0 (Table 40 of Spec)
	 */
	prop = &bus->prop;
	bus->params.max_dr_freq = prop->max_freq * SDW_DOUBLE_RATE_FACTOR;
	bus->params.max_dr_freq = prop->max_clk_freq * SDW_DOUBLE_RATE_FACTOR;
	bus->params.curr_dr_freq = bus->params.max_dr_freq;
	bus->params.curr_bank = SDW_BANK0;
	bus->params.next_bank = SDW_BANK1;
@@ -648,7 +648,7 @@ static int sdw_initialize_slave(struct sdw_slave *slave)
		return 0;

	/* Enable DP0 interrupts */
	val = prop->dp0_prop->device_interrupts;
	val = prop->dp0_prop->imp_def_interrupts;
	val |= SDW_DP0_INT_PORT_READY | SDW_DP0_INT_BRA_FAILURE;

	ret = sdw_update(slave, SDW_DP0_INTMASK, val, val);
+17 −13
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/module.h>
#include <linux/mod_devicetable.h>
#include <linux/soundwire/sdw_registers.h>
@@ -236,19 +237,19 @@ cdns_fill_msg_resp(struct sdw_cdns *cdns,
	for (i = 0; i < count; i++) {
		if (!(cdns->response_buf[i] & CDNS_MCP_RESP_ACK)) {
			no_ack = 1;
			dev_dbg(cdns->dev, "Msg Ack not received\n");
			dev_dbg_ratelimited(cdns->dev, "Msg Ack not received\n");
			if (cdns->response_buf[i] & CDNS_MCP_RESP_NACK) {
				nack = 1;
				dev_err(cdns->dev, "Msg NACK received\n");
				dev_err_ratelimited(cdns->dev, "Msg NACK received\n");
			}
		}
	}

	if (nack) {
		dev_err(cdns->dev, "Msg NACKed for Slave %d\n", msg->dev_num);
		dev_err_ratelimited(cdns->dev, "Msg NACKed for Slave %d\n", msg->dev_num);
		return SDW_CMD_FAIL;
	} else if (no_ack) {
		dev_dbg(cdns->dev, "Msg ignored for Slave %d\n", msg->dev_num);
		dev_dbg_ratelimited(cdns->dev, "Msg ignored for Slave %d\n", msg->dev_num);
		return SDW_CMD_IGNORED;
	}

@@ -356,11 +357,11 @@ cdns_program_scp_addr(struct sdw_cdns *cdns, struct sdw_msg *msg)

	/* For NACK, NO ack, don't return err if we are in Broadcast mode */
	if (nack) {
		dev_err(cdns->dev,
		dev_err_ratelimited(cdns->dev,
				    "SCP_addrpage NACKed for Slave %d\n", msg->dev_num);
		return SDW_CMD_FAIL;
	} else if (no_ack) {
		dev_dbg(cdns->dev,
		dev_dbg_ratelimited(cdns->dev,
				    "SCP_addrpage ignored for Slave %d\n", msg->dev_num);
		return SDW_CMD_IGNORED;
	}
@@ -486,7 +487,8 @@ static int cdns_update_slave_status(struct sdw_cdns *cdns,
{
	enum sdw_slave_status status[SDW_MAX_DEVICES + 1];
	bool is_slave = false;
	u64 slave, mask;
	u64 slave;
	u32 mask;
	int i, set_status;

	/* combine the two status */
@@ -524,9 +526,9 @@ static int cdns_update_slave_status(struct sdw_cdns *cdns,

		/* first check if Slave reported multiple status */
		if (set_status > 1) {
			dev_warn(cdns->dev,
			dev_warn_ratelimited(cdns->dev,
					     "Slave reported multiple Status: %d\n",
				 status[i]);
					     mask);
			/*
			 * TODO: we need to reread the status here by
			 * issuing a PING cmd
@@ -612,7 +614,7 @@ irqreturn_t sdw_cdns_thread(int irq, void *dev_id)
	struct sdw_cdns *cdns = dev_id;
	u32 slave0, slave1;

	dev_dbg(cdns->dev, "Slave status change\n");
	dev_dbg_ratelimited(cdns->dev, "Slave status change\n");

	slave0 = cdns_readl(cdns, CDNS_MCP_SLAVE_INTSTAT0);
	slave1 = cdns_readl(cdns, CDNS_MCP_SLAVE_INTSTAT1);
@@ -716,6 +718,8 @@ int sdw_cdns_pdi_init(struct sdw_cdns *cdns,
	stream = &cdns->pcm;

	/* First two PDIs are reserved for bulk transfers */
	if (stream->num_bd < CDNS_PCM_PDI_OFFSET)
		return -EINVAL;
	stream->num_bd -= CDNS_PCM_PDI_OFFSET;
	offset = CDNS_PCM_PDI_OFFSET;

+12 −5
Original line number Diff line number Diff line
@@ -263,6 +263,9 @@ static void intel_pdi_init(struct sdw_intel *sdw,
	config->pcm_out = (pcm_cap & SDW_SHIM_PCMSCAP_OSS) >>
					SDW_REG_SHIFT(SDW_SHIM_PCMSCAP_OSS);

	dev_dbg(sdw->cdns.dev, "PCM cap bd:%d in:%d out:%d\n",
		config->pcm_bd, config->pcm_in, config->pcm_out);

	/* PDM Stream Capability */
	pdm_cap = intel_readw(shim, SDW_SHIM_PDMSCAP(link_id));

@@ -272,6 +275,9 @@ static void intel_pdi_init(struct sdw_intel *sdw,
					SDW_REG_SHIFT(SDW_SHIM_PDMSCAP_ISS);
	config->pdm_out = (pdm_cap & SDW_SHIM_PDMSCAP_OSS) >>
					SDW_REG_SHIFT(SDW_SHIM_PDMSCAP_OSS);

	dev_dbg(sdw->cdns.dev, "PDM cap bd:%d in:%d out:%d\n",
		config->pdm_bd, config->pdm_in, config->pdm_out);
}

static int
@@ -796,13 +802,14 @@ static int intel_prop_read(struct sdw_bus *bus)
	sdw_master_read_prop(bus);

	/* BIOS is not giving some values correctly. So, lets override them */
	bus->prop.num_freq = 1;
	bus->prop.freq = devm_kcalloc(bus->dev, bus->prop.num_freq,
				      sizeof(*bus->prop.freq), GFP_KERNEL);
	if (!bus->prop.freq)
	bus->prop.num_clk_freq = 1;
	bus->prop.clk_freq = devm_kcalloc(bus->dev, bus->prop.num_clk_freq,
					  sizeof(*bus->prop.clk_freq),
					  GFP_KERNEL);
	if (!bus->prop.clk_freq)
		return -ENOMEM;

	bus->prop.freq[0] = bus->prop.max_freq;
	bus->prop.clk_freq[0] = bus->prop.max_clk_freq;
	bus->prop.err_threshold = 5;

	return 0;
+1 −1
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@
#define __SDW_INTEL_LOCAL_H

/**
 * struct sdw_intel_res - Soundwire link resources
 * struct sdw_intel_link_res - Soundwire link resources
 * @registers: Link IO registers base
 * @shim: Audio shim pointer
 * @alh: ALH (Audio Link Hub) pointer
Loading