Lines Matching refs:priv

217 static void ismt_desc_dump(struct ismt_priv *priv)  in ismt_desc_dump()  argument
219 struct device *dev = &priv->pci_dev->dev; in ismt_desc_dump()
220 struct ismt_desc *desc = &priv->hw[priv->head]; in ismt_desc_dump()
222 dev_dbg(dev, "Dump of the descriptor struct: 0x%X\n", priv->head); in ismt_desc_dump()
230 static void ismt_gen_reg_dump(struct ismt_priv *priv) in ismt_gen_reg_dump() argument
232 struct device *dev = &priv->pci_dev->dev; in ismt_gen_reg_dump()
236 priv->smba + ISMT_GR_GCTRL, in ismt_gen_reg_dump()
237 readl(priv->smba + ISMT_GR_GCTRL)); in ismt_gen_reg_dump()
239 priv->smba + ISMT_GR_SMTICL, in ismt_gen_reg_dump()
240 (long long unsigned int)readq(priv->smba + ISMT_GR_SMTICL)); in ismt_gen_reg_dump()
242 priv->smba + ISMT_GR_ERRINTMSK, in ismt_gen_reg_dump()
243 readl(priv->smba + ISMT_GR_ERRINTMSK)); in ismt_gen_reg_dump()
245 priv->smba + ISMT_GR_ERRAERMSK, in ismt_gen_reg_dump()
246 readl(priv->smba + ISMT_GR_ERRAERMSK)); in ismt_gen_reg_dump()
248 priv->smba + ISMT_GR_ERRSTS, in ismt_gen_reg_dump()
249 readl(priv->smba + ISMT_GR_ERRSTS)); in ismt_gen_reg_dump()
251 priv->smba + ISMT_GR_ERRINFO, in ismt_gen_reg_dump()
252 readl(priv->smba + ISMT_GR_ERRINFO)); in ismt_gen_reg_dump()
259 static void ismt_mstr_reg_dump(struct ismt_priv *priv) in ismt_mstr_reg_dump() argument
261 struct device *dev = &priv->pci_dev->dev; in ismt_mstr_reg_dump()
265 priv->smba + ISMT_MSTR_MDBA, in ismt_mstr_reg_dump()
266 (long long unsigned int)readq(priv->smba + ISMT_MSTR_MDBA)); in ismt_mstr_reg_dump()
268 priv->smba + ISMT_MSTR_MCTRL, in ismt_mstr_reg_dump()
269 readl(priv->smba + ISMT_MSTR_MCTRL)); in ismt_mstr_reg_dump()
271 priv->smba + ISMT_MSTR_MSTS, in ismt_mstr_reg_dump()
272 readl(priv->smba + ISMT_MSTR_MSTS)); in ismt_mstr_reg_dump()
274 priv->smba + ISMT_MSTR_MDS, in ismt_mstr_reg_dump()
275 readl(priv->smba + ISMT_MSTR_MDS)); in ismt_mstr_reg_dump()
277 priv->smba + ISMT_MSTR_RPOLICY, in ismt_mstr_reg_dump()
278 readl(priv->smba + ISMT_MSTR_RPOLICY)); in ismt_mstr_reg_dump()
280 priv->smba + ISMT_SPGT, in ismt_mstr_reg_dump()
281 readl(priv->smba + ISMT_SPGT)); in ismt_mstr_reg_dump()
288 static void ismt_submit_desc(struct ismt_priv *priv) in ismt_submit_desc() argument
293 ismt_desc_dump(priv); in ismt_submit_desc()
294 ismt_gen_reg_dump(priv); in ismt_submit_desc()
295 ismt_mstr_reg_dump(priv); in ismt_submit_desc()
298 fmhp = ((priv->head + 1) % ISMT_DESC_ENTRIES) << 16; in ismt_submit_desc()
299 val = readl(priv->smba + ISMT_MSTR_MCTRL); in ismt_submit_desc()
301 priv->smba + ISMT_MSTR_MCTRL); in ismt_submit_desc()
304 val = readl(priv->smba + ISMT_MSTR_MCTRL); in ismt_submit_desc()
306 priv->smba + ISMT_MSTR_MCTRL); in ismt_submit_desc()
319 struct ismt_priv *priv, int size, in ismt_process_desc() argument
322 u8 *dma_buffer = priv->dma_buffer; in ismt_process_desc()
324 dev_dbg(&priv->pci_dev->dev, "Processing completed descriptor\n"); in ismt_process_desc()
325 __ismt_desc_dump(&priv->pci_dev->dev, desc); in ismt_process_desc()
388 struct ismt_priv *priv = i2c_get_adapdata(adap); in ismt_access() local
389 struct device *dev = &priv->pci_dev->dev; in ismt_access()
391 desc = &priv->hw[priv->head]; in ismt_access()
394 memset(priv->dma_buffer, 0, sizeof(priv->dma_buffer)); in ismt_access()
401 if (likely(priv->using_msi)) in ismt_access()
443 priv->dma_buffer[0] = command; in ismt_access()
444 priv->dma_buffer[1] = data->byte; in ismt_access()
463 priv->dma_buffer[0] = command; in ismt_access()
464 priv->dma_buffer[1] = data->word & 0xff; in ismt_access()
465 priv->dma_buffer[2] = data->word >> 8; in ismt_access()
483 priv->dma_buffer[0] = command; in ismt_access()
484 priv->dma_buffer[1] = data->word & 0xff; in ismt_access()
485 priv->dma_buffer[2] = data->word >> 8; in ismt_access()
496 priv->dma_buffer[0] = command; in ismt_access()
497 memcpy(&priv->dma_buffer[1], &data->block[1], dma_size - 1); in ismt_access()
524 priv->dma_buffer[0] = command; in ismt_access()
525 memcpy(&priv->dma_buffer[1], &data->block[1], dma_size - 1); in ismt_access()
554 dev_dbg(dev, " dma_buffer=%p\n", priv->dma_buffer); in ismt_access()
559 priv->dma_buffer, in ismt_access()
565 priv->dma_buffer); in ismt_access()
576 reinit_completion(&priv->cmp); in ismt_access()
579 ismt_submit_desc(priv); in ismt_access()
582 time_left = wait_for_completion_timeout(&priv->cmp, HZ*1); in ismt_access()
595 ret = ismt_process_desc(desc, data, priv, size, read_write); in ismt_access()
599 priv->head++; in ismt_access()
600 priv->head %= ISMT_DESC_ENTRIES; in ismt_access()
635 static irqreturn_t ismt_handle_isr(struct ismt_priv *priv) in ismt_handle_isr() argument
637 complete(&priv->cmp); in ismt_handle_isr()
651 struct ismt_priv *priv = data; in ismt_do_interrupt() local
657 val = readl(priv->smba + ISMT_MSTR_MSTS); in ismt_do_interrupt()
663 priv->smba + ISMT_MSTR_MSTS); in ismt_do_interrupt()
665 return ismt_handle_isr(priv); in ismt_do_interrupt()
682 static void ismt_hw_init(struct ismt_priv *priv) in ismt_hw_init() argument
685 struct device *dev = &priv->pci_dev->dev; in ismt_hw_init()
688 writeq(priv->io_rng_dma, priv->smba + ISMT_MSTR_MDBA); in ismt_hw_init()
691 writel(ISMT_MCTRL_MEIE, priv->smba + ISMT_MSTR_MCTRL); in ismt_hw_init()
694 writel(0, priv->smba + ISMT_MSTR_MSTS); in ismt_hw_init()
697 val = readl(priv->smba + ISMT_MSTR_MDS); in ismt_hw_init()
699 priv->smba + ISMT_MSTR_MDS); in ismt_hw_init()
705 val = readl(priv->smba + ISMT_SPGT); in ismt_hw_init()
714 priv->smba + ISMT_SPGT); in ismt_hw_init()
720 priv->smba + ISMT_SPGT); in ismt_hw_init()
726 priv->smba + ISMT_SPGT); in ismt_hw_init()
732 priv->smba + ISMT_SPGT); in ismt_hw_init()
740 val = readl(priv->smba + ISMT_SPGT); in ismt_hw_init()
763 static int ismt_dev_init(struct ismt_priv *priv) in ismt_dev_init() argument
766 priv->hw = dmam_alloc_coherent(&priv->pci_dev->dev, in ismt_dev_init()
769 &priv->io_rng_dma, in ismt_dev_init()
771 if (!priv->hw) in ismt_dev_init()
774 memset(priv->hw, 0, (ISMT_DESC_ENTRIES * sizeof(struct ismt_desc))); in ismt_dev_init()
776 priv->head = 0; in ismt_dev_init()
777 init_completion(&priv->cmp); in ismt_dev_init()
786 static int ismt_int_init(struct ismt_priv *priv) in ismt_int_init() argument
791 err = pci_enable_msi(priv->pci_dev); in ismt_int_init()
793 dev_warn(&priv->pci_dev->dev, in ismt_int_init()
798 err = devm_request_irq(&priv->pci_dev->dev, in ismt_int_init()
799 priv->pci_dev->irq, in ismt_int_init()
803 priv); in ismt_int_init()
805 pci_disable_msi(priv->pci_dev); in ismt_int_init()
809 priv->using_msi = true; in ismt_int_init()
814 err = devm_request_irq(&priv->pci_dev->dev, in ismt_int_init()
815 priv->pci_dev->irq, in ismt_int_init()
819 priv); in ismt_int_init()
821 dev_err(&priv->pci_dev->dev, "no usable interrupts\n"); in ismt_int_init()
825 priv->using_msi = false; in ismt_int_init()
842 struct ismt_priv *priv; in ismt_probe() local
845 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); in ismt_probe()
846 if (!priv) in ismt_probe()
849 pci_set_drvdata(pdev, priv); in ismt_probe()
850 i2c_set_adapdata(&priv->adapter, priv); in ismt_probe()
851 priv->adapter.owner = THIS_MODULE; in ismt_probe()
853 priv->adapter.class = I2C_CLASS_HWMON; in ismt_probe()
855 priv->adapter.algo = &smbus_algorithm; in ismt_probe()
858 priv->adapter.dev.parent = &pdev->dev; in ismt_probe()
861 priv->adapter.retries = ISMT_MAX_RETRIES; in ismt_probe()
863 priv->pci_dev = pdev; in ismt_probe()
884 snprintf(priv->adapter.name, sizeof(priv->adapter.name), in ismt_probe()
887 dev_dbg(&priv->pci_dev->dev, " start=0x%lX\n", start); in ismt_probe()
888 dev_dbg(&priv->pci_dev->dev, " len=0x%lX\n", len); in ismt_probe()
904 priv->smba = pcim_iomap(pdev, SMBBAR, len); in ismt_probe()
905 if (!priv->smba) { in ismt_probe()
923 err = ismt_dev_init(priv); in ismt_probe()
927 ismt_hw_init(priv); in ismt_probe()
929 err = ismt_int_init(priv); in ismt_probe()
933 err = i2c_add_adapter(&priv->adapter); in ismt_probe()
952 struct ismt_priv *priv = pci_get_drvdata(pdev); in ismt_remove() local
954 i2c_del_adapter(&priv->adapter); in ismt_remove()