0001
0002
0003
0004 #include <linux/acpi.h>
0005 #include <linux/delay.h>
0006 #include <linux/mod_devicetable.h>
0007 #include <linux/pm_runtime.h>
0008 #include <linux/soundwire/sdw_registers.h>
0009 #include <linux/soundwire/sdw.h>
0010 #include <linux/soundwire/sdw_type.h>
0011 #include "bus.h"
0012 #include "sysfs_local.h"
0013
0014 static DEFINE_IDA(sdw_ida);
0015
0016 static int sdw_get_id(struct sdw_bus *bus)
0017 {
0018 int rc = ida_alloc(&sdw_ida, GFP_KERNEL);
0019
0020 if (rc < 0)
0021 return rc;
0022
0023 bus->id = rc;
0024 return 0;
0025 }
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036 int sdw_bus_master_add(struct sdw_bus *bus, struct device *parent,
0037 struct fwnode_handle *fwnode)
0038 {
0039 struct sdw_master_prop *prop = NULL;
0040 int ret;
0041
0042 if (!parent) {
0043 pr_err("SoundWire parent device is not set\n");
0044 return -ENODEV;
0045 }
0046
0047 ret = sdw_get_id(bus);
0048 if (ret < 0) {
0049 dev_err(parent, "Failed to get bus id\n");
0050 return ret;
0051 }
0052
0053 ret = sdw_master_device_add(bus, parent, fwnode);
0054 if (ret < 0) {
0055 dev_err(parent, "Failed to add master device at link %d\n",
0056 bus->link_id);
0057 return ret;
0058 }
0059
0060 if (!bus->ops) {
0061 dev_err(bus->dev, "SoundWire Bus ops are not set\n");
0062 return -EINVAL;
0063 }
0064
0065 if (!bus->compute_params) {
0066 dev_err(bus->dev,
0067 "Bandwidth allocation not configured, compute_params no set\n");
0068 return -EINVAL;
0069 }
0070
0071 mutex_init(&bus->msg_lock);
0072 mutex_init(&bus->bus_lock);
0073 INIT_LIST_HEAD(&bus->slaves);
0074 INIT_LIST_HEAD(&bus->m_rt_list);
0075
0076
0077
0078
0079
0080 bus->multi_link = false;
0081 if (bus->ops->read_prop) {
0082 ret = bus->ops->read_prop(bus);
0083 if (ret < 0) {
0084 dev_err(bus->dev,
0085 "Bus read properties failed:%d\n", ret);
0086 return ret;
0087 }
0088 }
0089
0090 sdw_bus_debugfs_init(bus);
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100 *bus->assigned = ~GENMASK(SDW_BROADCAST_DEV_NUM, SDW_ENUM_DEV_NUM);
0101
0102
0103 set_bit(SDW_ENUM_DEV_NUM, bus->assigned);
0104 set_bit(SDW_BROADCAST_DEV_NUM, bus->assigned);
0105
0106
0107 set_bit(SDW_GROUP12_DEV_NUM, bus->assigned);
0108 set_bit(SDW_GROUP13_DEV_NUM, bus->assigned);
0109 set_bit(SDW_MASTER_DEV_NUM, bus->assigned);
0110
0111
0112
0113
0114
0115
0116
0117
0118 if (IS_ENABLED(CONFIG_ACPI) && ACPI_HANDLE(bus->dev))
0119 ret = sdw_acpi_find_slaves(bus);
0120 else if (IS_ENABLED(CONFIG_OF) && bus->dev->of_node)
0121 ret = sdw_of_find_slaves(bus);
0122 else
0123 ret = -ENOTSUPP;
0124
0125 if (ret < 0) {
0126 dev_err(bus->dev, "Finding slaves failed:%d\n", ret);
0127 return ret;
0128 }
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139 prop = &bus->prop;
0140 bus->params.max_dr_freq = prop->max_clk_freq * SDW_DOUBLE_RATE_FACTOR;
0141 bus->params.curr_dr_freq = bus->params.max_dr_freq;
0142 bus->params.curr_bank = SDW_BANK0;
0143 bus->params.next_bank = SDW_BANK1;
0144
0145 return 0;
0146 }
0147 EXPORT_SYMBOL(sdw_bus_master_add);
0148
0149 static int sdw_delete_slave(struct device *dev, void *data)
0150 {
0151 struct sdw_slave *slave = dev_to_sdw_dev(dev);
0152 struct sdw_bus *bus = slave->bus;
0153
0154 pm_runtime_disable(dev);
0155
0156 sdw_slave_debugfs_exit(slave);
0157
0158 mutex_lock(&bus->bus_lock);
0159
0160 if (slave->dev_num)
0161 clear_bit(slave->dev_num, bus->assigned);
0162
0163 list_del_init(&slave->node);
0164 mutex_unlock(&bus->bus_lock);
0165
0166 device_unregister(dev);
0167 return 0;
0168 }
0169
0170
0171
0172
0173
0174
0175
0176 void sdw_bus_master_delete(struct sdw_bus *bus)
0177 {
0178 device_for_each_child(bus->dev, NULL, sdw_delete_slave);
0179 sdw_master_device_del(bus);
0180
0181 sdw_bus_debugfs_exit(bus);
0182 ida_free(&sdw_ida, bus->id);
0183 }
0184 EXPORT_SYMBOL(sdw_bus_master_delete);
0185
0186
0187
0188
0189
0190 static inline int find_response_code(enum sdw_command_response resp)
0191 {
0192 switch (resp) {
0193 case SDW_CMD_OK:
0194 return 0;
0195
0196 case SDW_CMD_IGNORED:
0197 return -ENODATA;
0198
0199 case SDW_CMD_TIMEOUT:
0200 return -ETIMEDOUT;
0201
0202 default:
0203 return -EIO;
0204 }
0205 }
0206
0207 static inline int do_transfer(struct sdw_bus *bus, struct sdw_msg *msg)
0208 {
0209 int retry = bus->prop.err_threshold;
0210 enum sdw_command_response resp;
0211 int ret = 0, i;
0212
0213 for (i = 0; i <= retry; i++) {
0214 resp = bus->ops->xfer_msg(bus, msg);
0215 ret = find_response_code(resp);
0216
0217
0218 if (ret == 0 || ret == -ENODATA)
0219 return ret;
0220 }
0221
0222 return ret;
0223 }
0224
0225 static inline int do_transfer_defer(struct sdw_bus *bus,
0226 struct sdw_msg *msg,
0227 struct sdw_defer *defer)
0228 {
0229 int retry = bus->prop.err_threshold;
0230 enum sdw_command_response resp;
0231 int ret = 0, i;
0232
0233 defer->msg = msg;
0234 defer->length = msg->len;
0235 init_completion(&defer->complete);
0236
0237 for (i = 0; i <= retry; i++) {
0238 resp = bus->ops->xfer_msg_defer(bus, msg, defer);
0239 ret = find_response_code(resp);
0240
0241 if (ret == 0 || ret == -ENODATA)
0242 return ret;
0243 }
0244
0245 return ret;
0246 }
0247
0248 static int sdw_reset_page(struct sdw_bus *bus, u16 dev_num)
0249 {
0250 int retry = bus->prop.err_threshold;
0251 enum sdw_command_response resp;
0252 int ret = 0, i;
0253
0254 for (i = 0; i <= retry; i++) {
0255 resp = bus->ops->reset_page_addr(bus, dev_num);
0256 ret = find_response_code(resp);
0257
0258 if (ret == 0 || ret == -ENODATA)
0259 return ret;
0260 }
0261
0262 return ret;
0263 }
0264
0265 static int sdw_transfer_unlocked(struct sdw_bus *bus, struct sdw_msg *msg)
0266 {
0267 int ret;
0268
0269 ret = do_transfer(bus, msg);
0270 if (ret != 0 && ret != -ENODATA)
0271 dev_err(bus->dev, "trf on Slave %d failed:%d %s addr %x count %d\n",
0272 msg->dev_num, ret,
0273 (msg->flags & SDW_MSG_FLAG_WRITE) ? "write" : "read",
0274 msg->addr, msg->len);
0275
0276 if (msg->page)
0277 sdw_reset_page(bus, msg->dev_num);
0278
0279 return ret;
0280 }
0281
0282
0283
0284
0285
0286
0287 int sdw_transfer(struct sdw_bus *bus, struct sdw_msg *msg)
0288 {
0289 int ret;
0290
0291 mutex_lock(&bus->msg_lock);
0292
0293 ret = sdw_transfer_unlocked(bus, msg);
0294
0295 mutex_unlock(&bus->msg_lock);
0296
0297 return ret;
0298 }
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308 int sdw_transfer_defer(struct sdw_bus *bus, struct sdw_msg *msg,
0309 struct sdw_defer *defer)
0310 {
0311 int ret;
0312
0313 if (!bus->ops->xfer_msg_defer)
0314 return -ENOTSUPP;
0315
0316 ret = do_transfer_defer(bus, msg, defer);
0317 if (ret != 0 && ret != -ENODATA)
0318 dev_err(bus->dev, "Defer trf on Slave %d failed:%d\n",
0319 msg->dev_num, ret);
0320
0321 if (msg->page)
0322 sdw_reset_page(bus, msg->dev_num);
0323
0324 return ret;
0325 }
0326
0327 int sdw_fill_msg(struct sdw_msg *msg, struct sdw_slave *slave,
0328 u32 addr, size_t count, u16 dev_num, u8 flags, u8 *buf)
0329 {
0330 memset(msg, 0, sizeof(*msg));
0331 msg->addr = addr;
0332 msg->len = count;
0333 msg->dev_num = dev_num;
0334 msg->flags = flags;
0335 msg->buf = buf;
0336
0337 if (addr < SDW_REG_NO_PAGE)
0338 return 0;
0339
0340 if (addr >= SDW_REG_MAX) {
0341 pr_err("SDW: Invalid address %x passed\n", addr);
0342 return -EINVAL;
0343 }
0344
0345 if (addr < SDW_REG_OPTIONAL_PAGE) {
0346 if (slave && !slave->prop.paging_support)
0347 return 0;
0348
0349 }
0350
0351
0352 if (dev_num == SDW_ENUM_DEV_NUM || dev_num == SDW_BROADCAST_DEV_NUM) {
0353 pr_err("SDW: Invalid device for paging :%d\n", dev_num);
0354 return -EINVAL;
0355 }
0356
0357 if (!slave) {
0358 pr_err("SDW: No slave for paging addr\n");
0359 return -EINVAL;
0360 }
0361
0362 if (!slave->prop.paging_support) {
0363 dev_err(&slave->dev,
0364 "address %x needs paging but no support\n", addr);
0365 return -EINVAL;
0366 }
0367
0368 msg->addr_page1 = FIELD_GET(SDW_SCP_ADDRPAGE1_MASK, addr);
0369 msg->addr_page2 = FIELD_GET(SDW_SCP_ADDRPAGE2_MASK, addr);
0370 msg->addr |= BIT(15);
0371 msg->page = true;
0372
0373 return 0;
0374 }
0375
0376
0377
0378
0379
0380
0381
0382
0383 static int
0384 sdw_nread_no_pm(struct sdw_slave *slave, u32 addr, size_t count, u8 *val)
0385 {
0386 struct sdw_msg msg;
0387 int ret;
0388
0389 ret = sdw_fill_msg(&msg, slave, addr, count,
0390 slave->dev_num, SDW_MSG_FLAG_READ, val);
0391 if (ret < 0)
0392 return ret;
0393
0394 ret = sdw_transfer(slave->bus, &msg);
0395 if (slave->is_mockup_device)
0396 ret = 0;
0397 return ret;
0398 }
0399
0400 static int
0401 sdw_nwrite_no_pm(struct sdw_slave *slave, u32 addr, size_t count, const u8 *val)
0402 {
0403 struct sdw_msg msg;
0404 int ret;
0405
0406 ret = sdw_fill_msg(&msg, slave, addr, count,
0407 slave->dev_num, SDW_MSG_FLAG_WRITE, (u8 *)val);
0408 if (ret < 0)
0409 return ret;
0410
0411 ret = sdw_transfer(slave->bus, &msg);
0412 if (slave->is_mockup_device)
0413 ret = 0;
0414 return ret;
0415 }
0416
0417 int sdw_write_no_pm(struct sdw_slave *slave, u32 addr, u8 value)
0418 {
0419 return sdw_nwrite_no_pm(slave, addr, 1, &value);
0420 }
0421 EXPORT_SYMBOL(sdw_write_no_pm);
0422
0423 static int
0424 sdw_bread_no_pm(struct sdw_bus *bus, u16 dev_num, u32 addr)
0425 {
0426 struct sdw_msg msg;
0427 u8 buf;
0428 int ret;
0429
0430 ret = sdw_fill_msg(&msg, NULL, addr, 1, dev_num,
0431 SDW_MSG_FLAG_READ, &buf);
0432 if (ret < 0)
0433 return ret;
0434
0435 ret = sdw_transfer(bus, &msg);
0436 if (ret < 0)
0437 return ret;
0438
0439 return buf;
0440 }
0441
0442 static int
0443 sdw_bwrite_no_pm(struct sdw_bus *bus, u16 dev_num, u32 addr, u8 value)
0444 {
0445 struct sdw_msg msg;
0446 int ret;
0447
0448 ret = sdw_fill_msg(&msg, NULL, addr, 1, dev_num,
0449 SDW_MSG_FLAG_WRITE, &value);
0450 if (ret < 0)
0451 return ret;
0452
0453 return sdw_transfer(bus, &msg);
0454 }
0455
0456 int sdw_bread_no_pm_unlocked(struct sdw_bus *bus, u16 dev_num, u32 addr)
0457 {
0458 struct sdw_msg msg;
0459 u8 buf;
0460 int ret;
0461
0462 ret = sdw_fill_msg(&msg, NULL, addr, 1, dev_num,
0463 SDW_MSG_FLAG_READ, &buf);
0464 if (ret < 0)
0465 return ret;
0466
0467 ret = sdw_transfer_unlocked(bus, &msg);
0468 if (ret < 0)
0469 return ret;
0470
0471 return buf;
0472 }
0473 EXPORT_SYMBOL(sdw_bread_no_pm_unlocked);
0474
0475 int sdw_bwrite_no_pm_unlocked(struct sdw_bus *bus, u16 dev_num, u32 addr, u8 value)
0476 {
0477 struct sdw_msg msg;
0478 int ret;
0479
0480 ret = sdw_fill_msg(&msg, NULL, addr, 1, dev_num,
0481 SDW_MSG_FLAG_WRITE, &value);
0482 if (ret < 0)
0483 return ret;
0484
0485 return sdw_transfer_unlocked(bus, &msg);
0486 }
0487 EXPORT_SYMBOL(sdw_bwrite_no_pm_unlocked);
0488
0489 int sdw_read_no_pm(struct sdw_slave *slave, u32 addr)
0490 {
0491 u8 buf;
0492 int ret;
0493
0494 ret = sdw_nread_no_pm(slave, addr, 1, &buf);
0495 if (ret < 0)
0496 return ret;
0497 else
0498 return buf;
0499 }
0500 EXPORT_SYMBOL(sdw_read_no_pm);
0501
0502 int sdw_update_no_pm(struct sdw_slave *slave, u32 addr, u8 mask, u8 val)
0503 {
0504 int tmp;
0505
0506 tmp = sdw_read_no_pm(slave, addr);
0507 if (tmp < 0)
0508 return tmp;
0509
0510 tmp = (tmp & ~mask) | val;
0511 return sdw_write_no_pm(slave, addr, tmp);
0512 }
0513 EXPORT_SYMBOL(sdw_update_no_pm);
0514
0515
0516 int sdw_update(struct sdw_slave *slave, u32 addr, u8 mask, u8 val)
0517 {
0518 int tmp;
0519
0520 tmp = sdw_read(slave, addr);
0521 if (tmp < 0)
0522 return tmp;
0523
0524 tmp = (tmp & ~mask) | val;
0525 return sdw_write(slave, addr, tmp);
0526 }
0527 EXPORT_SYMBOL(sdw_update);
0528
0529
0530
0531
0532
0533
0534
0535
0536 int sdw_nread(struct sdw_slave *slave, u32 addr, size_t count, u8 *val)
0537 {
0538 int ret;
0539
0540 ret = pm_runtime_resume_and_get(&slave->dev);
0541 if (ret < 0 && ret != -EACCES)
0542 return ret;
0543
0544 ret = sdw_nread_no_pm(slave, addr, count, val);
0545
0546 pm_runtime_mark_last_busy(&slave->dev);
0547 pm_runtime_put(&slave->dev);
0548
0549 return ret;
0550 }
0551 EXPORT_SYMBOL(sdw_nread);
0552
0553
0554
0555
0556
0557
0558
0559
0560 int sdw_nwrite(struct sdw_slave *slave, u32 addr, size_t count, const u8 *val)
0561 {
0562 int ret;
0563
0564 ret = pm_runtime_resume_and_get(&slave->dev);
0565 if (ret < 0 && ret != -EACCES)
0566 return ret;
0567
0568 ret = sdw_nwrite_no_pm(slave, addr, count, val);
0569
0570 pm_runtime_mark_last_busy(&slave->dev);
0571 pm_runtime_put(&slave->dev);
0572
0573 return ret;
0574 }
0575 EXPORT_SYMBOL(sdw_nwrite);
0576
0577
0578
0579
0580
0581
0582 int sdw_read(struct sdw_slave *slave, u32 addr)
0583 {
0584 u8 buf;
0585 int ret;
0586
0587 ret = sdw_nread(slave, addr, 1, &buf);
0588 if (ret < 0)
0589 return ret;
0590
0591 return buf;
0592 }
0593 EXPORT_SYMBOL(sdw_read);
0594
0595
0596
0597
0598
0599
0600
0601 int sdw_write(struct sdw_slave *slave, u32 addr, u8 value)
0602 {
0603 return sdw_nwrite(slave, addr, 1, &value);
0604 }
0605 EXPORT_SYMBOL(sdw_write);
0606
0607
0608
0609
0610
0611
0612 static struct sdw_slave *sdw_get_slave(struct sdw_bus *bus, int i)
0613 {
0614 struct sdw_slave *slave;
0615
0616 list_for_each_entry(slave, &bus->slaves, node) {
0617 if (slave->dev_num == i)
0618 return slave;
0619 }
0620
0621 return NULL;
0622 }
0623
0624 int sdw_compare_devid(struct sdw_slave *slave, struct sdw_slave_id id)
0625 {
0626 if (slave->id.mfg_id != id.mfg_id ||
0627 slave->id.part_id != id.part_id ||
0628 slave->id.class_id != id.class_id ||
0629 (slave->id.unique_id != SDW_IGNORED_UNIQUE_ID &&
0630 slave->id.unique_id != id.unique_id))
0631 return -ENODEV;
0632
0633 return 0;
0634 }
0635 EXPORT_SYMBOL(sdw_compare_devid);
0636
0637
0638 static int sdw_get_device_num(struct sdw_slave *slave)
0639 {
0640 int bit;
0641
0642 bit = find_first_zero_bit(slave->bus->assigned, SDW_MAX_DEVICES);
0643 if (bit == SDW_MAX_DEVICES) {
0644 bit = -ENODEV;
0645 goto err;
0646 }
0647
0648
0649
0650
0651
0652 set_bit(bit, slave->bus->assigned);
0653
0654 err:
0655 return bit;
0656 }
0657
0658 static int sdw_assign_device_num(struct sdw_slave *slave)
0659 {
0660 struct sdw_bus *bus = slave->bus;
0661 int ret, dev_num;
0662 bool new_device = false;
0663
0664
0665 if (!slave->dev_num) {
0666 if (!slave->dev_num_sticky) {
0667 mutex_lock(&slave->bus->bus_lock);
0668 dev_num = sdw_get_device_num(slave);
0669 mutex_unlock(&slave->bus->bus_lock);
0670 if (dev_num < 0) {
0671 dev_err(bus->dev, "Get dev_num failed: %d\n",
0672 dev_num);
0673 return dev_num;
0674 }
0675 slave->dev_num = dev_num;
0676 slave->dev_num_sticky = dev_num;
0677 new_device = true;
0678 } else {
0679 slave->dev_num = slave->dev_num_sticky;
0680 }
0681 }
0682
0683 if (!new_device)
0684 dev_dbg(bus->dev,
0685 "Slave already registered, reusing dev_num:%d\n",
0686 slave->dev_num);
0687
0688
0689 dev_num = slave->dev_num;
0690 slave->dev_num = 0;
0691
0692 ret = sdw_write_no_pm(slave, SDW_SCP_DEVNUMBER, dev_num);
0693 if (ret < 0) {
0694 dev_err(bus->dev, "Program device_num %d failed: %d\n",
0695 dev_num, ret);
0696 return ret;
0697 }
0698
0699
0700 slave->dev_num = slave->dev_num_sticky;
0701
0702 return 0;
0703 }
0704
0705 void sdw_extract_slave_id(struct sdw_bus *bus,
0706 u64 addr, struct sdw_slave_id *id)
0707 {
0708 dev_dbg(bus->dev, "SDW Slave Addr: %llx\n", addr);
0709
0710 id->sdw_version = SDW_VERSION(addr);
0711 id->unique_id = SDW_UNIQUE_ID(addr);
0712 id->mfg_id = SDW_MFG_ID(addr);
0713 id->part_id = SDW_PART_ID(addr);
0714 id->class_id = SDW_CLASS_ID(addr);
0715
0716 dev_dbg(bus->dev,
0717 "SDW Slave class_id 0x%02x, mfg_id 0x%04x, part_id 0x%04x, unique_id 0x%x, version 0x%x\n",
0718 id->class_id, id->mfg_id, id->part_id, id->unique_id, id->sdw_version);
0719 }
0720 EXPORT_SYMBOL(sdw_extract_slave_id);
0721
0722 static int sdw_program_device_num(struct sdw_bus *bus)
0723 {
0724 u8 buf[SDW_NUM_DEV_ID_REGISTERS] = {0};
0725 struct sdw_slave *slave, *_s;
0726 struct sdw_slave_id id;
0727 struct sdw_msg msg;
0728 bool found;
0729 int count = 0, ret;
0730 u64 addr;
0731
0732
0733 ret = sdw_fill_msg(&msg, NULL, SDW_SCP_DEVID_0,
0734 SDW_NUM_DEV_ID_REGISTERS, 0, SDW_MSG_FLAG_READ, buf);
0735 if (ret < 0)
0736 return ret;
0737
0738 do {
0739 ret = sdw_transfer(bus, &msg);
0740 if (ret == -ENODATA) {
0741 dev_dbg(bus->dev, "No more devices to enumerate\n");
0742 ret = 0;
0743 break;
0744 }
0745 if (ret < 0) {
0746 dev_err(bus->dev, "DEVID read fail:%d\n", ret);
0747 break;
0748 }
0749
0750
0751
0752
0753
0754 addr = buf[5] | (buf[4] << 8) | (buf[3] << 16) |
0755 ((u64)buf[2] << 24) | ((u64)buf[1] << 32) |
0756 ((u64)buf[0] << 40);
0757
0758 sdw_extract_slave_id(bus, addr, &id);
0759
0760 found = false;
0761
0762 list_for_each_entry_safe(slave, _s, &bus->slaves, node) {
0763 if (sdw_compare_devid(slave, id) == 0) {
0764 found = true;
0765
0766
0767
0768
0769
0770
0771
0772 ret = sdw_assign_device_num(slave);
0773 if (ret < 0) {
0774 dev_err(bus->dev,
0775 "Assign dev_num failed:%d\n",
0776 ret);
0777 return ret;
0778 }
0779
0780 break;
0781 }
0782 }
0783
0784 if (!found) {
0785
0786
0787
0788
0789
0790
0791
0792
0793 sdw_slave_add(bus, &id, NULL);
0794
0795 dev_err(bus->dev, "Slave Entry not found\n");
0796 }
0797
0798 count++;
0799
0800
0801
0802
0803
0804
0805
0806 } while (ret == 0 && count < (SDW_MAX_DEVICES * 2));
0807
0808 return ret;
0809 }
0810
0811 static void sdw_modify_slave_status(struct sdw_slave *slave,
0812 enum sdw_slave_status status)
0813 {
0814 struct sdw_bus *bus = slave->bus;
0815
0816 mutex_lock(&bus->bus_lock);
0817
0818 dev_vdbg(bus->dev,
0819 "%s: changing status slave %d status %d new status %d\n",
0820 __func__, slave->dev_num, slave->status, status);
0821
0822 if (status == SDW_SLAVE_UNATTACHED) {
0823 dev_dbg(&slave->dev,
0824 "%s: initializing enumeration and init completion for Slave %d\n",
0825 __func__, slave->dev_num);
0826
0827 init_completion(&slave->enumeration_complete);
0828 init_completion(&slave->initialization_complete);
0829
0830 } else if ((status == SDW_SLAVE_ATTACHED) &&
0831 (slave->status == SDW_SLAVE_UNATTACHED)) {
0832 dev_dbg(&slave->dev,
0833 "%s: signaling enumeration completion for Slave %d\n",
0834 __func__, slave->dev_num);
0835
0836 complete(&slave->enumeration_complete);
0837 }
0838 slave->status = status;
0839 mutex_unlock(&bus->bus_lock);
0840 }
0841
0842 static int sdw_slave_clk_stop_callback(struct sdw_slave *slave,
0843 enum sdw_clk_stop_mode mode,
0844 enum sdw_clk_stop_type type)
0845 {
0846 int ret = 0;
0847
0848 mutex_lock(&slave->sdw_dev_lock);
0849
0850 if (slave->probed) {
0851 struct device *dev = &slave->dev;
0852 struct sdw_driver *drv = drv_to_sdw_driver(dev->driver);
0853
0854 if (drv->ops && drv->ops->clk_stop)
0855 ret = drv->ops->clk_stop(slave, mode, type);
0856 }
0857
0858 mutex_unlock(&slave->sdw_dev_lock);
0859
0860 return ret;
0861 }
0862
0863 static int sdw_slave_clk_stop_prepare(struct sdw_slave *slave,
0864 enum sdw_clk_stop_mode mode,
0865 bool prepare)
0866 {
0867 bool wake_en;
0868 u32 val = 0;
0869 int ret;
0870
0871 wake_en = slave->prop.wake_capable;
0872
0873 if (prepare) {
0874 val = SDW_SCP_SYSTEMCTRL_CLK_STP_PREP;
0875
0876 if (mode == SDW_CLK_STOP_MODE1)
0877 val |= SDW_SCP_SYSTEMCTRL_CLK_STP_MODE1;
0878
0879 if (wake_en)
0880 val |= SDW_SCP_SYSTEMCTRL_WAKE_UP_EN;
0881 } else {
0882 ret = sdw_read_no_pm(slave, SDW_SCP_SYSTEMCTRL);
0883 if (ret < 0) {
0884 if (ret != -ENODATA)
0885 dev_err(&slave->dev, "SDW_SCP_SYSTEMCTRL read failed:%d\n", ret);
0886 return ret;
0887 }
0888 val = ret;
0889 val &= ~(SDW_SCP_SYSTEMCTRL_CLK_STP_PREP);
0890 }
0891
0892 ret = sdw_write_no_pm(slave, SDW_SCP_SYSTEMCTRL, val);
0893
0894 if (ret < 0 && ret != -ENODATA)
0895 dev_err(&slave->dev, "SDW_SCP_SYSTEMCTRL write failed:%d\n", ret);
0896
0897 return ret;
0898 }
0899
0900 static int sdw_bus_wait_for_clk_prep_deprep(struct sdw_bus *bus, u16 dev_num)
0901 {
0902 int retry = bus->clk_stop_timeout;
0903 int val;
0904
0905 do {
0906 val = sdw_bread_no_pm(bus, dev_num, SDW_SCP_STAT);
0907 if (val < 0) {
0908 if (val != -ENODATA)
0909 dev_err(bus->dev, "SDW_SCP_STAT bread failed:%d\n", val);
0910 return val;
0911 }
0912 val &= SDW_SCP_STAT_CLK_STP_NF;
0913 if (!val) {
0914 dev_dbg(bus->dev, "clock stop prep/de-prep done slave:%d\n",
0915 dev_num);
0916 return 0;
0917 }
0918
0919 usleep_range(1000, 1500);
0920 retry--;
0921 } while (retry);
0922
0923 dev_err(bus->dev, "clock stop prep/de-prep failed slave:%d\n",
0924 dev_num);
0925
0926 return -ETIMEDOUT;
0927 }
0928
0929
0930
0931
0932
0933
0934
0935
0936 int sdw_bus_prep_clk_stop(struct sdw_bus *bus)
0937 {
0938 bool simple_clk_stop = true;
0939 struct sdw_slave *slave;
0940 bool is_slave = false;
0941 int ret = 0;
0942
0943
0944
0945
0946
0947
0948
0949
0950
0951 list_for_each_entry(slave, &bus->slaves, node) {
0952 if (!slave->dev_num)
0953 continue;
0954
0955 if (slave->status != SDW_SLAVE_ATTACHED &&
0956 slave->status != SDW_SLAVE_ALERT)
0957 continue;
0958
0959
0960 is_slave = true;
0961
0962 ret = sdw_slave_clk_stop_callback(slave,
0963 SDW_CLK_STOP_MODE0,
0964 SDW_CLK_PRE_PREPARE);
0965 if (ret < 0 && ret != -ENODATA) {
0966 dev_err(&slave->dev, "clock stop pre-prepare cb failed:%d\n", ret);
0967 return ret;
0968 }
0969
0970
0971 if (!slave->prop.simple_clk_stop_capable) {
0972 simple_clk_stop = false;
0973
0974 ret = sdw_slave_clk_stop_prepare(slave,
0975 SDW_CLK_STOP_MODE0,
0976 true);
0977 if (ret < 0 && ret != -ENODATA) {
0978 dev_err(&slave->dev, "clock stop prepare failed:%d\n", ret);
0979 return ret;
0980 }
0981 }
0982 }
0983
0984
0985 if (!is_slave)
0986 return 0;
0987
0988
0989
0990
0991
0992 if (!simple_clk_stop) {
0993 ret = sdw_bus_wait_for_clk_prep_deprep(bus,
0994 SDW_BROADCAST_DEV_NUM);
0995
0996
0997
0998
0999
1000
1001 if (ret < 0)
1002 return ret;
1003 }
1004
1005
1006 list_for_each_entry(slave, &bus->slaves, node) {
1007 if (!slave->dev_num)
1008 continue;
1009
1010 if (slave->status != SDW_SLAVE_ATTACHED &&
1011 slave->status != SDW_SLAVE_ALERT)
1012 continue;
1013
1014 ret = sdw_slave_clk_stop_callback(slave,
1015 SDW_CLK_STOP_MODE0,
1016 SDW_CLK_POST_PREPARE);
1017
1018 if (ret < 0 && ret != -ENODATA) {
1019 dev_err(&slave->dev, "clock stop post-prepare cb failed:%d\n", ret);
1020 return ret;
1021 }
1022 }
1023
1024 return 0;
1025 }
1026 EXPORT_SYMBOL(sdw_bus_prep_clk_stop);
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036 int sdw_bus_clk_stop(struct sdw_bus *bus)
1037 {
1038 int ret;
1039
1040
1041
1042
1043
1044 ret = sdw_bwrite_no_pm(bus, SDW_BROADCAST_DEV_NUM,
1045 SDW_SCP_CTRL, SDW_SCP_CTRL_CLK_STP_NOW);
1046 if (ret < 0) {
1047 if (ret != -ENODATA)
1048 dev_err(bus->dev, "ClockStopNow Broadcast msg failed %d\n", ret);
1049 return ret;
1050 }
1051
1052 return 0;
1053 }
1054 EXPORT_SYMBOL(sdw_bus_clk_stop);
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065 int sdw_bus_exit_clk_stop(struct sdw_bus *bus)
1066 {
1067 bool simple_clk_stop = true;
1068 struct sdw_slave *slave;
1069 bool is_slave = false;
1070 int ret;
1071
1072
1073
1074
1075
1076
1077 list_for_each_entry(slave, &bus->slaves, node) {
1078 if (!slave->dev_num)
1079 continue;
1080
1081 if (slave->status != SDW_SLAVE_ATTACHED &&
1082 slave->status != SDW_SLAVE_ALERT)
1083 continue;
1084
1085
1086 is_slave = true;
1087
1088 ret = sdw_slave_clk_stop_callback(slave, SDW_CLK_STOP_MODE0,
1089 SDW_CLK_PRE_DEPREPARE);
1090 if (ret < 0)
1091 dev_warn(&slave->dev, "clock stop pre-deprepare cb failed:%d\n", ret);
1092
1093
1094 if (!slave->prop.simple_clk_stop_capable) {
1095 simple_clk_stop = false;
1096
1097 ret = sdw_slave_clk_stop_prepare(slave, SDW_CLK_STOP_MODE0,
1098 false);
1099
1100 if (ret < 0)
1101 dev_warn(&slave->dev, "clock stop deprepare failed:%d\n", ret);
1102 }
1103 }
1104
1105
1106 if (!is_slave)
1107 return 0;
1108
1109
1110
1111
1112
1113 if (!simple_clk_stop) {
1114 ret = sdw_bus_wait_for_clk_prep_deprep(bus, SDW_BROADCAST_DEV_NUM);
1115 if (ret < 0)
1116 dev_warn(bus->dev, "clock stop deprepare wait failed:%d\n", ret);
1117 }
1118
1119 list_for_each_entry(slave, &bus->slaves, node) {
1120 if (!slave->dev_num)
1121 continue;
1122
1123 if (slave->status != SDW_SLAVE_ATTACHED &&
1124 slave->status != SDW_SLAVE_ALERT)
1125 continue;
1126
1127 ret = sdw_slave_clk_stop_callback(slave, SDW_CLK_STOP_MODE0,
1128 SDW_CLK_POST_DEPREPARE);
1129 if (ret < 0)
1130 dev_warn(&slave->dev, "clock stop post-deprepare cb failed:%d\n", ret);
1131 }
1132
1133 return 0;
1134 }
1135 EXPORT_SYMBOL(sdw_bus_exit_clk_stop);
1136
1137 int sdw_configure_dpn_intr(struct sdw_slave *slave,
1138 int port, bool enable, int mask)
1139 {
1140 u32 addr;
1141 int ret;
1142 u8 val = 0;
1143
1144 if (slave->bus->params.s_data_mode != SDW_PORT_DATA_MODE_NORMAL) {
1145 dev_dbg(&slave->dev, "TEST FAIL interrupt %s\n",
1146 enable ? "on" : "off");
1147 mask |= SDW_DPN_INT_TEST_FAIL;
1148 }
1149
1150 addr = SDW_DPN_INTMASK(port);
1151
1152
1153 if (enable) {
1154 val |= mask;
1155 val |= SDW_DPN_INT_PORT_READY;
1156 } else {
1157 val &= ~(mask);
1158 val &= ~SDW_DPN_INT_PORT_READY;
1159 }
1160
1161 ret = sdw_update(slave, addr, (mask | SDW_DPN_INT_PORT_READY), val);
1162 if (ret < 0)
1163 dev_err(&slave->dev,
1164 "SDW_DPN_INTMASK write failed:%d\n", val);
1165
1166 return ret;
1167 }
1168
1169 static int sdw_slave_set_frequency(struct sdw_slave *slave)
1170 {
1171 u32 mclk_freq = slave->bus->prop.mclk_freq;
1172 u32 curr_freq = slave->bus->params.curr_dr_freq >> 1;
1173 unsigned int scale;
1174 u8 scale_index;
1175 u8 base;
1176 int ret;
1177
1178
1179
1180
1181
1182
1183 if (!slave->id.class_id)
1184 return 0;
1185
1186 if (!mclk_freq) {
1187 dev_err(&slave->dev,
1188 "no bus MCLK, cannot set SDW_SCP_BUS_CLOCK_BASE\n");
1189 return -EINVAL;
1190 }
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201 if (!(19200000 % mclk_freq)) {
1202 mclk_freq = 19200000;
1203 base = SDW_SCP_BASE_CLOCK_19200000_HZ;
1204 } else if (!(24000000 % mclk_freq)) {
1205 mclk_freq = 24000000;
1206 base = SDW_SCP_BASE_CLOCK_24000000_HZ;
1207 } else if (!(24576000 % mclk_freq)) {
1208 mclk_freq = 24576000;
1209 base = SDW_SCP_BASE_CLOCK_24576000_HZ;
1210 } else if (!(22579200 % mclk_freq)) {
1211 mclk_freq = 22579200;
1212 base = SDW_SCP_BASE_CLOCK_22579200_HZ;
1213 } else if (!(32000000 % mclk_freq)) {
1214 mclk_freq = 32000000;
1215 base = SDW_SCP_BASE_CLOCK_32000000_HZ;
1216 } else {
1217 dev_err(&slave->dev,
1218 "Unsupported clock base, mclk %d\n",
1219 mclk_freq);
1220 return -EINVAL;
1221 }
1222
1223 if (mclk_freq % curr_freq) {
1224 dev_err(&slave->dev,
1225 "mclk %d is not multiple of bus curr_freq %d\n",
1226 mclk_freq, curr_freq);
1227 return -EINVAL;
1228 }
1229
1230 scale = mclk_freq / curr_freq;
1231
1232
1233
1234
1235
1236 scale_index = ilog2(scale);
1237
1238 if (BIT(scale_index) != scale || scale_index > 6) {
1239 dev_err(&slave->dev,
1240 "No match found for scale %d, bus mclk %d curr_freq %d\n",
1241 scale, mclk_freq, curr_freq);
1242 return -EINVAL;
1243 }
1244 scale_index++;
1245
1246 ret = sdw_write_no_pm(slave, SDW_SCP_BUS_CLOCK_BASE, base);
1247 if (ret < 0) {
1248 dev_err(&slave->dev,
1249 "SDW_SCP_BUS_CLOCK_BASE write failed:%d\n", ret);
1250 return ret;
1251 }
1252
1253
1254 ret = sdw_write_no_pm(slave, SDW_SCP_BUSCLOCK_SCALE_B0, scale_index);
1255 if (ret < 0) {
1256 dev_err(&slave->dev,
1257 "SDW_SCP_BUSCLOCK_SCALE_B0 write failed:%d\n", ret);
1258 return ret;
1259 }
1260 ret = sdw_write_no_pm(slave, SDW_SCP_BUSCLOCK_SCALE_B1, scale_index);
1261 if (ret < 0)
1262 dev_err(&slave->dev,
1263 "SDW_SCP_BUSCLOCK_SCALE_B1 write failed:%d\n", ret);
1264
1265 dev_dbg(&slave->dev,
1266 "Configured bus base %d, scale %d, mclk %d, curr_freq %d\n",
1267 base, scale_index, mclk_freq, curr_freq);
1268
1269 return ret;
1270 }
1271
1272 static int sdw_initialize_slave(struct sdw_slave *slave)
1273 {
1274 struct sdw_slave_prop *prop = &slave->prop;
1275 int status;
1276 int ret;
1277 u8 val;
1278
1279 ret = sdw_slave_set_frequency(slave);
1280 if (ret < 0)
1281 return ret;
1282
1283 if (slave->bus->prop.quirks & SDW_MASTER_QUIRKS_CLEAR_INITIAL_CLASH) {
1284
1285 status = sdw_read_no_pm(slave, SDW_SCP_INT1);
1286 if (status < 0) {
1287 dev_err(&slave->dev,
1288 "SDW_SCP_INT1 (BUS_CLASH) read failed:%d\n", status);
1289 return status;
1290 }
1291 if (status & SDW_SCP_INT1_BUS_CLASH) {
1292 dev_warn(&slave->dev, "Bus clash detected before INT mask is enabled\n");
1293 ret = sdw_write_no_pm(slave, SDW_SCP_INT1, SDW_SCP_INT1_BUS_CLASH);
1294 if (ret < 0) {
1295 dev_err(&slave->dev,
1296 "SDW_SCP_INT1 (BUS_CLASH) write failed:%d\n", ret);
1297 return ret;
1298 }
1299 }
1300 }
1301 if ((slave->bus->prop.quirks & SDW_MASTER_QUIRKS_CLEAR_INITIAL_PARITY) &&
1302 !(slave->prop.quirks & SDW_SLAVE_QUIRKS_INVALID_INITIAL_PARITY)) {
1303
1304 status = sdw_read_no_pm(slave, SDW_SCP_INT1);
1305 if (status < 0) {
1306 dev_err(&slave->dev,
1307 "SDW_SCP_INT1 (PARITY) read failed:%d\n", status);
1308 return status;
1309 }
1310 if (status & SDW_SCP_INT1_PARITY) {
1311 dev_warn(&slave->dev, "PARITY error detected before INT mask is enabled\n");
1312 ret = sdw_write_no_pm(slave, SDW_SCP_INT1, SDW_SCP_INT1_PARITY);
1313 if (ret < 0) {
1314 dev_err(&slave->dev,
1315 "SDW_SCP_INT1 (PARITY) write failed:%d\n", ret);
1316 return ret;
1317 }
1318 }
1319 }
1320
1321
1322
1323
1324
1325
1326
1327
1328 val = slave->prop.scp_int1_mask;
1329
1330
1331 ret = sdw_update_no_pm(slave, SDW_SCP_INTMASK1, val, val);
1332 if (ret < 0) {
1333 dev_err(&slave->dev,
1334 "SDW_SCP_INTMASK1 write failed:%d\n", ret);
1335 return ret;
1336 }
1337
1338
1339 if (!slave->prop.dp0_prop)
1340 return 0;
1341
1342
1343 val = prop->dp0_prop->imp_def_interrupts;
1344 val |= SDW_DP0_INT_PORT_READY | SDW_DP0_INT_BRA_FAILURE;
1345
1346 ret = sdw_update_no_pm(slave, SDW_DP0_INTMASK, val, val);
1347 if (ret < 0)
1348 dev_err(&slave->dev,
1349 "SDW_DP0_INTMASK read failed:%d\n", ret);
1350 return ret;
1351 }
1352
1353 static int sdw_handle_dp0_interrupt(struct sdw_slave *slave, u8 *slave_status)
1354 {
1355 u8 clear, impl_int_mask;
1356 int status, status2, ret, count = 0;
1357
1358 status = sdw_read_no_pm(slave, SDW_DP0_INT);
1359 if (status < 0) {
1360 dev_err(&slave->dev,
1361 "SDW_DP0_INT read failed:%d\n", status);
1362 return status;
1363 }
1364
1365 do {
1366 clear = status & ~SDW_DP0_INTERRUPTS;
1367
1368 if (status & SDW_DP0_INT_TEST_FAIL) {
1369 dev_err(&slave->dev, "Test fail for port 0\n");
1370 clear |= SDW_DP0_INT_TEST_FAIL;
1371 }
1372
1373
1374
1375
1376
1377
1378 if (status & SDW_DP0_INT_PORT_READY) {
1379 complete(&slave->port_ready[0]);
1380 clear |= SDW_DP0_INT_PORT_READY;
1381 }
1382
1383 if (status & SDW_DP0_INT_BRA_FAILURE) {
1384 dev_err(&slave->dev, "BRA failed\n");
1385 clear |= SDW_DP0_INT_BRA_FAILURE;
1386 }
1387
1388 impl_int_mask = SDW_DP0_INT_IMPDEF1 |
1389 SDW_DP0_INT_IMPDEF2 | SDW_DP0_INT_IMPDEF3;
1390
1391 if (status & impl_int_mask) {
1392 clear |= impl_int_mask;
1393 *slave_status = clear;
1394 }
1395
1396
1397 ret = sdw_write_no_pm(slave, SDW_DP0_INT, clear);
1398 if (ret < 0) {
1399 dev_err(&slave->dev,
1400 "SDW_DP0_INT write failed:%d\n", ret);
1401 return ret;
1402 }
1403
1404
1405 status2 = sdw_read_no_pm(slave, SDW_DP0_INT);
1406 if (status2 < 0) {
1407 dev_err(&slave->dev,
1408 "SDW_DP0_INT read failed:%d\n", status2);
1409 return status2;
1410 }
1411
1412 status &= status2;
1413
1414 count++;
1415
1416
1417 } while ((status & SDW_DP0_INTERRUPTS) && (count < SDW_READ_INTR_CLEAR_RETRY));
1418
1419 if (count == SDW_READ_INTR_CLEAR_RETRY)
1420 dev_warn(&slave->dev, "Reached MAX_RETRY on DP0 read\n");
1421
1422 return ret;
1423 }
1424
1425 static int sdw_handle_port_interrupt(struct sdw_slave *slave,
1426 int port, u8 *slave_status)
1427 {
1428 u8 clear, impl_int_mask;
1429 int status, status2, ret, count = 0;
1430 u32 addr;
1431
1432 if (port == 0)
1433 return sdw_handle_dp0_interrupt(slave, slave_status);
1434
1435 addr = SDW_DPN_INT(port);
1436 status = sdw_read_no_pm(slave, addr);
1437 if (status < 0) {
1438 dev_err(&slave->dev,
1439 "SDW_DPN_INT read failed:%d\n", status);
1440
1441 return status;
1442 }
1443
1444 do {
1445 clear = status & ~SDW_DPN_INTERRUPTS;
1446
1447 if (status & SDW_DPN_INT_TEST_FAIL) {
1448 dev_err(&slave->dev, "Test fail for port:%d\n", port);
1449 clear |= SDW_DPN_INT_TEST_FAIL;
1450 }
1451
1452
1453
1454
1455
1456 if (status & SDW_DPN_INT_PORT_READY) {
1457 complete(&slave->port_ready[port]);
1458 clear |= SDW_DPN_INT_PORT_READY;
1459 }
1460
1461 impl_int_mask = SDW_DPN_INT_IMPDEF1 |
1462 SDW_DPN_INT_IMPDEF2 | SDW_DPN_INT_IMPDEF3;
1463
1464 if (status & impl_int_mask) {
1465 clear |= impl_int_mask;
1466 *slave_status = clear;
1467 }
1468
1469
1470 ret = sdw_write_no_pm(slave, addr, clear);
1471 if (ret < 0) {
1472 dev_err(&slave->dev,
1473 "SDW_DPN_INT write failed:%d\n", ret);
1474 return ret;
1475 }
1476
1477
1478 status2 = sdw_read_no_pm(slave, addr);
1479 if (status2 < 0) {
1480 dev_err(&slave->dev,
1481 "SDW_DPN_INT read failed:%d\n", status2);
1482 return status2;
1483 }
1484
1485 status &= status2;
1486
1487 count++;
1488
1489
1490 } while ((status & SDW_DPN_INTERRUPTS) && (count < SDW_READ_INTR_CLEAR_RETRY));
1491
1492 if (count == SDW_READ_INTR_CLEAR_RETRY)
1493 dev_warn(&slave->dev, "Reached MAX_RETRY on port read");
1494
1495 return ret;
1496 }
1497
1498 static int sdw_handle_slave_alerts(struct sdw_slave *slave)
1499 {
1500 struct sdw_slave_intr_status slave_intr;
1501 u8 clear = 0, bit, port_status[15] = {0};
1502 int port_num, stat, ret, count = 0;
1503 unsigned long port;
1504 bool slave_notify;
1505 u8 sdca_cascade = 0;
1506 u8 buf, buf2[2], _buf, _buf2[2];
1507 bool parity_check;
1508 bool parity_quirk;
1509
1510 sdw_modify_slave_status(slave, SDW_SLAVE_ALERT);
1511
1512 ret = pm_runtime_resume_and_get(&slave->dev);
1513 if (ret < 0 && ret != -EACCES) {
1514 dev_err(&slave->dev, "Failed to resume device: %d\n", ret);
1515 return ret;
1516 }
1517
1518
1519 ret = sdw_read_no_pm(slave, SDW_SCP_INT1);
1520 if (ret < 0) {
1521 dev_err(&slave->dev,
1522 "SDW_SCP_INT1 read failed:%d\n", ret);
1523 goto io_err;
1524 }
1525 buf = ret;
1526
1527 ret = sdw_nread_no_pm(slave, SDW_SCP_INTSTAT2, 2, buf2);
1528 if (ret < 0) {
1529 dev_err(&slave->dev,
1530 "SDW_SCP_INT2/3 read failed:%d\n", ret);
1531 goto io_err;
1532 }
1533
1534 if (slave->prop.is_sdca) {
1535 ret = sdw_read_no_pm(slave, SDW_DP0_INT);
1536 if (ret < 0) {
1537 dev_err(&slave->dev,
1538 "SDW_DP0_INT read failed:%d\n", ret);
1539 goto io_err;
1540 }
1541 sdca_cascade = ret & SDW_DP0_SDCA_CASCADE;
1542 }
1543
1544 do {
1545 slave_notify = false;
1546
1547
1548
1549
1550
1551 if (buf & SDW_SCP_INT1_PARITY) {
1552 parity_check = slave->prop.scp_int1_mask & SDW_SCP_INT1_PARITY;
1553 parity_quirk = !slave->first_interrupt_done &&
1554 (slave->prop.quirks & SDW_SLAVE_QUIRKS_INVALID_INITIAL_PARITY);
1555
1556 if (parity_check && !parity_quirk)
1557 dev_err(&slave->dev, "Parity error detected\n");
1558 clear |= SDW_SCP_INT1_PARITY;
1559 }
1560
1561 if (buf & SDW_SCP_INT1_BUS_CLASH) {
1562 if (slave->prop.scp_int1_mask & SDW_SCP_INT1_BUS_CLASH)
1563 dev_err(&slave->dev, "Bus clash detected\n");
1564 clear |= SDW_SCP_INT1_BUS_CLASH;
1565 }
1566
1567
1568
1569
1570
1571
1572
1573
1574 if (buf & SDW_SCP_INT1_IMPL_DEF) {
1575 if (slave->prop.scp_int1_mask & SDW_SCP_INT1_IMPL_DEF) {
1576 dev_dbg(&slave->dev, "Slave impl defined interrupt\n");
1577 slave_notify = true;
1578 }
1579 clear |= SDW_SCP_INT1_IMPL_DEF;
1580 }
1581
1582
1583 if (sdca_cascade)
1584 slave_notify = true;
1585
1586
1587 port = buf & SDW_SCP_INT1_PORT0_3;
1588
1589
1590 port = FIELD_GET(SDW_SCP_INT1_PORT0_3, port);
1591 for_each_set_bit(bit, &port, 8) {
1592 sdw_handle_port_interrupt(slave, bit,
1593 &port_status[bit]);
1594 }
1595
1596
1597 if (buf & SDW_SCP_INT1_SCP2_CASCADE) {
1598 port = buf2[0] & SDW_SCP_INTSTAT2_PORT4_10;
1599 for_each_set_bit(bit, &port, 8) {
1600
1601 port_num = bit + 3;
1602 sdw_handle_port_interrupt(slave,
1603 port_num,
1604 &port_status[port_num]);
1605 }
1606 }
1607
1608
1609 if (buf2[0] & SDW_SCP_INTSTAT2_SCP3_CASCADE) {
1610 port = buf2[1] & SDW_SCP_INTSTAT3_PORT11_14;
1611 for_each_set_bit(bit, &port, 8) {
1612
1613 port_num = bit + 10;
1614 sdw_handle_port_interrupt(slave,
1615 port_num,
1616 &port_status[port_num]);
1617 }
1618 }
1619
1620
1621 if (slave_notify) {
1622 mutex_lock(&slave->sdw_dev_lock);
1623
1624 if (slave->probed) {
1625 struct device *dev = &slave->dev;
1626 struct sdw_driver *drv = drv_to_sdw_driver(dev->driver);
1627
1628 if (drv->ops && drv->ops->interrupt_callback) {
1629 slave_intr.sdca_cascade = sdca_cascade;
1630 slave_intr.control_port = clear;
1631 memcpy(slave_intr.port, &port_status,
1632 sizeof(slave_intr.port));
1633
1634 drv->ops->interrupt_callback(slave, &slave_intr);
1635 }
1636 }
1637
1638 mutex_unlock(&slave->sdw_dev_lock);
1639 }
1640
1641
1642 ret = sdw_write_no_pm(slave, SDW_SCP_INT1, clear);
1643 if (ret < 0) {
1644 dev_err(&slave->dev,
1645 "SDW_SCP_INT1 write failed:%d\n", ret);
1646 goto io_err;
1647 }
1648
1649
1650 slave->first_interrupt_done = true;
1651
1652
1653
1654
1655
1656 ret = sdw_read_no_pm(slave, SDW_SCP_INT1);
1657 if (ret < 0) {
1658 dev_err(&slave->dev,
1659 "SDW_SCP_INT1 recheck read failed:%d\n", ret);
1660 goto io_err;
1661 }
1662 _buf = ret;
1663
1664 ret = sdw_nread_no_pm(slave, SDW_SCP_INTSTAT2, 2, _buf2);
1665 if (ret < 0) {
1666 dev_err(&slave->dev,
1667 "SDW_SCP_INT2/3 recheck read failed:%d\n", ret);
1668 goto io_err;
1669 }
1670
1671 if (slave->prop.is_sdca) {
1672 ret = sdw_read_no_pm(slave, SDW_DP0_INT);
1673 if (ret < 0) {
1674 dev_err(&slave->dev,
1675 "SDW_DP0_INT recheck read failed:%d\n", ret);
1676 goto io_err;
1677 }
1678 sdca_cascade = ret & SDW_DP0_SDCA_CASCADE;
1679 }
1680
1681
1682
1683
1684
1685 buf &= _buf;
1686 buf2[0] &= _buf2[0];
1687 buf2[1] &= _buf2[1];
1688 stat = buf || buf2[0] || buf2[1] || sdca_cascade;
1689
1690
1691
1692
1693
1694 count++;
1695
1696
1697 } while (stat != 0 && count < SDW_READ_INTR_CLEAR_RETRY);
1698
1699 if (count == SDW_READ_INTR_CLEAR_RETRY)
1700 dev_warn(&slave->dev, "Reached MAX_RETRY on alert read\n");
1701
1702 io_err:
1703 pm_runtime_mark_last_busy(&slave->dev);
1704 pm_runtime_put_autosuspend(&slave->dev);
1705
1706 return ret;
1707 }
1708
1709 static int sdw_update_slave_status(struct sdw_slave *slave,
1710 enum sdw_slave_status status)
1711 {
1712 int ret = 0;
1713
1714 mutex_lock(&slave->sdw_dev_lock);
1715
1716 if (slave->probed) {
1717 struct device *dev = &slave->dev;
1718 struct sdw_driver *drv = drv_to_sdw_driver(dev->driver);
1719
1720 if (drv->ops && drv->ops->update_status)
1721 ret = drv->ops->update_status(slave, status);
1722 }
1723
1724 mutex_unlock(&slave->sdw_dev_lock);
1725
1726 return ret;
1727 }
1728
1729
1730
1731
1732
1733
1734 int sdw_handle_slave_status(struct sdw_bus *bus,
1735 enum sdw_slave_status status[])
1736 {
1737 enum sdw_slave_status prev_status;
1738 struct sdw_slave *slave;
1739 bool attached_initializing;
1740 int i, ret = 0;
1741
1742
1743 for (i = 1; i <= SDW_MAX_DEVICES; i++) {
1744 mutex_lock(&bus->bus_lock);
1745 if (test_bit(i, bus->assigned) == false) {
1746 mutex_unlock(&bus->bus_lock);
1747 continue;
1748 }
1749 mutex_unlock(&bus->bus_lock);
1750
1751 slave = sdw_get_slave(bus, i);
1752 if (!slave)
1753 continue;
1754
1755 if (status[i] == SDW_SLAVE_UNATTACHED &&
1756 slave->status != SDW_SLAVE_UNATTACHED) {
1757 dev_warn(&slave->dev, "Slave %d state check1: UNATTACHED, status was %d\n",
1758 i, slave->status);
1759 sdw_modify_slave_status(slave, SDW_SLAVE_UNATTACHED);
1760 }
1761 }
1762
1763 if (status[0] == SDW_SLAVE_ATTACHED) {
1764 dev_dbg(bus->dev, "Slave attached, programming device number\n");
1765 ret = sdw_program_device_num(bus);
1766 if (ret < 0)
1767 dev_err(bus->dev, "Slave attach failed: %d\n", ret);
1768
1769
1770
1771
1772 return ret;
1773 }
1774
1775
1776 for (i = 1; i <= SDW_MAX_DEVICES; i++) {
1777 mutex_lock(&bus->bus_lock);
1778 if (test_bit(i, bus->assigned) == false) {
1779 mutex_unlock(&bus->bus_lock);
1780 continue;
1781 }
1782 mutex_unlock(&bus->bus_lock);
1783
1784 slave = sdw_get_slave(bus, i);
1785 if (!slave)
1786 continue;
1787
1788 attached_initializing = false;
1789
1790 switch (status[i]) {
1791 case SDW_SLAVE_UNATTACHED:
1792 if (slave->status == SDW_SLAVE_UNATTACHED)
1793 break;
1794
1795 dev_warn(&slave->dev, "Slave %d state check2: UNATTACHED, status was %d\n",
1796 i, slave->status);
1797
1798 sdw_modify_slave_status(slave, SDW_SLAVE_UNATTACHED);
1799 break;
1800
1801 case SDW_SLAVE_ALERT:
1802 ret = sdw_handle_slave_alerts(slave);
1803 if (ret < 0)
1804 dev_err(&slave->dev,
1805 "Slave %d alert handling failed: %d\n",
1806 i, ret);
1807 break;
1808
1809 case SDW_SLAVE_ATTACHED:
1810 if (slave->status == SDW_SLAVE_ATTACHED)
1811 break;
1812
1813 prev_status = slave->status;
1814 sdw_modify_slave_status(slave, SDW_SLAVE_ATTACHED);
1815
1816 if (prev_status == SDW_SLAVE_ALERT)
1817 break;
1818
1819 attached_initializing = true;
1820
1821 ret = sdw_initialize_slave(slave);
1822 if (ret < 0)
1823 dev_err(&slave->dev,
1824 "Slave %d initialization failed: %d\n",
1825 i, ret);
1826
1827 break;
1828
1829 default:
1830 dev_err(&slave->dev, "Invalid slave %d status:%d\n",
1831 i, status[i]);
1832 break;
1833 }
1834
1835 ret = sdw_update_slave_status(slave, status[i]);
1836 if (ret < 0)
1837 dev_err(&slave->dev,
1838 "Update Slave status failed:%d\n", ret);
1839 if (attached_initializing) {
1840 dev_dbg(&slave->dev,
1841 "%s: signaling initialization completion for Slave %d\n",
1842 __func__, slave->dev_num);
1843
1844 complete(&slave->initialization_complete);
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856 pm_request_resume(&slave->dev);
1857 }
1858 }
1859
1860 return ret;
1861 }
1862 EXPORT_SYMBOL(sdw_handle_slave_status);
1863
1864 void sdw_clear_slave_status(struct sdw_bus *bus, u32 request)
1865 {
1866 struct sdw_slave *slave;
1867 int i;
1868
1869
1870 for (i = 1; i <= SDW_MAX_DEVICES; i++) {
1871 mutex_lock(&bus->bus_lock);
1872 if (test_bit(i, bus->assigned) == false) {
1873 mutex_unlock(&bus->bus_lock);
1874 continue;
1875 }
1876 mutex_unlock(&bus->bus_lock);
1877
1878 slave = sdw_get_slave(bus, i);
1879 if (!slave)
1880 continue;
1881
1882 if (slave->status != SDW_SLAVE_UNATTACHED) {
1883 sdw_modify_slave_status(slave, SDW_SLAVE_UNATTACHED);
1884 slave->first_interrupt_done = false;
1885 sdw_update_slave_status(slave, SDW_SLAVE_UNATTACHED);
1886 }
1887
1888
1889 slave->unattach_request = request;
1890 }
1891 }
1892 EXPORT_SYMBOL(sdw_clear_slave_status);