Message ID | 20230209131336.18252-6-srinivas.kandagatla@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | soundwire: qcom: stablity fixes | expand |
On 2/9/23 07:13, Srinivas Kandagatla wrote: > WSA Soundwire controller needs an full reset if clock stop support > is not available in slave devices. WSA881x does not support clock stop > however WSA883x supports clock stop. > > Make setting this flag at runtime to address above issue. > > Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> > --- > drivers/soundwire/qcom.c | 13 ++++--------- > 1 file changed, 4 insertions(+), 9 deletions(-) > > diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c > index 74e38c0d651b..0224a5a866de 100644 > --- a/drivers/soundwire/qcom.c > +++ b/drivers/soundwire/qcom.c > @@ -536,10 +536,14 @@ static int qcom_swrm_enumerate(struct sdw_bus *bus) > > sdw_extract_slave_id(bus, addr, &id); > found = false; > + ctrl->clock_stop_not_supported = false; > /* Now compare with entries */ > list_for_each_entry_safe(slave, _s, &bus->slaves, node) { > if (sdw_compare_devid(slave, id) == 0) { > qcom_swrm_set_slave_dev_num(bus, slave, i); > + if (!slave->prop.simple_clk_stop_capable) > + ctrl->clock_stop_not_supported = true; IIRC the 'simple_clk_stop_capable' for a peripheral refers to the Simplified_SCSP_SM see Figure 35 "Slave Clock Stop Prepare State Machine (SCSP_SM)" In addition, there's a requirement that all peripherals shall support ClockStopMode0. Only ClockStopMode1 is optional, and that case is handled with a different property: * @clk_stop_mode1: Clock-Stop Mode 1 is supported I think you overloaded one concept with another, or used the wrong property? > + > found = true; > break; > } > @@ -1500,15 +1504,6 @@ static int qcom_swrm_probe(struct platform_device *pdev) > (ctrl->version >> 24) & 0xff, (ctrl->version >> 16) & 0xff, > ctrl->version & 0xffff); > > - /* Clk stop is not supported on WSA Soundwire masters */ > - if (ctrl->version <= 0x01030000) { > - ctrl->clock_stop_not_supported = true; > - } else { > - ctrl->reg_read(ctrl, SWRM_COMP_MASTER_ID, &val); > - if (val == MASTER_ID_WSA) > - ctrl->clock_stop_not_supported = true; > - } > - > #ifdef CONFIG_DEBUG_FS > ctrl->debugfs = debugfs_create_dir("qualcomm-sdw", ctrl->bus.debugfs); > debugfs_create_file("qualcomm-registers", 0400, ctrl->debugfs, ctrl,
diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c index 74e38c0d651b..0224a5a866de 100644 --- a/drivers/soundwire/qcom.c +++ b/drivers/soundwire/qcom.c @@ -536,10 +536,14 @@ static int qcom_swrm_enumerate(struct sdw_bus *bus) sdw_extract_slave_id(bus, addr, &id); found = false; + ctrl->clock_stop_not_supported = false; /* Now compare with entries */ list_for_each_entry_safe(slave, _s, &bus->slaves, node) { if (sdw_compare_devid(slave, id) == 0) { qcom_swrm_set_slave_dev_num(bus, slave, i); + if (!slave->prop.simple_clk_stop_capable) + ctrl->clock_stop_not_supported = true; + found = true; break; } @@ -1500,15 +1504,6 @@ static int qcom_swrm_probe(struct platform_device *pdev) (ctrl->version >> 24) & 0xff, (ctrl->version >> 16) & 0xff, ctrl->version & 0xffff); - /* Clk stop is not supported on WSA Soundwire masters */ - if (ctrl->version <= 0x01030000) { - ctrl->clock_stop_not_supported = true; - } else { - ctrl->reg_read(ctrl, SWRM_COMP_MASTER_ID, &val); - if (val == MASTER_ID_WSA) - ctrl->clock_stop_not_supported = true; - } - #ifdef CONFIG_DEBUG_FS ctrl->debugfs = debugfs_create_dir("qualcomm-sdw", ctrl->bus.debugfs); debugfs_create_file("qualcomm-registers", 0400, ctrl->debugfs, ctrl,
WSA Soundwire controller needs an full reset if clock stop support is not available in slave devices. WSA881x does not support clock stop however WSA883x supports clock stop. Make setting this flag at runtime to address above issue. Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> --- drivers/soundwire/qcom.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-)