host.c (38103B)
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * HMS Anybus-S Host Driver 4 * 5 * Copyright (C) 2018 Arcx Inc 6 */ 7 8/* 9 * Architecture Overview 10 * ===================== 11 * This driver (running on the CPU/SoC) and the Anybus-S card communicate 12 * by reading and writing data to/from the Anybus-S Dual-Port RAM (dpram). 13 * This is memory connected to both the SoC and Anybus-S card, which both sides 14 * can access freely and concurrently. 15 * 16 * Synchronization happens by means of two registers located in the dpram: 17 * IND_AB: written exclusively by the Anybus card; and 18 * IND_AP: written exclusively by this driver. 19 * 20 * Communication happens using one of the following mechanisms: 21 * 1. reserve, read/write, release dpram memory areas: 22 * using an IND_AB/IND_AP protocol, the driver is able to reserve certain 23 * memory areas. no dpram memory can be read or written except if reserved. 24 * (with a few limited exceptions) 25 * 2. send and receive data structures via a shared mailbox: 26 * using an IND_AB/IND_AP protocol, the driver and Anybus card are able to 27 * exchange commands and responses using a shared mailbox. 28 * 3. receive software interrupts: 29 * using an IND_AB/IND_AP protocol, the Anybus card is able to notify the 30 * driver of certain events such as: bus online/offline, data available. 31 * note that software interrupt event bits are located in a memory area 32 * which must be reserved before it can be accessed. 33 * 34 * The manual[1] is silent on whether these mechanisms can happen concurrently, 35 * or how they should be synchronized. However, section 13 (Driver Example) 36 * provides the following suggestion for developing a driver: 37 * a) an interrupt handler which updates global variables; 38 * b) a continuously-running task handling area requests (1 above) 39 * c) a continuously-running task handling mailbox requests (2 above) 40 * The example conspicuously leaves out software interrupts (3 above), which 41 * is the thorniest issue to get right (see below). 42 * 43 * The naive, straightforward way to implement this would be: 44 * - create an isr which updates shared variables; 45 * - create a work_struct which handles software interrupts on a queue; 46 * - create a function which does reserve/update/unlock in a loop; 47 * - create a function which does mailbox send/receive in a loop; 48 * - call the above functions from the driver's read/write/ioctl; 49 * - synchronize using mutexes/spinlocks: 50 * + only one area request at a time 51 * + only one mailbox request at a time 52 * + protect AB_IND, AB_IND against data hazards (e.g. read-after-write) 53 * 54 * Unfortunately, the presence of the software interrupt causes subtle yet 55 * considerable synchronization issues; especially problematic is the 56 * requirement to reserve/release the area which contains the status bits. 57 * 58 * The driver architecture presented here sidesteps these synchronization issues 59 * by accessing the dpram from a single kernel thread only. User-space throws 60 * "tasks" (i.e. 1, 2 above) into a task queue, waits for their completion, 61 * and the kernel thread runs them to completion. 62 * 63 * Each task has a task_function, which is called/run by the queue thread. 64 * That function communicates with the Anybus card, and returns either 65 * 0 (OK), a negative error code (error), or -EINPROGRESS (waiting). 66 * On OK or error, the queue thread completes and dequeues the task, 67 * which also releases the user space thread which may still be waiting for it. 68 * On -EINPROGRESS (waiting), the queue thread will leave the task on the queue, 69 * and revisit (call again) whenever an interrupt event comes in. 70 * 71 * Each task has a state machine, which is run by calling its task_function. 72 * It ensures that the task will go through its various stages over time, 73 * returning -EINPROGRESS if it wants to wait for an event to happen. 74 * 75 * Note that according to the manual's driver example, the following operations 76 * may run independent of each other: 77 * - area reserve/read/write/release (point 1 above) 78 * - mailbox operations (point 2 above) 79 * - switching power on/off 80 * 81 * To allow them to run independently, each operation class gets its own queue. 82 * 83 * Userspace processes A, B, C, D post tasks to the appropriate queue, 84 * and wait for task completion: 85 * 86 * process A B C D 87 * | | | | 88 * v v v v 89 * |<----- ======================================== 90 * | | | | 91 * | v v v-------<-------+ 92 * | +--------------------------------------+ | 93 * | | power q | mbox q | area q | | 94 * | |------------|------------|------------| | 95 * | | task | task | task | | 96 * | | task | task | task | | 97 * | | task wait | task wait | task wait | | 98 * | +--------------------------------------+ | 99 * | ^ ^ ^ | 100 * | | | | ^ 101 * | +--------------------------------------+ | 102 * | | queue thread | | 103 * | |--------------------------------------| | 104 * | | single-threaded: | | 105 * | | loop: | | 106 * v | for each queue: | | 107 * | | run task state machine | | 108 * | | if task waiting: | | 109 * | | leave on queue | | 110 * | | if task done: | | 111 * | | complete task, remove from q | | 112 * | | if software irq event bits set: | | 113 * | | notify userspace | | 114 * | | post clear event bits task------>|>-------+ 115 * | | wait for IND_AB changed event OR | 116 * | | task added event OR | 117 * | | timeout | 118 * | | end loop | 119 * | +--------------------------------------+ 120 * | + wake up + 121 * | +--------------------------------------+ 122 * | ^ ^ 123 * | | | 124 * +-------->------- | 125 * | 126 * +--------------------------------------+ 127 * | interrupt service routine | 128 * |--------------------------------------| 129 * | wake up queue thread on IND_AB change| 130 * +--------------------------------------+ 131 * 132 * Note that the Anybus interrupt is dual-purpose: 133 * - after a reset, triggered when the card becomes ready; 134 * - during normal operation, triggered when AB_IND changes. 135 * This is why the interrupt service routine doesn't just wake up the 136 * queue thread, but also completes the card_boot completion. 137 * 138 * [1] https://www.anybus.com/docs/librariesprovider7/default-document-library/ 139 * manuals-design-guides/hms-hmsi-27-275.pdf 140 */ 141 142#include <linux/kernel.h> 143#include <linux/module.h> 144#include <linux/init.h> 145#include <linux/slab.h> 146#include <linux/interrupt.h> 147#include <linux/atomic.h> 148#include <linux/kthread.h> 149#include <linux/kfifo.h> 150#include <linux/spinlock.h> 151#include <linux/uaccess.h> 152#include <linux/regmap.h> 153#include <linux/of.h> 154#include <linux/random.h> 155#include <linux/kref.h> 156#include <linux/of_address.h> 157 158/* move to <linux/anybuss-*.h> when taking this out of staging */ 159#include "anybuss-client.h" 160#include "anybuss-controller.h" 161 162#define DPRAM_SIZE 0x800 163#define MAX_MBOX_MSG_SZ 0x0FF 164#define TIMEOUT (HZ * 2) 165#define MAX_DATA_AREA_SZ 0x200 166#define MAX_FBCTRL_AREA_SZ 0x1BE 167 168#define REG_BOOTLOADER_V 0x7C0 169#define REG_API_V 0x7C2 170#define REG_FIELDBUS_V 0x7C4 171#define REG_SERIAL_NO 0x7C6 172#define REG_FIELDBUS_TYPE 0x7CC 173#define REG_MODULE_SW_V 0x7CE 174#define REG_IND_AB 0x7FF 175#define REG_IND_AP 0x7FE 176#define REG_EVENT_CAUSE 0x7ED 177#define MBOX_IN_AREA 0x400 178#define MBOX_OUT_AREA 0x520 179#define DATA_IN_AREA 0x000 180#define DATA_OUT_AREA 0x200 181#define FBCTRL_AREA 0x640 182 183#define EVENT_CAUSE_DC 0x01 184#define EVENT_CAUSE_FBOF 0x02 185#define EVENT_CAUSE_FBON 0x04 186 187#define IND_AB_UPDATED 0x08 188#define IND_AX_MIN 0x80 189#define IND_AX_MOUT 0x40 190#define IND_AX_IN 0x04 191#define IND_AX_OUT 0x02 192#define IND_AX_FBCTRL 0x01 193#define IND_AP_LOCK 0x08 194#define IND_AP_ACTION 0x10 195#define IND_AX_EVNT 0x20 196#define IND_AP_ABITS (IND_AX_IN | IND_AX_OUT | \ 197 IND_AX_FBCTRL | \ 198 IND_AP_ACTION | IND_AP_LOCK) 199 200#define INFO_TYPE_FB 0x0002 201#define INFO_TYPE_APP 0x0001 202#define INFO_COMMAND 0x4000 203 204#define OP_MODE_FBFC 0x0002 205#define OP_MODE_FBS 0x0004 206#define OP_MODE_CD 0x0200 207 208#define CMD_START_INIT 0x0001 209#define CMD_ANYBUS_INIT 0x0002 210#define CMD_END_INIT 0x0003 211 212/* 213 * --------------------------------------------------------------- 214 * Anybus mailbox messages - definitions 215 * --------------------------------------------------------------- 216 * note that we're depending on the layout of these structures being 217 * exactly as advertised. 218 */ 219 220struct anybus_mbox_hdr { 221 __be16 id; 222 __be16 info; 223 __be16 cmd_num; 224 __be16 data_size; 225 __be16 frame_count; 226 __be16 frame_num; 227 __be16 offset_high; 228 __be16 offset_low; 229 __be16 extended[8]; 230}; 231 232struct msg_anybus_init { 233 __be16 input_io_len; 234 __be16 input_dpram_len; 235 __be16 input_total_len; 236 __be16 output_io_len; 237 __be16 output_dpram_len; 238 __be16 output_total_len; 239 __be16 op_mode; 240 __be16 notif_config; 241 __be16 wd_val; 242}; 243 244/* ------------- ref counted tasks ------------- */ 245 246struct ab_task; 247typedef int (*ab_task_fn_t)(struct anybuss_host *cd, 248 struct ab_task *t); 249typedef void (*ab_done_fn_t)(struct anybuss_host *cd); 250 251struct area_priv { 252 bool is_write; 253 u16 flags; 254 u16 addr; 255 size_t count; 256 u8 buf[MAX_DATA_AREA_SZ]; 257}; 258 259struct mbox_priv { 260 struct anybus_mbox_hdr hdr; 261 size_t msg_out_sz; 262 size_t msg_in_sz; 263 u8 msg[MAX_MBOX_MSG_SZ]; 264}; 265 266struct ab_task { 267 struct kmem_cache *cache; 268 struct kref refcount; 269 ab_task_fn_t task_fn; 270 ab_done_fn_t done_fn; 271 int result; 272 struct completion done; 273 unsigned long start_jiffies; 274 union { 275 struct area_priv area_pd; 276 struct mbox_priv mbox_pd; 277 }; 278}; 279 280static struct ab_task *ab_task_create_get(struct kmem_cache *cache, 281 ab_task_fn_t task_fn) 282{ 283 struct ab_task *t; 284 285 t = kmem_cache_alloc(cache, GFP_KERNEL); 286 if (!t) 287 return NULL; 288 t->cache = cache; 289 kref_init(&t->refcount); 290 t->task_fn = task_fn; 291 t->done_fn = NULL; 292 t->result = 0; 293 init_completion(&t->done); 294 return t; 295} 296 297static void __ab_task_destroy(struct kref *refcount) 298{ 299 struct ab_task *t = container_of(refcount, struct ab_task, refcount); 300 struct kmem_cache *cache = t->cache; 301 302 kmem_cache_free(cache, t); 303} 304 305static void ab_task_put(struct ab_task *t) 306{ 307 kref_put(&t->refcount, __ab_task_destroy); 308} 309 310static struct ab_task *__ab_task_get(struct ab_task *t) 311{ 312 kref_get(&t->refcount); 313 return t; 314} 315 316static void __ab_task_finish(struct ab_task *t, struct anybuss_host *cd) 317{ 318 if (t->done_fn) 319 t->done_fn(cd); 320 complete(&t->done); 321} 322 323static void 324ab_task_dequeue_finish_put(struct kfifo *q, struct anybuss_host *cd) 325{ 326 int ret; 327 struct ab_task *t; 328 329 ret = kfifo_out(q, &t, sizeof(t)); 330 WARN_ON(!ret); 331 __ab_task_finish(t, cd); 332 ab_task_put(t); 333} 334 335static int 336ab_task_enqueue(struct ab_task *t, struct kfifo *q, spinlock_t *slock, 337 wait_queue_head_t *wq) 338{ 339 int ret; 340 341 t->start_jiffies = jiffies; 342 __ab_task_get(t); 343 ret = kfifo_in_spinlocked(q, &t, sizeof(t), slock); 344 if (!ret) { 345 ab_task_put(t); 346 return -ENOMEM; 347 } 348 wake_up(wq); 349 return 0; 350} 351 352static int 353ab_task_enqueue_wait(struct ab_task *t, struct kfifo *q, spinlock_t *slock, 354 wait_queue_head_t *wq) 355{ 356 int ret; 357 358 ret = ab_task_enqueue(t, q, slock, wq); 359 if (ret) 360 return ret; 361 ret = wait_for_completion_interruptible(&t->done); 362 if (ret) 363 return ret; 364 return t->result; 365} 366 367/* ------------------------ anybus hardware ------------------------ */ 368 369struct anybuss_host { 370 struct device *dev; 371 struct anybuss_client *client; 372 void (*reset)(struct device *dev, bool assert); 373 struct regmap *regmap; 374 int irq; 375 int host_idx; 376 struct task_struct *qthread; 377 wait_queue_head_t wq; 378 struct completion card_boot; 379 atomic_t ind_ab; 380 spinlock_t qlock; /* protects IN side of powerq, mboxq, areaq */ 381 struct kmem_cache *qcache; 382 struct kfifo qs[3]; 383 struct kfifo *powerq; 384 struct kfifo *mboxq; 385 struct kfifo *areaq; 386 bool power_on; 387 bool softint_pending; 388}; 389 390static void reset_assert(struct anybuss_host *cd) 391{ 392 cd->reset(cd->dev, true); 393} 394 395static void reset_deassert(struct anybuss_host *cd) 396{ 397 cd->reset(cd->dev, false); 398} 399 400static int test_dpram(struct regmap *regmap) 401{ 402 int i; 403 unsigned int val; 404 405 for (i = 0; i < DPRAM_SIZE; i++) 406 regmap_write(regmap, i, (u8)i); 407 for (i = 0; i < DPRAM_SIZE; i++) { 408 regmap_read(regmap, i, &val); 409 if ((u8)val != (u8)i) 410 return -EIO; 411 } 412 return 0; 413} 414 415static int read_ind_ab(struct regmap *regmap) 416{ 417 unsigned long timeout = jiffies + HZ / 2; 418 unsigned int a, b, i = 0; 419 420 while (time_before_eq(jiffies, timeout)) { 421 regmap_read(regmap, REG_IND_AB, &a); 422 regmap_read(regmap, REG_IND_AB, &b); 423 if (likely(a == b)) 424 return (int)a; 425 if (i < 10) { 426 cpu_relax(); 427 i++; 428 } else { 429 usleep_range(500, 1000); 430 } 431 } 432 WARN(1, "IND_AB register not stable"); 433 return -ETIMEDOUT; 434} 435 436static int write_ind_ap(struct regmap *regmap, unsigned int ind_ap) 437{ 438 unsigned long timeout = jiffies + HZ / 2; 439 unsigned int v, i = 0; 440 441 while (time_before_eq(jiffies, timeout)) { 442 regmap_write(regmap, REG_IND_AP, ind_ap); 443 regmap_read(regmap, REG_IND_AP, &v); 444 if (likely(ind_ap == v)) 445 return 0; 446 if (i < 10) { 447 cpu_relax(); 448 i++; 449 } else { 450 usleep_range(500, 1000); 451 } 452 } 453 WARN(1, "IND_AP register not stable"); 454 return -ETIMEDOUT; 455} 456 457static irqreturn_t irq_handler(int irq, void *data) 458{ 459 struct anybuss_host *cd = data; 460 int ind_ab; 461 462 /* 463 * irq handler needs exclusive access to the IND_AB register, 464 * because the act of reading the register acks the interrupt. 465 * 466 * store the register value in cd->ind_ab (an atomic_t), so that the 467 * queue thread is able to read it without causing an interrupt ack 468 * side-effect (and without spuriously acking an interrupt). 469 */ 470 ind_ab = read_ind_ab(cd->regmap); 471 if (ind_ab < 0) 472 return IRQ_NONE; 473 atomic_set(&cd->ind_ab, ind_ab); 474 complete(&cd->card_boot); 475 wake_up(&cd->wq); 476 return IRQ_HANDLED; 477} 478 479/* ------------------------ power on/off tasks --------------------- */ 480 481static int task_fn_power_off(struct anybuss_host *cd, 482 struct ab_task *t) 483{ 484 struct anybuss_client *client = cd->client; 485 486 if (!cd->power_on) 487 return 0; 488 disable_irq(cd->irq); 489 reset_assert(cd); 490 atomic_set(&cd->ind_ab, IND_AB_UPDATED); 491 if (client->on_online_changed) 492 client->on_online_changed(client, false); 493 cd->power_on = false; 494 return 0; 495} 496 497static int task_fn_power_on_2(struct anybuss_host *cd, 498 struct ab_task *t) 499{ 500 if (completion_done(&cd->card_boot)) { 501 cd->power_on = true; 502 return 0; 503 } 504 if (time_after(jiffies, t->start_jiffies + TIMEOUT)) { 505 disable_irq(cd->irq); 506 reset_assert(cd); 507 dev_err(cd->dev, "power on timed out"); 508 return -ETIMEDOUT; 509 } 510 return -EINPROGRESS; 511} 512 513static int task_fn_power_on(struct anybuss_host *cd, 514 struct ab_task *t) 515{ 516 unsigned int dummy; 517 518 if (cd->power_on) 519 return 0; 520 /* 521 * anybus docs: prevent false 'init done' interrupt by 522 * doing a dummy read of IND_AB register while in reset. 523 */ 524 regmap_read(cd->regmap, REG_IND_AB, &dummy); 525 reinit_completion(&cd->card_boot); 526 enable_irq(cd->irq); 527 reset_deassert(cd); 528 t->task_fn = task_fn_power_on_2; 529 return -EINPROGRESS; 530} 531 532int anybuss_set_power(struct anybuss_client *client, bool power_on) 533{ 534 struct anybuss_host *cd = client->host; 535 struct ab_task *t; 536 int err; 537 538 t = ab_task_create_get(cd->qcache, power_on ? 539 task_fn_power_on : task_fn_power_off); 540 if (!t) 541 return -ENOMEM; 542 err = ab_task_enqueue_wait(t, cd->powerq, &cd->qlock, &cd->wq); 543 ab_task_put(t); 544 return err; 545} 546EXPORT_SYMBOL_GPL(anybuss_set_power); 547 548/* ---------------------------- area tasks ------------------------ */ 549 550static int task_fn_area_3(struct anybuss_host *cd, struct ab_task *t) 551{ 552 struct area_priv *pd = &t->area_pd; 553 554 if (!cd->power_on) 555 return -EIO; 556 if (atomic_read(&cd->ind_ab) & pd->flags) { 557 /* area not released yet */ 558 if (time_after(jiffies, t->start_jiffies + TIMEOUT)) 559 return -ETIMEDOUT; 560 return -EINPROGRESS; 561 } 562 return 0; 563} 564 565static int task_fn_area_2(struct anybuss_host *cd, struct ab_task *t) 566{ 567 struct area_priv *pd = &t->area_pd; 568 unsigned int ind_ap; 569 int ret; 570 571 if (!cd->power_on) 572 return -EIO; 573 regmap_read(cd->regmap, REG_IND_AP, &ind_ap); 574 if (!(atomic_read(&cd->ind_ab) & pd->flags)) { 575 /* we don't own the area yet */ 576 if (time_after(jiffies, t->start_jiffies + TIMEOUT)) { 577 dev_warn(cd->dev, "timeout waiting for area"); 578 dump_stack(); 579 return -ETIMEDOUT; 580 } 581 return -EINPROGRESS; 582 } 583 /* we own the area, do what we're here to do */ 584 if (pd->is_write) 585 regmap_bulk_write(cd->regmap, pd->addr, pd->buf, 586 pd->count); 587 else 588 regmap_bulk_read(cd->regmap, pd->addr, pd->buf, 589 pd->count); 590 /* ask to release the area, must use unlocked release */ 591 ind_ap &= ~IND_AP_ABITS; 592 ind_ap |= pd->flags; 593 ret = write_ind_ap(cd->regmap, ind_ap); 594 if (ret) 595 return ret; 596 t->task_fn = task_fn_area_3; 597 return -EINPROGRESS; 598} 599 600static int task_fn_area(struct anybuss_host *cd, struct ab_task *t) 601{ 602 struct area_priv *pd = &t->area_pd; 603 unsigned int ind_ap; 604 int ret; 605 606 if (!cd->power_on) 607 return -EIO; 608 regmap_read(cd->regmap, REG_IND_AP, &ind_ap); 609 /* ask to take the area */ 610 ind_ap &= ~IND_AP_ABITS; 611 ind_ap |= pd->flags | IND_AP_ACTION | IND_AP_LOCK; 612 ret = write_ind_ap(cd->regmap, ind_ap); 613 if (ret) 614 return ret; 615 t->task_fn = task_fn_area_2; 616 return -EINPROGRESS; 617} 618 619static struct ab_task * 620create_area_reader(struct kmem_cache *qcache, u16 flags, u16 addr, 621 size_t count) 622{ 623 struct ab_task *t; 624 struct area_priv *ap; 625 626 t = ab_task_create_get(qcache, task_fn_area); 627 if (!t) 628 return NULL; 629 ap = &t->area_pd; 630 ap->flags = flags; 631 ap->addr = addr; 632 ap->is_write = false; 633 ap->count = count; 634 return t; 635} 636 637static struct ab_task * 638create_area_writer(struct kmem_cache *qcache, u16 flags, u16 addr, 639 const void *buf, size_t count) 640{ 641 struct ab_task *t; 642 struct area_priv *ap; 643 644 t = ab_task_create_get(qcache, task_fn_area); 645 if (!t) 646 return NULL; 647 ap = &t->area_pd; 648 ap->flags = flags; 649 ap->addr = addr; 650 ap->is_write = true; 651 ap->count = count; 652 memcpy(ap->buf, buf, count); 653 return t; 654} 655 656static struct ab_task * 657create_area_user_writer(struct kmem_cache *qcache, u16 flags, u16 addr, 658 const void __user *buf, size_t count) 659{ 660 struct ab_task *t; 661 struct area_priv *ap; 662 663 t = ab_task_create_get(qcache, task_fn_area); 664 if (!t) 665 return ERR_PTR(-ENOMEM); 666 ap = &t->area_pd; 667 ap->flags = flags; 668 ap->addr = addr; 669 ap->is_write = true; 670 ap->count = count; 671 if (copy_from_user(ap->buf, buf, count)) { 672 ab_task_put(t); 673 return ERR_PTR(-EFAULT); 674 } 675 return t; 676} 677 678static bool area_range_ok(u16 addr, size_t count, u16 area_start, 679 size_t area_sz) 680{ 681 u16 area_end_ex = area_start + area_sz; 682 u16 addr_end_ex; 683 684 if (addr < area_start) 685 return false; 686 if (addr >= area_end_ex) 687 return false; 688 addr_end_ex = addr + count; 689 if (addr_end_ex > area_end_ex) 690 return false; 691 return true; 692} 693 694/* -------------------------- mailbox tasks ----------------------- */ 695 696static int task_fn_mbox_2(struct anybuss_host *cd, struct ab_task *t) 697{ 698 struct mbox_priv *pd = &t->mbox_pd; 699 unsigned int ind_ap; 700 701 if (!cd->power_on) 702 return -EIO; 703 regmap_read(cd->regmap, REG_IND_AP, &ind_ap); 704 if (((atomic_read(&cd->ind_ab) ^ ind_ap) & IND_AX_MOUT) == 0) { 705 /* output message not here */ 706 if (time_after(jiffies, t->start_jiffies + TIMEOUT)) 707 return -ETIMEDOUT; 708 return -EINPROGRESS; 709 } 710 /* grab the returned header and msg */ 711 regmap_bulk_read(cd->regmap, MBOX_OUT_AREA, &pd->hdr, 712 sizeof(pd->hdr)); 713 regmap_bulk_read(cd->regmap, MBOX_OUT_AREA + sizeof(pd->hdr), 714 pd->msg, pd->msg_in_sz); 715 /* tell anybus we've consumed the message */ 716 ind_ap ^= IND_AX_MOUT; 717 return write_ind_ap(cd->regmap, ind_ap); 718} 719 720static int task_fn_mbox(struct anybuss_host *cd, struct ab_task *t) 721{ 722 struct mbox_priv *pd = &t->mbox_pd; 723 unsigned int ind_ap; 724 int ret; 725 726 if (!cd->power_on) 727 return -EIO; 728 regmap_read(cd->regmap, REG_IND_AP, &ind_ap); 729 if ((atomic_read(&cd->ind_ab) ^ ind_ap) & IND_AX_MIN) { 730 /* mbox input area busy */ 731 if (time_after(jiffies, t->start_jiffies + TIMEOUT)) 732 return -ETIMEDOUT; 733 return -EINPROGRESS; 734 } 735 /* write the header and msg to input area */ 736 regmap_bulk_write(cd->regmap, MBOX_IN_AREA, &pd->hdr, 737 sizeof(pd->hdr)); 738 regmap_bulk_write(cd->regmap, MBOX_IN_AREA + sizeof(pd->hdr), 739 pd->msg, pd->msg_out_sz); 740 /* tell anybus we gave it a message */ 741 ind_ap ^= IND_AX_MIN; 742 ret = write_ind_ap(cd->regmap, ind_ap); 743 if (ret) 744 return ret; 745 t->start_jiffies = jiffies; 746 t->task_fn = task_fn_mbox_2; 747 return -EINPROGRESS; 748} 749 750static void log_invalid_other(struct device *dev, 751 struct anybus_mbox_hdr *hdr) 752{ 753 size_t ext_offs = ARRAY_SIZE(hdr->extended) - 1; 754 u16 code = be16_to_cpu(hdr->extended[ext_offs]); 755 756 dev_err(dev, " Invalid other: [0x%02X]", code); 757} 758 759static const char * const EMSGS[] = { 760 "Invalid Message ID", 761 "Invalid Message Type", 762 "Invalid Command", 763 "Invalid Data Size", 764 "Message Header Malformed (offset 008h)", 765 "Message Header Malformed (offset 00Ah)", 766 "Message Header Malformed (offset 00Ch - 00Dh)", 767 "Invalid Address", 768 "Invalid Response", 769 "Flash Config Error", 770}; 771 772static int mbox_cmd_err(struct device *dev, struct mbox_priv *mpriv) 773{ 774 int i; 775 u8 ecode; 776 struct anybus_mbox_hdr *hdr = &mpriv->hdr; 777 u16 info = be16_to_cpu(hdr->info); 778 u8 *phdr = (u8 *)hdr; 779 u8 *pmsg = mpriv->msg; 780 781 if (!(info & 0x8000)) 782 return 0; 783 ecode = (info >> 8) & 0x0F; 784 dev_err(dev, "mailbox command failed:"); 785 if (ecode == 0x0F) 786 log_invalid_other(dev, hdr); 787 else if (ecode < ARRAY_SIZE(EMSGS)) 788 dev_err(dev, " Error code: %s (0x%02X)", 789 EMSGS[ecode], ecode); 790 else 791 dev_err(dev, " Error code: 0x%02X\n", ecode); 792 dev_err(dev, "Failed command:"); 793 dev_err(dev, "Message Header:"); 794 for (i = 0; i < sizeof(mpriv->hdr); i += 2) 795 dev_err(dev, "%02X%02X", phdr[i], phdr[i + 1]); 796 dev_err(dev, "Message Data:"); 797 for (i = 0; i < mpriv->msg_in_sz; i += 2) 798 dev_err(dev, "%02X%02X", pmsg[i], pmsg[i + 1]); 799 dev_err(dev, "Stack dump:"); 800 dump_stack(); 801 return -EIO; 802} 803 804static int _anybus_mbox_cmd(struct anybuss_host *cd, 805 u16 cmd_num, bool is_fb_cmd, 806 const void *msg_out, size_t msg_out_sz, 807 void *msg_in, size_t msg_in_sz, 808 const void *ext, size_t ext_sz) 809{ 810 struct ab_task *t; 811 struct mbox_priv *pd; 812 struct anybus_mbox_hdr *h; 813 size_t msg_sz = max(msg_in_sz, msg_out_sz); 814 u16 info; 815 int err; 816 817 if (msg_sz > MAX_MBOX_MSG_SZ) 818 return -EINVAL; 819 if (ext && ext_sz > sizeof(h->extended)) 820 return -EINVAL; 821 t = ab_task_create_get(cd->qcache, task_fn_mbox); 822 if (!t) 823 return -ENOMEM; 824 pd = &t->mbox_pd; 825 h = &pd->hdr; 826 info = is_fb_cmd ? INFO_TYPE_FB : INFO_TYPE_APP; 827 /* 828 * prevent uninitialized memory in the header from being sent 829 * across the anybus 830 */ 831 memset(h, 0, sizeof(*h)); 832 h->info = cpu_to_be16(info | INFO_COMMAND); 833 h->cmd_num = cpu_to_be16(cmd_num); 834 h->data_size = cpu_to_be16(msg_out_sz); 835 h->frame_count = cpu_to_be16(1); 836 h->frame_num = cpu_to_be16(1); 837 h->offset_high = cpu_to_be16(0); 838 h->offset_low = cpu_to_be16(0); 839 if (ext) 840 memcpy(h->extended, ext, ext_sz); 841 memcpy(pd->msg, msg_out, msg_out_sz); 842 pd->msg_out_sz = msg_out_sz; 843 pd->msg_in_sz = msg_in_sz; 844 err = ab_task_enqueue_wait(t, cd->powerq, &cd->qlock, &cd->wq); 845 if (err) 846 goto out; 847 /* 848 * mailbox mechanism worked ok, but maybe the mbox response 849 * contains an error ? 850 */ 851 err = mbox_cmd_err(cd->dev, pd); 852 if (err) 853 goto out; 854 memcpy(msg_in, pd->msg, msg_in_sz); 855out: 856 ab_task_put(t); 857 return err; 858} 859 860/* ------------------------ anybus queues ------------------------ */ 861 862static void process_q(struct anybuss_host *cd, struct kfifo *q) 863{ 864 struct ab_task *t; 865 int ret; 866 867 ret = kfifo_out_peek(q, &t, sizeof(t)); 868 if (!ret) 869 return; 870 t->result = t->task_fn(cd, t); 871 if (t->result != -EINPROGRESS) 872 ab_task_dequeue_finish_put(q, cd); 873} 874 875static bool qs_have_work(struct kfifo *qs, size_t num) 876{ 877 size_t i; 878 struct ab_task *t; 879 int ret; 880 881 for (i = 0; i < num; i++, qs++) { 882 ret = kfifo_out_peek(qs, &t, sizeof(t)); 883 if (ret && (t->result != -EINPROGRESS)) 884 return true; 885 } 886 return false; 887} 888 889static void process_qs(struct anybuss_host *cd) 890{ 891 size_t i; 892 struct kfifo *qs = cd->qs; 893 size_t nqs = ARRAY_SIZE(cd->qs); 894 895 for (i = 0; i < nqs; i++, qs++) 896 process_q(cd, qs); 897} 898 899static void softint_ack(struct anybuss_host *cd) 900{ 901 unsigned int ind_ap; 902 903 cd->softint_pending = false; 904 if (!cd->power_on) 905 return; 906 regmap_read(cd->regmap, REG_IND_AP, &ind_ap); 907 ind_ap &= ~IND_AX_EVNT; 908 ind_ap |= atomic_read(&cd->ind_ab) & IND_AX_EVNT; 909 write_ind_ap(cd->regmap, ind_ap); 910} 911 912static void process_softint(struct anybuss_host *cd) 913{ 914 struct anybuss_client *client = cd->client; 915 static const u8 zero; 916 int ret; 917 unsigned int ind_ap, ev; 918 struct ab_task *t; 919 920 if (!cd->power_on) 921 return; 922 if (cd->softint_pending) 923 return; 924 regmap_read(cd->regmap, REG_IND_AP, &ind_ap); 925 if (!((atomic_read(&cd->ind_ab) ^ ind_ap) & IND_AX_EVNT)) 926 return; 927 /* process software interrupt */ 928 regmap_read(cd->regmap, REG_EVENT_CAUSE, &ev); 929 if (ev & EVENT_CAUSE_FBON) { 930 if (client->on_online_changed) 931 client->on_online_changed(client, true); 932 dev_dbg(cd->dev, "Fieldbus ON"); 933 } 934 if (ev & EVENT_CAUSE_FBOF) { 935 if (client->on_online_changed) 936 client->on_online_changed(client, false); 937 dev_dbg(cd->dev, "Fieldbus OFF"); 938 } 939 if (ev & EVENT_CAUSE_DC) { 940 if (client->on_area_updated) 941 client->on_area_updated(client); 942 dev_dbg(cd->dev, "Fieldbus data changed"); 943 } 944 /* 945 * reset the event cause bits. 946 * this must be done while owning the fbctrl area, so we'll 947 * enqueue a task to do that. 948 */ 949 t = create_area_writer(cd->qcache, IND_AX_FBCTRL, 950 REG_EVENT_CAUSE, &zero, sizeof(zero)); 951 if (!t) { 952 ret = -ENOMEM; 953 goto out; 954 } 955 t->done_fn = softint_ack; 956 ret = ab_task_enqueue(t, cd->powerq, &cd->qlock, &cd->wq); 957 ab_task_put(t); 958 cd->softint_pending = true; 959out: 960 WARN_ON(ret); 961 if (ret) 962 softint_ack(cd); 963} 964 965static int qthread_fn(void *data) 966{ 967 struct anybuss_host *cd = data; 968 struct kfifo *qs = cd->qs; 969 size_t nqs = ARRAY_SIZE(cd->qs); 970 unsigned int ind_ab; 971 972 /* 973 * this kernel thread has exclusive access to the anybus's memory. 974 * only exception: the IND_AB register, which is accessed exclusively 975 * by the interrupt service routine (ISR). This thread must not touch 976 * the IND_AB register, but it does require access to its value. 977 * 978 * the interrupt service routine stores the register's value in 979 * cd->ind_ab (an atomic_t), where we may safely access it, with the 980 * understanding that it can be modified by the ISR at any time. 981 */ 982 983 while (!kthread_should_stop()) { 984 /* 985 * make a local copy of IND_AB, so we can go around the loop 986 * again in case it changed while processing queues and softint. 987 */ 988 ind_ab = atomic_read(&cd->ind_ab); 989 process_qs(cd); 990 process_softint(cd); 991 wait_event_timeout(cd->wq, 992 (atomic_read(&cd->ind_ab) != ind_ab) || 993 qs_have_work(qs, nqs) || 994 kthread_should_stop(), 995 HZ); 996 /* 997 * time out so even 'stuck' tasks will run eventually, 998 * and can time out. 999 */ 1000 } 1001 1002 return 0; 1003} 1004 1005/* ------------------------ anybus exports ------------------------ */ 1006 1007int anybuss_start_init(struct anybuss_client *client, 1008 const struct anybuss_memcfg *cfg) 1009{ 1010 int ret; 1011 u16 op_mode; 1012 struct anybuss_host *cd = client->host; 1013 struct msg_anybus_init msg = { 1014 .input_io_len = cpu_to_be16(cfg->input_io), 1015 .input_dpram_len = cpu_to_be16(cfg->input_dpram), 1016 .input_total_len = cpu_to_be16(cfg->input_total), 1017 .output_io_len = cpu_to_be16(cfg->output_io), 1018 .output_dpram_len = cpu_to_be16(cfg->output_dpram), 1019 .output_total_len = cpu_to_be16(cfg->output_total), 1020 .notif_config = cpu_to_be16(0x000F), 1021 .wd_val = cpu_to_be16(0), 1022 }; 1023 1024 switch (cfg->offl_mode) { 1025 case FIELDBUS_DEV_OFFL_MODE_CLEAR: 1026 op_mode = 0; 1027 break; 1028 case FIELDBUS_DEV_OFFL_MODE_FREEZE: 1029 op_mode = OP_MODE_FBFC; 1030 break; 1031 case FIELDBUS_DEV_OFFL_MODE_SET: 1032 op_mode = OP_MODE_FBS; 1033 break; 1034 default: 1035 return -EINVAL; 1036 } 1037 msg.op_mode = cpu_to_be16(op_mode | OP_MODE_CD); 1038 ret = _anybus_mbox_cmd(cd, CMD_START_INIT, false, NULL, 0, 1039 NULL, 0, NULL, 0); 1040 if (ret) 1041 return ret; 1042 return _anybus_mbox_cmd(cd, CMD_ANYBUS_INIT, false, 1043 &msg, sizeof(msg), NULL, 0, NULL, 0); 1044} 1045EXPORT_SYMBOL_GPL(anybuss_start_init); 1046 1047int anybuss_finish_init(struct anybuss_client *client) 1048{ 1049 struct anybuss_host *cd = client->host; 1050 1051 return _anybus_mbox_cmd(cd, CMD_END_INIT, false, NULL, 0, 1052 NULL, 0, NULL, 0); 1053} 1054EXPORT_SYMBOL_GPL(anybuss_finish_init); 1055 1056int anybuss_read_fbctrl(struct anybuss_client *client, u16 addr, 1057 void *buf, size_t count) 1058{ 1059 struct anybuss_host *cd = client->host; 1060 struct ab_task *t; 1061 int ret; 1062 1063 if (count == 0) 1064 return 0; 1065 if (!area_range_ok(addr, count, FBCTRL_AREA, 1066 MAX_FBCTRL_AREA_SZ)) 1067 return -EFAULT; 1068 t = create_area_reader(cd->qcache, IND_AX_FBCTRL, addr, count); 1069 if (!t) 1070 return -ENOMEM; 1071 ret = ab_task_enqueue_wait(t, cd->powerq, &cd->qlock, &cd->wq); 1072 if (ret) 1073 goto out; 1074 memcpy(buf, t->area_pd.buf, count); 1075out: 1076 ab_task_put(t); 1077 return ret; 1078} 1079EXPORT_SYMBOL_GPL(anybuss_read_fbctrl); 1080 1081int anybuss_write_input(struct anybuss_client *client, 1082 const char __user *buf, size_t size, 1083 loff_t *offset) 1084{ 1085 ssize_t len = min_t(loff_t, MAX_DATA_AREA_SZ - *offset, size); 1086 struct anybuss_host *cd = client->host; 1087 struct ab_task *t; 1088 int ret; 1089 1090 if (len <= 0) 1091 return 0; 1092 t = create_area_user_writer(cd->qcache, IND_AX_IN, 1093 DATA_IN_AREA + *offset, buf, len); 1094 if (IS_ERR(t)) 1095 return PTR_ERR(t); 1096 ret = ab_task_enqueue_wait(t, cd->powerq, &cd->qlock, &cd->wq); 1097 ab_task_put(t); 1098 if (ret) 1099 return ret; 1100 /* success */ 1101 *offset += len; 1102 return len; 1103} 1104EXPORT_SYMBOL_GPL(anybuss_write_input); 1105 1106int anybuss_read_output(struct anybuss_client *client, 1107 char __user *buf, size_t size, 1108 loff_t *offset) 1109{ 1110 ssize_t len = min_t(loff_t, MAX_DATA_AREA_SZ - *offset, size); 1111 struct anybuss_host *cd = client->host; 1112 struct ab_task *t; 1113 int ret; 1114 1115 if (len <= 0) 1116 return 0; 1117 t = create_area_reader(cd->qcache, IND_AX_OUT, 1118 DATA_OUT_AREA + *offset, len); 1119 if (!t) 1120 return -ENOMEM; 1121 ret = ab_task_enqueue_wait(t, cd->powerq, &cd->qlock, &cd->wq); 1122 if (ret) 1123 goto out; 1124 if (copy_to_user(buf, t->area_pd.buf, len)) 1125 ret = -EFAULT; 1126out: 1127 ab_task_put(t); 1128 if (ret) 1129 return ret; 1130 /* success */ 1131 *offset += len; 1132 return len; 1133} 1134EXPORT_SYMBOL_GPL(anybuss_read_output); 1135 1136int anybuss_send_msg(struct anybuss_client *client, u16 cmd_num, 1137 const void *buf, size_t count) 1138{ 1139 struct anybuss_host *cd = client->host; 1140 1141 return _anybus_mbox_cmd(cd, cmd_num, true, buf, count, NULL, 0, 1142 NULL, 0); 1143} 1144EXPORT_SYMBOL_GPL(anybuss_send_msg); 1145 1146int anybuss_send_ext(struct anybuss_client *client, u16 cmd_num, 1147 const void *buf, size_t count) 1148{ 1149 struct anybuss_host *cd = client->host; 1150 1151 return _anybus_mbox_cmd(cd, cmd_num, true, NULL, 0, NULL, 0, 1152 buf, count); 1153} 1154EXPORT_SYMBOL_GPL(anybuss_send_ext); 1155 1156int anybuss_recv_msg(struct anybuss_client *client, u16 cmd_num, 1157 void *buf, size_t count) 1158{ 1159 struct anybuss_host *cd = client->host; 1160 1161 return _anybus_mbox_cmd(cd, cmd_num, true, NULL, 0, buf, count, 1162 NULL, 0); 1163} 1164EXPORT_SYMBOL_GPL(anybuss_recv_msg); 1165 1166/* ------------------------ bus functions ------------------------ */ 1167 1168static int anybus_bus_match(struct device *dev, 1169 struct device_driver *drv) 1170{ 1171 struct anybuss_client_driver *adrv = 1172 to_anybuss_client_driver(drv); 1173 struct anybuss_client *adev = 1174 to_anybuss_client(dev); 1175 1176 return adrv->anybus_id == be16_to_cpu(adev->anybus_id); 1177} 1178 1179static int anybus_bus_probe(struct device *dev) 1180{ 1181 struct anybuss_client_driver *adrv = 1182 to_anybuss_client_driver(dev->driver); 1183 struct anybuss_client *adev = 1184 to_anybuss_client(dev); 1185 1186 return adrv->probe(adev); 1187} 1188 1189static void anybus_bus_remove(struct device *dev) 1190{ 1191 struct anybuss_client_driver *adrv = 1192 to_anybuss_client_driver(dev->driver); 1193 1194 if (adrv->remove) 1195 adrv->remove(to_anybuss_client(dev)); 1196} 1197 1198static struct bus_type anybus_bus = { 1199 .name = "anybuss", 1200 .match = anybus_bus_match, 1201 .probe = anybus_bus_probe, 1202 .remove = anybus_bus_remove, 1203}; 1204 1205int anybuss_client_driver_register(struct anybuss_client_driver *drv) 1206{ 1207 if (!drv->probe) 1208 return -ENODEV; 1209 1210 drv->driver.bus = &anybus_bus; 1211 return driver_register(&drv->driver); 1212} 1213EXPORT_SYMBOL_GPL(anybuss_client_driver_register); 1214 1215void anybuss_client_driver_unregister(struct anybuss_client_driver *drv) 1216{ 1217 return driver_unregister(&drv->driver); 1218} 1219EXPORT_SYMBOL_GPL(anybuss_client_driver_unregister); 1220 1221static void client_device_release(struct device *dev) 1222{ 1223 kfree(to_anybuss_client(dev)); 1224} 1225 1226static int taskq_alloc(struct device *dev, struct kfifo *q) 1227{ 1228 void *buf; 1229 size_t size = 64 * sizeof(struct ab_task *); 1230 1231 buf = devm_kzalloc(dev, size, GFP_KERNEL); 1232 if (!buf) 1233 return -EIO; 1234 return kfifo_init(q, buf, size); 1235} 1236 1237static int anybus_of_get_host_idx(struct device_node *np) 1238{ 1239 const __be32 *host_idx; 1240 1241 host_idx = of_get_address(np, 0, NULL, NULL); 1242 if (!host_idx) 1243 return -ENOENT; 1244 return __be32_to_cpu(*host_idx); 1245} 1246 1247static struct device_node * 1248anybus_of_find_child_device(struct device *dev, int host_idx) 1249{ 1250 struct device_node *node; 1251 1252 if (!dev || !dev->of_node) 1253 return NULL; 1254 for_each_child_of_node(dev->of_node, node) { 1255 if (anybus_of_get_host_idx(node) == host_idx) 1256 return node; 1257 } 1258 return NULL; 1259} 1260 1261struct anybuss_host * __must_check 1262anybuss_host_common_probe(struct device *dev, 1263 const struct anybuss_ops *ops) 1264{ 1265 int ret, i; 1266 u8 val[4]; 1267 __be16 fieldbus_type; 1268 struct anybuss_host *cd; 1269 1270 cd = devm_kzalloc(dev, sizeof(*cd), GFP_KERNEL); 1271 if (!cd) 1272 return ERR_PTR(-ENOMEM); 1273 cd->dev = dev; 1274 cd->host_idx = ops->host_idx; 1275 init_completion(&cd->card_boot); 1276 init_waitqueue_head(&cd->wq); 1277 for (i = 0; i < ARRAY_SIZE(cd->qs); i++) { 1278 ret = taskq_alloc(dev, &cd->qs[i]); 1279 if (ret) 1280 return ERR_PTR(ret); 1281 } 1282 if (WARN_ON(ARRAY_SIZE(cd->qs) < 3)) 1283 return ERR_PTR(-EINVAL); 1284 cd->powerq = &cd->qs[0]; 1285 cd->mboxq = &cd->qs[1]; 1286 cd->areaq = &cd->qs[2]; 1287 cd->reset = ops->reset; 1288 if (!cd->reset) 1289 return ERR_PTR(-EINVAL); 1290 cd->regmap = ops->regmap; 1291 if (!cd->regmap) 1292 return ERR_PTR(-EINVAL); 1293 spin_lock_init(&cd->qlock); 1294 cd->qcache = kmem_cache_create(dev_name(dev), 1295 sizeof(struct ab_task), 0, 0, NULL); 1296 if (!cd->qcache) 1297 return ERR_PTR(-ENOMEM); 1298 cd->irq = ops->irq; 1299 if (cd->irq <= 0) { 1300 ret = -EINVAL; 1301 goto err_qcache; 1302 } 1303 /* 1304 * use a dpram test to check if a card is present, this is only 1305 * possible while in reset. 1306 */ 1307 reset_assert(cd); 1308 if (test_dpram(cd->regmap)) { 1309 dev_err(dev, "no Anybus-S card in slot"); 1310 ret = -ENODEV; 1311 goto err_qcache; 1312 } 1313 ret = devm_request_threaded_irq(dev, cd->irq, NULL, irq_handler, 1314 IRQF_ONESHOT, dev_name(dev), cd); 1315 if (ret) { 1316 dev_err(dev, "could not request irq"); 1317 goto err_qcache; 1318 } 1319 /* 1320 * startup sequence: 1321 * a) perform dummy IND_AB read to prevent false 'init done' irq 1322 * (already done by test_dpram() above) 1323 * b) release reset 1324 * c) wait for first interrupt 1325 * d) interrupt came in: ready to go ! 1326 */ 1327 reset_deassert(cd); 1328 if (!wait_for_completion_timeout(&cd->card_boot, TIMEOUT)) { 1329 ret = -ETIMEDOUT; 1330 goto err_reset; 1331 } 1332 /* 1333 * according to the anybus docs, we're allowed to read these 1334 * without handshaking / reserving the area 1335 */ 1336 dev_info(dev, "Anybus-S card detected"); 1337 regmap_bulk_read(cd->regmap, REG_BOOTLOADER_V, val, 2); 1338 dev_info(dev, "Bootloader version: %02X%02X", 1339 val[0], val[1]); 1340 regmap_bulk_read(cd->regmap, REG_API_V, val, 2); 1341 dev_info(dev, "API version: %02X%02X", val[0], val[1]); 1342 regmap_bulk_read(cd->regmap, REG_FIELDBUS_V, val, 2); 1343 dev_info(dev, "Fieldbus version: %02X%02X", val[0], val[1]); 1344 regmap_bulk_read(cd->regmap, REG_SERIAL_NO, val, 4); 1345 dev_info(dev, "Serial number: %02X%02X%02X%02X", 1346 val[0], val[1], val[2], val[3]); 1347 add_device_randomness(&val, 4); 1348 regmap_bulk_read(cd->regmap, REG_FIELDBUS_TYPE, &fieldbus_type, 1349 sizeof(fieldbus_type)); 1350 dev_info(dev, "Fieldbus type: %04X", be16_to_cpu(fieldbus_type)); 1351 regmap_bulk_read(cd->regmap, REG_MODULE_SW_V, val, 2); 1352 dev_info(dev, "Module SW version: %02X%02X", 1353 val[0], val[1]); 1354 /* put card back reset until a client driver releases it */ 1355 disable_irq(cd->irq); 1356 reset_assert(cd); 1357 atomic_set(&cd->ind_ab, IND_AB_UPDATED); 1358 /* fire up the queue thread */ 1359 cd->qthread = kthread_run(qthread_fn, cd, dev_name(dev)); 1360 if (IS_ERR(cd->qthread)) { 1361 dev_err(dev, "could not create kthread"); 1362 ret = PTR_ERR(cd->qthread); 1363 goto err_reset; 1364 } 1365 /* 1366 * now advertise that we've detected a client device (card). 1367 * the bus infrastructure will match it to a client driver. 1368 */ 1369 cd->client = kzalloc(sizeof(*cd->client), GFP_KERNEL); 1370 if (!cd->client) { 1371 ret = -ENOMEM; 1372 goto err_kthread; 1373 } 1374 cd->client->anybus_id = fieldbus_type; 1375 cd->client->host = cd; 1376 cd->client->dev.bus = &anybus_bus; 1377 cd->client->dev.parent = dev; 1378 cd->client->dev.release = client_device_release; 1379 cd->client->dev.of_node = 1380 anybus_of_find_child_device(dev, cd->host_idx); 1381 dev_set_name(&cd->client->dev, "anybuss.card%d", cd->host_idx); 1382 ret = device_register(&cd->client->dev); 1383 if (ret) 1384 goto err_device; 1385 return cd; 1386err_device: 1387 put_device(&cd->client->dev); 1388err_kthread: 1389 kthread_stop(cd->qthread); 1390err_reset: 1391 reset_assert(cd); 1392err_qcache: 1393 kmem_cache_destroy(cd->qcache); 1394 return ERR_PTR(ret); 1395} 1396EXPORT_SYMBOL_GPL(anybuss_host_common_probe); 1397 1398void anybuss_host_common_remove(struct anybuss_host *host) 1399{ 1400 struct anybuss_host *cd = host; 1401 1402 device_unregister(&cd->client->dev); 1403 kthread_stop(cd->qthread); 1404 reset_assert(cd); 1405 kmem_cache_destroy(cd->qcache); 1406} 1407EXPORT_SYMBOL_GPL(anybuss_host_common_remove); 1408 1409static void host_release(void *res) 1410{ 1411 anybuss_host_common_remove(res); 1412} 1413 1414struct anybuss_host * __must_check 1415devm_anybuss_host_common_probe(struct device *dev, 1416 const struct anybuss_ops *ops) 1417{ 1418 struct anybuss_host *host; 1419 int ret; 1420 1421 host = anybuss_host_common_probe(dev, ops); 1422 if (IS_ERR(host)) 1423 return host; 1424 1425 ret = devm_add_action_or_reset(dev, host_release, host); 1426 if (ret) 1427 return ERR_PTR(ret); 1428 1429 return host; 1430} 1431EXPORT_SYMBOL_GPL(devm_anybuss_host_common_probe); 1432 1433static int __init anybus_init(void) 1434{ 1435 int ret; 1436 1437 ret = bus_register(&anybus_bus); 1438 if (ret) 1439 pr_err("could not register Anybus-S bus: %d\n", ret); 1440 return ret; 1441} 1442module_init(anybus_init); 1443 1444static void __exit anybus_exit(void) 1445{ 1446 bus_unregister(&anybus_bus); 1447} 1448module_exit(anybus_exit); 1449 1450MODULE_DESCRIPTION("HMS Anybus-S Host Driver"); 1451MODULE_AUTHOR("Sven Van Asbroeck <TheSven73@gmail.com>"); 1452MODULE_LICENSE("GPL v2");