• Home
  • Raw
  • Download

Lines Matching full:scom

3  * SCOM FSI Client device driver
21 /* SCOM engine register set */
46 /* SCOM address encodings */
50 /* SCOM indirect stuff */
145 static int put_indirect_scom_form0(struct scom_device *scom, uint64_t value, in put_indirect_scom_form0() argument
156 rc = __put_scom(scom, ind_data, ind_addr, status); in put_indirect_scom_form0()
161 rc = __get_scom(scom, &ind_data, addr, status); in put_indirect_scom_form0()
175 static int put_indirect_scom_form1(struct scom_device *scom, uint64_t value, in put_indirect_scom_form1() argument
185 return __put_scom(scom, ind_data, ind_addr, status); in put_indirect_scom_form1()
188 static int get_indirect_scom_form0(struct scom_device *scom, uint64_t *value, in get_indirect_scom_form0() argument
196 rc = __put_scom(scom, ind_data, ind_addr, status); in get_indirect_scom_form0()
201 rc = __get_scom(scom, &ind_data, addr, status); in get_indirect_scom_form0()
217 static int raw_put_scom(struct scom_device *scom, uint64_t value, in raw_put_scom() argument
222 return put_indirect_scom_form1(scom, value, addr, status); in raw_put_scom()
224 return put_indirect_scom_form0(scom, value, addr, status); in raw_put_scom()
226 return __put_scom(scom, value, addr, status); in raw_put_scom()
229 static int raw_get_scom(struct scom_device *scom, uint64_t *value, in raw_get_scom() argument
235 return get_indirect_scom_form0(scom, value, addr, status); in raw_get_scom()
237 return __get_scom(scom, value, addr, status); in raw_get_scom()
240 static int handle_fsi2pib_status(struct scom_device *scom, uint32_t status) in handle_fsi2pib_status() argument
245 fsi_device_write(scom->fsi_dev, SCOM_FSI2PIB_RESET_REG, &dummy, in handle_fsi2pib_status()
258 static int handle_pib_status(struct scom_device *scom, uint8_t status) in handle_pib_status() argument
268 fsi_device_write(scom->fsi_dev, SCOM_FSI2PIB_RESET_REG, &dummy, in handle_pib_status()
286 static int put_scom(struct scom_device *scom, uint64_t value, in put_scom() argument
293 rc = raw_put_scom(scom, value, addr, &status); in put_scom()
297 fsi_device_write(scom->fsi_dev, SCOM_FSI2PIB_RESET_REG, in put_scom()
303 rc = handle_fsi2pib_status(scom, status); in put_scom()
307 rc = handle_pib_status(scom, in put_scom()
320 static int get_scom(struct scom_device *scom, uint64_t *value, in get_scom() argument
327 rc = raw_get_scom(scom, value, addr, &status); in get_scom()
331 fsi_device_write(scom->fsi_dev, SCOM_FSI2PIB_RESET_REG, in get_scom()
337 rc = handle_fsi2pib_status(scom, status); in get_scom()
341 rc = handle_pib_status(scom, in get_scom()
357 struct scom_device *scom = filep->private_data; in scom_read() local
358 struct device *dev = &scom->fsi_dev->dev; in scom_read()
365 mutex_lock(&scom->lock); in scom_read()
366 if (scom->dead) in scom_read()
369 rc = get_scom(scom, &val, *offset); in scom_read()
370 mutex_unlock(&scom->lock); in scom_read()
387 struct scom_device *scom = filep->private_data; in scom_write() local
388 struct device *dev = &scom->fsi_dev->dev; in scom_write()
400 mutex_lock(&scom->lock); in scom_write()
401 if (scom->dead) in scom_write()
404 rc = put_scom(scom, val, *offset); in scom_write()
405 mutex_unlock(&scom->lock); in scom_write()
445 static int scom_raw_read(struct scom_device *scom, void __user *argp) in scom_raw_read() argument
454 rc = raw_get_scom(scom, &acc.data, acc.addr, &status); in scom_raw_read()
463 static int scom_raw_write(struct scom_device *scom, void __user *argp) in scom_raw_write() argument
474 rc = raw_get_scom(scom, &prev_data, acc.addr, &status); in scom_raw_write()
484 rc = raw_put_scom(scom, data, acc.addr, &status); in scom_raw_write()
494 static int scom_reset(struct scom_device *scom, void __user *argp) in scom_reset() argument
502 rc = fsi_device_write(scom->fsi_dev, SCOM_PIB_RESET_REG, &dummy, in scom_reset()
505 rc = fsi_device_write(scom->fsi_dev, SCOM_FSI2PIB_RESET_REG, &dummy, in scom_reset()
510 static int scom_check(struct scom_device *scom, void __user *argp) in scom_check() argument
518 struct scom_device *scom = file->private_data; in scom_ioctl() local
522 mutex_lock(&scom->lock); in scom_ioctl()
523 if (scom->dead) { in scom_ioctl()
524 mutex_unlock(&scom->lock); in scom_ioctl()
529 rc = scom_check(scom, argp); in scom_ioctl()
532 rc = scom_raw_read(scom, argp); in scom_ioctl()
535 rc = scom_raw_write(scom, argp); in scom_ioctl()
538 rc = scom_reset(scom, argp); in scom_ioctl()
541 mutex_unlock(&scom->lock); in scom_ioctl()
547 struct scom_device *scom = container_of(inode->i_cdev, struct scom_device, cdev); in scom_open() local
549 file->private_data = scom; in scom_open()
565 struct scom_device *scom = container_of(dev, struct scom_device, dev); in scom_free() local
567 put_device(&scom->fsi_dev->dev); in scom_free()
568 kfree(scom); in scom_free()
574 struct scom_device *scom; in scom_probe() local
577 scom = kzalloc(sizeof(*scom), GFP_KERNEL); in scom_probe()
578 if (!scom) in scom_probe()
580 dev_set_drvdata(dev, scom); in scom_probe()
581 mutex_init(&scom->lock); in scom_probe()
585 kfree(scom); in scom_probe()
588 scom->fsi_dev = fsi_dev; in scom_probe()
591 scom->dev.type = &fsi_cdev_type; in scom_probe()
592 scom->dev.parent = dev; in scom_probe()
593 scom->dev.release = scom_free; in scom_probe()
594 device_initialize(&scom->dev); in scom_probe()
597 rc = fsi_get_new_minor(fsi_dev, fsi_dev_scom, &scom->dev.devt, &didx); in scom_probe()
601 dev_set_name(&scom->dev, "scom%d", didx); in scom_probe()
602 cdev_init(&scom->cdev, &scom_fops); in scom_probe()
603 rc = cdev_device_add(&scom->cdev, &scom->dev); in scom_probe()
606 rc, dev_name(&scom->dev)); in scom_probe()
612 fsi_free_minor(scom->dev.devt); in scom_probe()
614 put_device(&scom->dev); in scom_probe()
620 struct scom_device *scom = dev_get_drvdata(dev); in scom_remove() local
622 mutex_lock(&scom->lock); in scom_remove()
623 scom->dead = true; in scom_remove()
624 mutex_unlock(&scom->lock); in scom_remove()
625 cdev_device_del(&scom->cdev, &scom->dev); in scom_remove()
626 fsi_free_minor(scom->dev.devt); in scom_remove()
627 put_device(&scom->dev); in scom_remove()
643 .name = "scom",