Lines Matching refs:scu

124 static inline void ipc_command(struct intel_scu_ipc_dev *scu, u32 cmd)  in ipc_command()  argument
126 if (scu->irq_mode) { in ipc_command()
127 reinit_completion(&scu->cmd_complete); in ipc_command()
128 writel(cmd | IPC_IOC, scu->ipc_base); in ipc_command()
130 writel(cmd, scu->ipc_base); in ipc_command()
139 static inline void ipc_data_writel(struct intel_scu_ipc_dev *scu, u32 data, u32 offset) in ipc_data_writel() argument
141 writel(data, scu->ipc_base + 0x80 + offset); in ipc_data_writel()
151 static inline u8 ipc_read_status(struct intel_scu_ipc_dev *scu) in ipc_read_status() argument
153 return __raw_readl(scu->ipc_base + 0x04); in ipc_read_status()
157 static inline u8 ipc_data_readb(struct intel_scu_ipc_dev *scu, u32 offset) in ipc_data_readb() argument
159 return readb(scu->ipc_base + IPC_READ_BUFFER + offset); in ipc_data_readb()
163 static inline u32 ipc_data_readl(struct intel_scu_ipc_dev *scu, u32 offset) in ipc_data_readl() argument
165 return readl(scu->ipc_base + IPC_READ_BUFFER + offset); in ipc_data_readl()
169 static inline int busy_loop(struct intel_scu_ipc_dev *scu) in busy_loop() argument
171 u32 status = ipc_read_status(scu); in busy_loop()
177 status = ipc_read_status(scu); in busy_loop()
181 dev_err(scu->dev, "IPC timed out"); in busy_loop()
192 static inline int ipc_wait_for_interrupt(struct intel_scu_ipc_dev *scu) in ipc_wait_for_interrupt() argument
196 if (!wait_for_completion_timeout(&scu->cmd_complete, 3 * HZ)) { in ipc_wait_for_interrupt()
197 dev_err(scu->dev, "IPC timed out\n"); in ipc_wait_for_interrupt()
201 status = ipc_read_status(scu); in ipc_wait_for_interrupt()
208 static int intel_scu_ipc_check_status(struct intel_scu_ipc_dev *scu) in intel_scu_ipc_check_status() argument
210 return scu->irq_mode ? ipc_wait_for_interrupt(scu) : busy_loop(scu); in intel_scu_ipc_check_status()
216 struct intel_scu_ipc_dev *scu = &ipcdev; in pwr_reg_rdwr() local
227 if (scu->dev == NULL) { in pwr_reg_rdwr()
239 ipc_data_writel(scu, wbuf[nc], offset); in pwr_reg_rdwr()
240 ipc_command(scu, (count * 2) << 16 | id << 12 | 0 << 8 | op); in pwr_reg_rdwr()
245 ipc_data_writel(scu, wbuf[nc], offset); in pwr_reg_rdwr()
246 ipc_command(scu, (count * 3) << 16 | id << 12 | 0 << 8 | op); in pwr_reg_rdwr()
250 ipc_data_writel(scu, wbuf[0], 0); /* Write wbuff */ in pwr_reg_rdwr()
251 ipc_command(scu, 4 << 16 | id << 12 | 0 << 8 | op); in pwr_reg_rdwr()
254 err = intel_scu_ipc_check_status(scu); in pwr_reg_rdwr()
257 memcpy_fromio(cbuf, scu->ipc_base + 0x90, 16); in pwr_reg_rdwr()
259 data[nc] = ipc_data_readb(scu, nc); in pwr_reg_rdwr()
440 struct intel_scu_ipc_dev *scu = &ipcdev; in intel_scu_ipc_simple_command() local
444 if (scu->dev == NULL) { in intel_scu_ipc_simple_command()
448 ipc_command(scu, sub << 12 | cmd); in intel_scu_ipc_simple_command()
449 err = intel_scu_ipc_check_status(scu); in intel_scu_ipc_simple_command()
470 struct intel_scu_ipc_dev *scu = &ipcdev; in intel_scu_ipc_command() local
474 if (scu->dev == NULL) { in intel_scu_ipc_command()
480 ipc_data_writel(scu, *in++, 4 * i); in intel_scu_ipc_command()
482 ipc_command(scu, (inlen << 16) | (sub << 12) | cmd); in intel_scu_ipc_command()
483 err = intel_scu_ipc_check_status(scu); in intel_scu_ipc_command()
487 *out++ = ipc_data_readl(scu, 4 * i); in intel_scu_ipc_command()
513 struct intel_scu_ipc_dev *scu = &ipcdev; in intel_scu_ipc_i2c_cntrl() local
517 if (scu->dev == NULL) { in intel_scu_ipc_i2c_cntrl()
523 writel(addr, scu->i2c_base + IPC_I2C_CNTRL_ADDR); in intel_scu_ipc_i2c_cntrl()
526 *data = readl(scu->i2c_base + I2C_DATA_ADDR); in intel_scu_ipc_i2c_cntrl()
528 writel(*data, scu->i2c_base + I2C_DATA_ADDR); in intel_scu_ipc_i2c_cntrl()
530 writel(addr, scu->i2c_base + IPC_I2C_CNTRL_ADDR); in intel_scu_ipc_i2c_cntrl()
532 dev_err(scu->dev, in intel_scu_ipc_i2c_cntrl()
552 struct intel_scu_ipc_dev *scu = dev_id; in ioc() local
554 if (scu->irq_mode) in ioc()
555 complete(&scu->cmd_complete); in ioc()
572 struct intel_scu_ipc_dev *scu = &ipcdev; in ipc_probe() local
579 if (scu->dev) /* We support only one SCU */ in ipc_probe()
584 scu->dev = &pdev->dev; in ipc_probe()
585 scu->irq_mode = pdata->irq_mode; in ipc_probe()
595 init_completion(&scu->cmd_complete); in ipc_probe()
598 scu); in ipc_probe()
602 scu->ipc_base = pcim_iomap_table(pdev)[0]; in ipc_probe()
604 scu->i2c_base = ioremap_nocache(pdata->i2c_base, pdata->i2c_len); in ipc_probe()
605 if (!scu->i2c_base) in ipc_probe()
610 pci_set_drvdata(pdev, scu); in ipc_probe()
626 struct intel_scu_ipc_dev *scu = pci_get_drvdata(pdev); in ipc_remove() local
629 scu->dev = NULL; in ipc_remove()
632 iounmap(scu->i2c_base); in ipc_remove()