bus.c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997
  1. // SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
  2. // Copyright(c) 2015-17 Intel Corporation.
  3. #include <linux/acpi.h>
  4. #include <linux/mod_devicetable.h>
  5. #include <linux/pm_runtime.h>
  6. #include <linux/soundwire/sdw_registers.h>
  7. #include <linux/soundwire/sdw.h>
  8. #include "bus.h"
  9. /**
  10. * sdw_add_bus_master() - add a bus Master instance
  11. * @bus: bus instance
  12. *
  13. * Initializes the bus instance, read properties and create child
  14. * devices.
  15. */
  16. int sdw_add_bus_master(struct sdw_bus *bus)
  17. {
  18. int ret;
  19. if (!bus->dev) {
  20. pr_err("SoundWire bus has no device");
  21. return -ENODEV;
  22. }
  23. if (!bus->ops) {
  24. dev_err(bus->dev, "SoundWire Bus ops are not set");
  25. return -EINVAL;
  26. }
  27. mutex_init(&bus->msg_lock);
  28. mutex_init(&bus->bus_lock);
  29. INIT_LIST_HEAD(&bus->slaves);
  30. if (bus->ops->read_prop) {
  31. ret = bus->ops->read_prop(bus);
  32. if (ret < 0) {
  33. dev_err(bus->dev, "Bus read properties failed:%d", ret);
  34. return ret;
  35. }
  36. }
  37. /*
  38. * Device numbers in SoundWire are 0 thru 15. Enumeration device
  39. * number (0), Broadcast device number (15), Group numbers (12 and
  40. * 13) and Master device number (14) are not used for assignment so
  41. * mask these and other higher bits.
  42. */
  43. /* Set higher order bits */
  44. *bus->assigned = ~GENMASK(SDW_BROADCAST_DEV_NUM, SDW_ENUM_DEV_NUM);
  45. /* Set enumuration device number and broadcast device number */
  46. set_bit(SDW_ENUM_DEV_NUM, bus->assigned);
  47. set_bit(SDW_BROADCAST_DEV_NUM, bus->assigned);
  48. /* Set group device numbers and master device number */
  49. set_bit(SDW_GROUP12_DEV_NUM, bus->assigned);
  50. set_bit(SDW_GROUP13_DEV_NUM, bus->assigned);
  51. set_bit(SDW_MASTER_DEV_NUM, bus->assigned);
  52. /*
  53. * SDW is an enumerable bus, but devices can be powered off. So,
  54. * they won't be able to report as present.
  55. *
  56. * Create Slave devices based on Slaves described in
  57. * the respective firmware (ACPI/DT)
  58. */
  59. if (IS_ENABLED(CONFIG_ACPI) && ACPI_HANDLE(bus->dev))
  60. ret = sdw_acpi_find_slaves(bus);
  61. else
  62. ret = -ENOTSUPP; /* No ACPI/DT so error out */
  63. if (ret) {
  64. dev_err(bus->dev, "Finding slaves failed:%d\n", ret);
  65. return ret;
  66. }
  67. return 0;
  68. }
  69. EXPORT_SYMBOL(sdw_add_bus_master);
  70. static int sdw_delete_slave(struct device *dev, void *data)
  71. {
  72. struct sdw_slave *slave = dev_to_sdw_dev(dev);
  73. struct sdw_bus *bus = slave->bus;
  74. mutex_lock(&bus->bus_lock);
  75. if (slave->dev_num) /* clear dev_num if assigned */
  76. clear_bit(slave->dev_num, bus->assigned);
  77. list_del_init(&slave->node);
  78. mutex_unlock(&bus->bus_lock);
  79. device_unregister(dev);
  80. return 0;
  81. }
  82. /**
  83. * sdw_delete_bus_master() - delete the bus master instance
  84. * @bus: bus to be deleted
  85. *
  86. * Remove the instance, delete the child devices.
  87. */
  88. void sdw_delete_bus_master(struct sdw_bus *bus)
  89. {
  90. device_for_each_child(bus->dev, NULL, sdw_delete_slave);
  91. }
  92. EXPORT_SYMBOL(sdw_delete_bus_master);
  93. /*
  94. * SDW IO Calls
  95. */
  96. static inline int find_response_code(enum sdw_command_response resp)
  97. {
  98. switch (resp) {
  99. case SDW_CMD_OK:
  100. return 0;
  101. case SDW_CMD_IGNORED:
  102. return -ENODATA;
  103. case SDW_CMD_TIMEOUT:
  104. return -ETIMEDOUT;
  105. default:
  106. return -EIO;
  107. }
  108. }
  109. static inline int do_transfer(struct sdw_bus *bus, struct sdw_msg *msg)
  110. {
  111. int retry = bus->prop.err_threshold;
  112. enum sdw_command_response resp;
  113. int ret = 0, i;
  114. for (i = 0; i <= retry; i++) {
  115. resp = bus->ops->xfer_msg(bus, msg);
  116. ret = find_response_code(resp);
  117. /* if cmd is ok or ignored return */
  118. if (ret == 0 || ret == -ENODATA)
  119. return ret;
  120. }
  121. return ret;
  122. }
  123. static inline int do_transfer_defer(struct sdw_bus *bus,
  124. struct sdw_msg *msg, struct sdw_defer *defer)
  125. {
  126. int retry = bus->prop.err_threshold;
  127. enum sdw_command_response resp;
  128. int ret = 0, i;
  129. defer->msg = msg;
  130. defer->length = msg->len;
  131. for (i = 0; i <= retry; i++) {
  132. resp = bus->ops->xfer_msg_defer(bus, msg, defer);
  133. ret = find_response_code(resp);
  134. /* if cmd is ok or ignored return */
  135. if (ret == 0 || ret == -ENODATA)
  136. return ret;
  137. }
  138. return ret;
  139. }
  140. static int sdw_reset_page(struct sdw_bus *bus, u16 dev_num)
  141. {
  142. int retry = bus->prop.err_threshold;
  143. enum sdw_command_response resp;
  144. int ret = 0, i;
  145. for (i = 0; i <= retry; i++) {
  146. resp = bus->ops->reset_page_addr(bus, dev_num);
  147. ret = find_response_code(resp);
  148. /* if cmd is ok or ignored return */
  149. if (ret == 0 || ret == -ENODATA)
  150. return ret;
  151. }
  152. return ret;
  153. }
  154. /**
  155. * sdw_transfer() - Synchronous transfer message to a SDW Slave device
  156. * @bus: SDW bus
  157. * @msg: SDW message to be xfered
  158. */
  159. int sdw_transfer(struct sdw_bus *bus, struct sdw_msg *msg)
  160. {
  161. int ret;
  162. mutex_lock(&bus->msg_lock);
  163. ret = do_transfer(bus, msg);
  164. if (ret != 0 && ret != -ENODATA)
  165. dev_err(bus->dev, "trf on Slave %d failed:%d\n",
  166. msg->dev_num, ret);
  167. if (msg->page)
  168. sdw_reset_page(bus, msg->dev_num);
  169. mutex_unlock(&bus->msg_lock);
  170. return ret;
  171. }
  172. /**
  173. * sdw_transfer_defer() - Asynchronously transfer message to a SDW Slave device
  174. * @bus: SDW bus
  175. * @msg: SDW message to be xfered
  176. * @defer: Defer block for signal completion
  177. *
  178. * Caller needs to hold the msg_lock lock while calling this
  179. */
  180. int sdw_transfer_defer(struct sdw_bus *bus, struct sdw_msg *msg,
  181. struct sdw_defer *defer)
  182. {
  183. int ret;
  184. if (!bus->ops->xfer_msg_defer)
  185. return -ENOTSUPP;
  186. ret = do_transfer_defer(bus, msg, defer);
  187. if (ret != 0 && ret != -ENODATA)
  188. dev_err(bus->dev, "Defer trf on Slave %d failed:%d\n",
  189. msg->dev_num, ret);
  190. if (msg->page)
  191. sdw_reset_page(bus, msg->dev_num);
  192. return ret;
  193. }
  194. int sdw_fill_msg(struct sdw_msg *msg, struct sdw_slave *slave,
  195. u32 addr, size_t count, u16 dev_num, u8 flags, u8 *buf)
  196. {
  197. memset(msg, 0, sizeof(*msg));
  198. msg->addr = addr; /* addr is 16 bit and truncated here */
  199. msg->len = count;
  200. msg->dev_num = dev_num;
  201. msg->flags = flags;
  202. msg->buf = buf;
  203. msg->ssp_sync = false;
  204. msg->page = false;
  205. if (addr < SDW_REG_NO_PAGE) { /* no paging area */
  206. return 0;
  207. } else if (addr >= SDW_REG_MAX) { /* illegal addr */
  208. pr_err("SDW: Invalid address %x passed\n", addr);
  209. return -EINVAL;
  210. }
  211. if (addr < SDW_REG_OPTIONAL_PAGE) { /* 32k but no page */
  212. if (slave && !slave->prop.paging_support)
  213. return 0;
  214. /* no need for else as that will fall thru to paging */
  215. }
  216. /* paging mandatory */
  217. if (dev_num == SDW_ENUM_DEV_NUM || dev_num == SDW_BROADCAST_DEV_NUM) {
  218. pr_err("SDW: Invalid device for paging :%d\n", dev_num);
  219. return -EINVAL;
  220. }
  221. if (!slave) {
  222. pr_err("SDW: No slave for paging addr\n");
  223. return -EINVAL;
  224. } else if (!slave->prop.paging_support) {
  225. dev_err(&slave->dev,
  226. "address %x needs paging but no support", addr);
  227. return -EINVAL;
  228. }
  229. msg->addr_page1 = (addr >> SDW_REG_SHIFT(SDW_SCP_ADDRPAGE1_MASK));
  230. msg->addr_page2 = (addr >> SDW_REG_SHIFT(SDW_SCP_ADDRPAGE2_MASK));
  231. msg->addr |= BIT(15);
  232. msg->page = true;
  233. return 0;
  234. }
  235. /**
  236. * sdw_nread() - Read "n" contiguous SDW Slave registers
  237. * @slave: SDW Slave
  238. * @addr: Register address
  239. * @count: length
  240. * @val: Buffer for values to be read
  241. */
  242. int sdw_nread(struct sdw_slave *slave, u32 addr, size_t count, u8 *val)
  243. {
  244. struct sdw_msg msg;
  245. int ret;
  246. ret = sdw_fill_msg(&msg, slave, addr, count,
  247. slave->dev_num, SDW_MSG_FLAG_READ, val);
  248. if (ret < 0)
  249. return ret;
  250. ret = pm_runtime_get_sync(slave->bus->dev);
  251. if (ret < 0)
  252. return ret;
  253. ret = sdw_transfer(slave->bus, &msg);
  254. pm_runtime_put(slave->bus->dev);
  255. return ret;
  256. }
  257. EXPORT_SYMBOL(sdw_nread);
  258. /**
  259. * sdw_nwrite() - Write "n" contiguous SDW Slave registers
  260. * @slave: SDW Slave
  261. * @addr: Register address
  262. * @count: length
  263. * @val: Buffer for values to be read
  264. */
  265. int sdw_nwrite(struct sdw_slave *slave, u32 addr, size_t count, u8 *val)
  266. {
  267. struct sdw_msg msg;
  268. int ret;
  269. ret = sdw_fill_msg(&msg, slave, addr, count,
  270. slave->dev_num, SDW_MSG_FLAG_WRITE, val);
  271. if (ret < 0)
  272. return ret;
  273. ret = pm_runtime_get_sync(slave->bus->dev);
  274. if (ret < 0)
  275. return ret;
  276. ret = sdw_transfer(slave->bus, &msg);
  277. pm_runtime_put(slave->bus->dev);
  278. return ret;
  279. }
  280. EXPORT_SYMBOL(sdw_nwrite);
  281. /**
  282. * sdw_read() - Read a SDW Slave register
  283. * @slave: SDW Slave
  284. * @addr: Register address
  285. */
  286. int sdw_read(struct sdw_slave *slave, u32 addr)
  287. {
  288. u8 buf;
  289. int ret;
  290. ret = sdw_nread(slave, addr, 1, &buf);
  291. if (ret < 0)
  292. return ret;
  293. else
  294. return buf;
  295. }
  296. EXPORT_SYMBOL(sdw_read);
  297. /**
  298. * sdw_write() - Write a SDW Slave register
  299. * @slave: SDW Slave
  300. * @addr: Register address
  301. * @value: Register value
  302. */
  303. int sdw_write(struct sdw_slave *slave, u32 addr, u8 value)
  304. {
  305. return sdw_nwrite(slave, addr, 1, &value);
  306. }
  307. EXPORT_SYMBOL(sdw_write);
  308. /*
  309. * SDW alert handling
  310. */
  311. /* called with bus_lock held */
  312. static struct sdw_slave *sdw_get_slave(struct sdw_bus *bus, int i)
  313. {
  314. struct sdw_slave *slave = NULL;
  315. list_for_each_entry(slave, &bus->slaves, node) {
  316. if (slave->dev_num == i)
  317. return slave;
  318. }
  319. return NULL;
  320. }
  321. static int sdw_compare_devid(struct sdw_slave *slave, struct sdw_slave_id id)
  322. {
  323. if ((slave->id.unique_id != id.unique_id) ||
  324. (slave->id.mfg_id != id.mfg_id) ||
  325. (slave->id.part_id != id.part_id) ||
  326. (slave->id.class_id != id.class_id))
  327. return -ENODEV;
  328. return 0;
  329. }
  330. /* called with bus_lock held */
  331. static int sdw_get_device_num(struct sdw_slave *slave)
  332. {
  333. int bit;
  334. bit = find_first_zero_bit(slave->bus->assigned, SDW_MAX_DEVICES);
  335. if (bit == SDW_MAX_DEVICES) {
  336. bit = -ENODEV;
  337. goto err;
  338. }
  339. /*
  340. * Do not update dev_num in Slave data structure here,
  341. * Update once program dev_num is successful
  342. */
  343. set_bit(bit, slave->bus->assigned);
  344. err:
  345. return bit;
  346. }
  347. static int sdw_assign_device_num(struct sdw_slave *slave)
  348. {
  349. int ret, dev_num;
  350. /* check first if device number is assigned, if so reuse that */
  351. if (!slave->dev_num) {
  352. mutex_lock(&slave->bus->bus_lock);
  353. dev_num = sdw_get_device_num(slave);
  354. mutex_unlock(&slave->bus->bus_lock);
  355. if (dev_num < 0) {
  356. dev_err(slave->bus->dev, "Get dev_num failed: %d",
  357. dev_num);
  358. return dev_num;
  359. }
  360. } else {
  361. dev_info(slave->bus->dev,
  362. "Slave already registered dev_num:%d",
  363. slave->dev_num);
  364. /* Clear the slave->dev_num to transfer message on device 0 */
  365. dev_num = slave->dev_num;
  366. slave->dev_num = 0;
  367. }
  368. ret = sdw_write(slave, SDW_SCP_DEVNUMBER, dev_num);
  369. if (ret < 0) {
  370. dev_err(&slave->dev, "Program device_num failed: %d", ret);
  371. return ret;
  372. }
  373. /* After xfer of msg, restore dev_num */
  374. slave->dev_num = dev_num;
  375. return 0;
  376. }
  377. void sdw_extract_slave_id(struct sdw_bus *bus,
  378. u64 addr, struct sdw_slave_id *id)
  379. {
  380. dev_dbg(bus->dev, "SDW Slave Addr: %llx", addr);
  381. /*
  382. * Spec definition
  383. * Register Bit Contents
  384. * DevId_0 [7:4] 47:44 sdw_version
  385. * DevId_0 [3:0] 43:40 unique_id
  386. * DevId_1 39:32 mfg_id [15:8]
  387. * DevId_2 31:24 mfg_id [7:0]
  388. * DevId_3 23:16 part_id [15:8]
  389. * DevId_4 15:08 part_id [7:0]
  390. * DevId_5 07:00 class_id
  391. */
  392. id->sdw_version = (addr >> 44) & GENMASK(3, 0);
  393. id->unique_id = (addr >> 40) & GENMASK(3, 0);
  394. id->mfg_id = (addr >> 24) & GENMASK(15, 0);
  395. id->part_id = (addr >> 8) & GENMASK(15, 0);
  396. id->class_id = addr & GENMASK(7, 0);
  397. dev_dbg(bus->dev,
  398. "SDW Slave class_id %x, part_id %x, mfg_id %x, unique_id %x, version %x",
  399. id->class_id, id->part_id, id->mfg_id,
  400. id->unique_id, id->sdw_version);
  401. }
  402. static int sdw_program_device_num(struct sdw_bus *bus)
  403. {
  404. u8 buf[SDW_NUM_DEV_ID_REGISTERS] = {0};
  405. struct sdw_slave *slave, *_s;
  406. struct sdw_slave_id id;
  407. struct sdw_msg msg;
  408. bool found = false;
  409. int count = 0, ret;
  410. u64 addr;
  411. /* No Slave, so use raw xfer api */
  412. ret = sdw_fill_msg(&msg, NULL, SDW_SCP_DEVID_0,
  413. SDW_NUM_DEV_ID_REGISTERS, 0, SDW_MSG_FLAG_READ, buf);
  414. if (ret < 0)
  415. return ret;
  416. do {
  417. ret = sdw_transfer(bus, &msg);
  418. if (ret == -ENODATA) { /* end of device id reads */
  419. ret = 0;
  420. break;
  421. }
  422. if (ret < 0) {
  423. dev_err(bus->dev, "DEVID read fail:%d\n", ret);
  424. break;
  425. }
  426. /*
  427. * Construct the addr and extract. Cast the higher shift
  428. * bits to avoid truncation due to size limit.
  429. */
  430. addr = buf[5] | (buf[4] << 8) | (buf[3] << 16) |
  431. ((u64)buf[2] << 24) | ((u64)buf[1] << 32) |
  432. ((u64)buf[0] << 40);
  433. sdw_extract_slave_id(bus, addr, &id);
  434. /* Now compare with entries */
  435. list_for_each_entry_safe(slave, _s, &bus->slaves, node) {
  436. if (sdw_compare_devid(slave, id) == 0) {
  437. found = true;
  438. /*
  439. * Assign a new dev_num to this Slave and
  440. * not mark it present. It will be marked
  441. * present after it reports ATTACHED on new
  442. * dev_num
  443. */
  444. ret = sdw_assign_device_num(slave);
  445. if (ret) {
  446. dev_err(slave->bus->dev,
  447. "Assign dev_num failed:%d",
  448. ret);
  449. return ret;
  450. }
  451. break;
  452. }
  453. }
  454. if (found == false) {
  455. /* TODO: Park this device in Group 13 */
  456. dev_err(bus->dev, "Slave Entry not found");
  457. }
  458. count++;
  459. /*
  460. * Check till error out or retry (count) exhausts.
  461. * Device can drop off and rejoin during enumeration
  462. * so count till twice the bound.
  463. */
  464. } while (ret == 0 && count < (SDW_MAX_DEVICES * 2));
  465. return ret;
  466. }
  467. static void sdw_modify_slave_status(struct sdw_slave *slave,
  468. enum sdw_slave_status status)
  469. {
  470. mutex_lock(&slave->bus->bus_lock);
  471. slave->status = status;
  472. mutex_unlock(&slave->bus->bus_lock);
  473. }
  474. static int sdw_initialize_slave(struct sdw_slave *slave)
  475. {
  476. struct sdw_slave_prop *prop = &slave->prop;
  477. int ret;
  478. u8 val;
  479. /*
  480. * Set bus clash, parity and SCP implementation
  481. * defined interrupt mask
  482. * TODO: Read implementation defined interrupt mask
  483. * from Slave property
  484. */
  485. val = SDW_SCP_INT1_IMPL_DEF | SDW_SCP_INT1_BUS_CLASH |
  486. SDW_SCP_INT1_PARITY;
  487. /* Enable SCP interrupts */
  488. ret = sdw_update(slave, SDW_SCP_INTMASK1, val, val);
  489. if (ret < 0) {
  490. dev_err(slave->bus->dev,
  491. "SDW_SCP_INTMASK1 write failed:%d", ret);
  492. return ret;
  493. }
  494. /* No need to continue if DP0 is not present */
  495. if (!slave->prop.dp0_prop)
  496. return 0;
  497. /* Enable DP0 interrupts */
  498. val = prop->dp0_prop->device_interrupts;
  499. val |= SDW_DP0_INT_PORT_READY | SDW_DP0_INT_BRA_FAILURE;
  500. ret = sdw_update(slave, SDW_DP0_INTMASK, val, val);
  501. if (ret < 0) {
  502. dev_err(slave->bus->dev,
  503. "SDW_DP0_INTMASK read failed:%d", ret);
  504. return val;
  505. }
  506. return 0;
  507. }
  508. static int sdw_handle_dp0_interrupt(struct sdw_slave *slave, u8 *slave_status)
  509. {
  510. u8 clear = 0, impl_int_mask;
  511. int status, status2, ret, count = 0;
  512. status = sdw_read(slave, SDW_DP0_INT);
  513. if (status < 0) {
  514. dev_err(slave->bus->dev,
  515. "SDW_DP0_INT read failed:%d", status);
  516. return status;
  517. }
  518. do {
  519. if (status & SDW_DP0_INT_TEST_FAIL) {
  520. dev_err(&slave->dev, "Test fail for port 0");
  521. clear |= SDW_DP0_INT_TEST_FAIL;
  522. }
  523. /*
  524. * Assumption: PORT_READY interrupt will be received only for
  525. * ports implementing Channel Prepare state machine (CP_SM)
  526. */
  527. if (status & SDW_DP0_INT_PORT_READY) {
  528. complete(&slave->port_ready[0]);
  529. clear |= SDW_DP0_INT_PORT_READY;
  530. }
  531. if (status & SDW_DP0_INT_BRA_FAILURE) {
  532. dev_err(&slave->dev, "BRA failed");
  533. clear |= SDW_DP0_INT_BRA_FAILURE;
  534. }
  535. impl_int_mask = SDW_DP0_INT_IMPDEF1 |
  536. SDW_DP0_INT_IMPDEF2 | SDW_DP0_INT_IMPDEF3;
  537. if (status & impl_int_mask) {
  538. clear |= impl_int_mask;
  539. *slave_status = clear;
  540. }
  541. /* clear the interrupt */
  542. ret = sdw_write(slave, SDW_DP0_INT, clear);
  543. if (ret < 0) {
  544. dev_err(slave->bus->dev,
  545. "SDW_DP0_INT write failed:%d", ret);
  546. return ret;
  547. }
  548. /* Read DP0 interrupt again */
  549. status2 = sdw_read(slave, SDW_DP0_INT);
  550. if (status2 < 0) {
  551. dev_err(slave->bus->dev,
  552. "SDW_DP0_INT read failed:%d", status2);
  553. return status2;
  554. }
  555. status &= status2;
  556. count++;
  557. /* we can get alerts while processing so keep retrying */
  558. } while (status != 0 && count < SDW_READ_INTR_CLEAR_RETRY);
  559. if (count == SDW_READ_INTR_CLEAR_RETRY)
  560. dev_warn(slave->bus->dev, "Reached MAX_RETRY on DP0 read");
  561. return ret;
  562. }
  563. static int sdw_handle_port_interrupt(struct sdw_slave *slave,
  564. int port, u8 *slave_status)
  565. {
  566. u8 clear = 0, impl_int_mask;
  567. int status, status2, ret, count = 0;
  568. u32 addr;
  569. if (port == 0)
  570. return sdw_handle_dp0_interrupt(slave, slave_status);
  571. addr = SDW_DPN_INT(port);
  572. status = sdw_read(slave, addr);
  573. if (status < 0) {
  574. dev_err(slave->bus->dev,
  575. "SDW_DPN_INT read failed:%d", status);
  576. return status;
  577. }
  578. do {
  579. if (status & SDW_DPN_INT_TEST_FAIL) {
  580. dev_err(&slave->dev, "Test fail for port:%d", port);
  581. clear |= SDW_DPN_INT_TEST_FAIL;
  582. }
  583. /*
  584. * Assumption: PORT_READY interrupt will be received only
  585. * for ports implementing CP_SM.
  586. */
  587. if (status & SDW_DPN_INT_PORT_READY) {
  588. complete(&slave->port_ready[port]);
  589. clear |= SDW_DPN_INT_PORT_READY;
  590. }
  591. impl_int_mask = SDW_DPN_INT_IMPDEF1 |
  592. SDW_DPN_INT_IMPDEF2 | SDW_DPN_INT_IMPDEF3;
  593. if (status & impl_int_mask) {
  594. clear |= impl_int_mask;
  595. *slave_status = clear;
  596. }
  597. /* clear the interrupt */
  598. ret = sdw_write(slave, addr, clear);
  599. if (ret < 0) {
  600. dev_err(slave->bus->dev,
  601. "SDW_DPN_INT write failed:%d", ret);
  602. return ret;
  603. }
  604. /* Read DPN interrupt again */
  605. status2 = sdw_read(slave, addr);
  606. if (status2 < 0) {
  607. dev_err(slave->bus->dev,
  608. "SDW_DPN_INT read failed:%d", status2);
  609. return status2;
  610. }
  611. status &= status2;
  612. count++;
  613. /* we can get alerts while processing so keep retrying */
  614. } while (status != 0 && count < SDW_READ_INTR_CLEAR_RETRY);
  615. if (count == SDW_READ_INTR_CLEAR_RETRY)
  616. dev_warn(slave->bus->dev, "Reached MAX_RETRY on port read");
  617. return ret;
  618. }
  619. static int sdw_handle_slave_alerts(struct sdw_slave *slave)
  620. {
  621. struct sdw_slave_intr_status slave_intr;
  622. u8 clear = 0, bit, port_status[15];
  623. int port_num, stat, ret, count = 0;
  624. unsigned long port;
  625. bool slave_notify = false;
  626. u8 buf, buf2[2], _buf, _buf2[2];
  627. sdw_modify_slave_status(slave, SDW_SLAVE_ALERT);
  628. /* Read Instat 1, Instat 2 and Instat 3 registers */
  629. buf = ret = sdw_read(slave, SDW_SCP_INT1);
  630. if (ret < 0) {
  631. dev_err(slave->bus->dev,
  632. "SDW_SCP_INT1 read failed:%d", ret);
  633. return ret;
  634. }
  635. ret = sdw_nread(slave, SDW_SCP_INTSTAT2, 2, buf2);
  636. if (ret < 0) {
  637. dev_err(slave->bus->dev,
  638. "SDW_SCP_INT2/3 read failed:%d", ret);
  639. return ret;
  640. }
  641. do {
  642. /*
  643. * Check parity, bus clash and Slave (impl defined)
  644. * interrupt
  645. */
  646. if (buf & SDW_SCP_INT1_PARITY) {
  647. dev_err(&slave->dev, "Parity error detected");
  648. clear |= SDW_SCP_INT1_PARITY;
  649. }
  650. if (buf & SDW_SCP_INT1_BUS_CLASH) {
  651. dev_err(&slave->dev, "Bus clash error detected");
  652. clear |= SDW_SCP_INT1_BUS_CLASH;
  653. }
  654. /*
  655. * When bus clash or parity errors are detected, such errors
  656. * are unlikely to be recoverable errors.
  657. * TODO: In such scenario, reset bus. Make this configurable
  658. * via sysfs property with bus reset being the default.
  659. */
  660. if (buf & SDW_SCP_INT1_IMPL_DEF) {
  661. dev_dbg(&slave->dev, "Slave impl defined interrupt\n");
  662. clear |= SDW_SCP_INT1_IMPL_DEF;
  663. slave_notify = true;
  664. }
  665. /* Check port 0 - 3 interrupts */
  666. port = buf & SDW_SCP_INT1_PORT0_3;
  667. /* To get port number corresponding to bits, shift it */
  668. port = port >> SDW_REG_SHIFT(SDW_SCP_INT1_PORT0_3);
  669. for_each_set_bit(bit, &port, 8) {
  670. sdw_handle_port_interrupt(slave, bit,
  671. &port_status[bit]);
  672. }
  673. /* Check if cascade 2 interrupt is present */
  674. if (buf & SDW_SCP_INT1_SCP2_CASCADE) {
  675. port = buf2[0] & SDW_SCP_INTSTAT2_PORT4_10;
  676. for_each_set_bit(bit, &port, 8) {
  677. /* scp2 ports start from 4 */
  678. port_num = bit + 3;
  679. sdw_handle_port_interrupt(slave,
  680. port_num,
  681. &port_status[port_num]);
  682. }
  683. }
  684. /* now check last cascade */
  685. if (buf2[0] & SDW_SCP_INTSTAT2_SCP3_CASCADE) {
  686. port = buf2[1] & SDW_SCP_INTSTAT3_PORT11_14;
  687. for_each_set_bit(bit, &port, 8) {
  688. /* scp3 ports start from 11 */
  689. port_num = bit + 10;
  690. sdw_handle_port_interrupt(slave,
  691. port_num,
  692. &port_status[port_num]);
  693. }
  694. }
  695. /* Update the Slave driver */
  696. if (slave_notify && (slave->ops) &&
  697. (slave->ops->interrupt_callback)) {
  698. slave_intr.control_port = clear;
  699. memcpy(slave_intr.port, &port_status,
  700. sizeof(slave_intr.port));
  701. slave->ops->interrupt_callback(slave, &slave_intr);
  702. }
  703. /* Ack interrupt */
  704. ret = sdw_write(slave, SDW_SCP_INT1, clear);
  705. if (ret < 0) {
  706. dev_err(slave->bus->dev,
  707. "SDW_SCP_INT1 write failed:%d", ret);
  708. return ret;
  709. }
  710. /*
  711. * Read status again to ensure no new interrupts arrived
  712. * while servicing interrupts.
  713. */
  714. _buf = ret = sdw_read(slave, SDW_SCP_INT1);
  715. if (ret < 0) {
  716. dev_err(slave->bus->dev,
  717. "SDW_SCP_INT1 read failed:%d", ret);
  718. return ret;
  719. }
  720. ret = sdw_nread(slave, SDW_SCP_INTSTAT2, 2, _buf2);
  721. if (ret < 0) {
  722. dev_err(slave->bus->dev,
  723. "SDW_SCP_INT2/3 read failed:%d", ret);
  724. return ret;
  725. }
  726. /* Make sure no interrupts are pending */
  727. buf &= _buf;
  728. buf2[0] &= _buf2[0];
  729. buf2[1] &= _buf2[1];
  730. stat = buf || buf2[0] || buf2[1];
  731. /*
  732. * Exit loop if Slave is continuously in ALERT state even
  733. * after servicing the interrupt multiple times.
  734. */
  735. count++;
  736. /* we can get alerts while processing so keep retrying */
  737. } while (stat != 0 && count < SDW_READ_INTR_CLEAR_RETRY);
  738. if (count == SDW_READ_INTR_CLEAR_RETRY)
  739. dev_warn(slave->bus->dev, "Reached MAX_RETRY on alert read");
  740. return ret;
  741. }
  742. static int sdw_update_slave_status(struct sdw_slave *slave,
  743. enum sdw_slave_status status)
  744. {
  745. if ((slave->ops) && (slave->ops->update_status))
  746. return slave->ops->update_status(slave, status);
  747. return 0;
  748. }
  749. /**
  750. * sdw_handle_slave_status() - Handle Slave status
  751. * @bus: SDW bus instance
  752. * @status: Status for all Slave(s)
  753. */
  754. int sdw_handle_slave_status(struct sdw_bus *bus,
  755. enum sdw_slave_status status[])
  756. {
  757. enum sdw_slave_status prev_status;
  758. struct sdw_slave *slave;
  759. int i, ret = 0;
  760. if (status[0] == SDW_SLAVE_ATTACHED) {
  761. ret = sdw_program_device_num(bus);
  762. if (ret)
  763. dev_err(bus->dev, "Slave attach failed: %d", ret);
  764. }
  765. /* Continue to check other slave statuses */
  766. for (i = 1; i <= SDW_MAX_DEVICES; i++) {
  767. mutex_lock(&bus->bus_lock);
  768. if (test_bit(i, bus->assigned) == false) {
  769. mutex_unlock(&bus->bus_lock);
  770. continue;
  771. }
  772. mutex_unlock(&bus->bus_lock);
  773. slave = sdw_get_slave(bus, i);
  774. if (!slave)
  775. continue;
  776. switch (status[i]) {
  777. case SDW_SLAVE_UNATTACHED:
  778. if (slave->status == SDW_SLAVE_UNATTACHED)
  779. break;
  780. sdw_modify_slave_status(slave, SDW_SLAVE_UNATTACHED);
  781. break;
  782. case SDW_SLAVE_ALERT:
  783. ret = sdw_handle_slave_alerts(slave);
  784. if (ret)
  785. dev_err(bus->dev,
  786. "Slave %d alert handling failed: %d",
  787. i, ret);
  788. break;
  789. case SDW_SLAVE_ATTACHED:
  790. if (slave->status == SDW_SLAVE_ATTACHED)
  791. break;
  792. prev_status = slave->status;
  793. sdw_modify_slave_status(slave, SDW_SLAVE_ATTACHED);
  794. if (prev_status == SDW_SLAVE_ALERT)
  795. break;
  796. ret = sdw_initialize_slave(slave);
  797. if (ret)
  798. dev_err(bus->dev,
  799. "Slave %d initialization failed: %d",
  800. i, ret);
  801. break;
  802. default:
  803. dev_err(bus->dev, "Invalid slave %d status:%d",
  804. i, status[i]);
  805. break;
  806. }
  807. ret = sdw_update_slave_status(slave, status[i]);
  808. if (ret)
  809. dev_err(slave->bus->dev,
  810. "Update Slave status failed:%d", ret);
  811. }
  812. return ret;
  813. }
  814. EXPORT_SYMBOL(sdw_handle_slave_status);