Lines Matching refs:scu
123 static inline void ipc_command(struct intel_scu_ipc_dev *scu, u32 cmd) in ipc_command() argument
125 if (scu->irq_mode) { in ipc_command()
126 reinit_completion(&scu->cmd_complete); in ipc_command()
127 writel(cmd | IPC_IOC, scu->ipc_base); in ipc_command()
129 writel(cmd, scu->ipc_base); in ipc_command()
138 static inline void ipc_data_writel(struct intel_scu_ipc_dev *scu, u32 data, u32 offset) in ipc_data_writel() argument
140 writel(data, scu->ipc_base + 0x80 + offset); in ipc_data_writel()
150 static inline u8 ipc_read_status(struct intel_scu_ipc_dev *scu) in ipc_read_status() argument
152 return __raw_readl(scu->ipc_base + 0x04); in ipc_read_status()
156 static inline u8 ipc_data_readb(struct intel_scu_ipc_dev *scu, u32 offset) in ipc_data_readb() argument
158 return readb(scu->ipc_base + IPC_READ_BUFFER + offset); in ipc_data_readb()
162 static inline u32 ipc_data_readl(struct intel_scu_ipc_dev *scu, u32 offset) in ipc_data_readl() argument
164 return readl(scu->ipc_base + IPC_READ_BUFFER + offset); in ipc_data_readl()
168 static inline int busy_loop(struct intel_scu_ipc_dev *scu) in busy_loop() argument
170 u32 status = ipc_read_status(scu); in busy_loop()
176 status = ipc_read_status(scu); in busy_loop()
180 dev_err(scu->dev, "IPC timed out"); in busy_loop()
191 static inline int ipc_wait_for_interrupt(struct intel_scu_ipc_dev *scu) in ipc_wait_for_interrupt() argument
195 if (!wait_for_completion_timeout(&scu->cmd_complete, 3 * HZ)) { in ipc_wait_for_interrupt()
196 dev_err(scu->dev, "IPC timed out\n"); in ipc_wait_for_interrupt()
200 status = ipc_read_status(scu); in ipc_wait_for_interrupt()
207 static int intel_scu_ipc_check_status(struct intel_scu_ipc_dev *scu) in intel_scu_ipc_check_status() argument
209 return scu->irq_mode ? ipc_wait_for_interrupt(scu) : busy_loop(scu); in intel_scu_ipc_check_status()
215 struct intel_scu_ipc_dev *scu = &ipcdev; in pwr_reg_rdwr() local
226 if (scu->dev == NULL) { in pwr_reg_rdwr()
238 ipc_data_writel(scu, wbuf[nc], offset); in pwr_reg_rdwr()
239 ipc_command(scu, (count * 2) << 16 | id << 12 | 0 << 8 | op); in pwr_reg_rdwr()
244 ipc_data_writel(scu, wbuf[nc], offset); in pwr_reg_rdwr()
245 ipc_command(scu, (count * 3) << 16 | id << 12 | 0 << 8 | op); in pwr_reg_rdwr()
249 ipc_data_writel(scu, wbuf[0], 0); /* Write wbuff */ in pwr_reg_rdwr()
250 ipc_command(scu, 4 << 16 | id << 12 | 0 << 8 | op); in pwr_reg_rdwr()
253 err = intel_scu_ipc_check_status(scu); in pwr_reg_rdwr()
256 memcpy_fromio(cbuf, scu->ipc_base + 0x90, 16); in pwr_reg_rdwr()
258 data[nc] = ipc_data_readb(scu, nc); in pwr_reg_rdwr()
439 struct intel_scu_ipc_dev *scu = &ipcdev; in intel_scu_ipc_simple_command() local
443 if (scu->dev == NULL) { in intel_scu_ipc_simple_command()
447 ipc_command(scu, sub << 12 | cmd); in intel_scu_ipc_simple_command()
448 err = intel_scu_ipc_check_status(scu); in intel_scu_ipc_simple_command()
469 struct intel_scu_ipc_dev *scu = &ipcdev; in intel_scu_ipc_command() local
473 if (scu->dev == NULL) { in intel_scu_ipc_command()
479 ipc_data_writel(scu, *in++, 4 * i); in intel_scu_ipc_command()
481 ipc_command(scu, (inlen << 16) | (sub << 12) | cmd); in intel_scu_ipc_command()
482 err = intel_scu_ipc_check_status(scu); in intel_scu_ipc_command()
486 *out++ = ipc_data_readl(scu, 4 * i); in intel_scu_ipc_command()
515 struct intel_scu_ipc_dev *scu = &ipcdev; in intel_scu_ipc_raw_command() local
525 if (scu->dev == NULL) { in intel_scu_ipc_raw_command()
530 writel(dptr, scu->ipc_base + IPC_DPTR); in intel_scu_ipc_raw_command()
531 writel(sptr, scu->ipc_base + IPC_SPTR); in intel_scu_ipc_raw_command()
543 ipc_data_writel(scu, inbuf[i], 4 * i); in intel_scu_ipc_raw_command()
545 ipc_command(scu, (inlen << 16) | (sub << 12) | cmd); in intel_scu_ipc_raw_command()
546 err = intel_scu_ipc_check_status(scu); in intel_scu_ipc_raw_command()
549 *out++ = ipc_data_readl(scu, 4 * i); in intel_scu_ipc_raw_command()
575 struct intel_scu_ipc_dev *scu = &ipcdev; in intel_scu_ipc_i2c_cntrl() local
579 if (scu->dev == NULL) { in intel_scu_ipc_i2c_cntrl()
585 writel(addr, scu->i2c_base + IPC_I2C_CNTRL_ADDR); in intel_scu_ipc_i2c_cntrl()
588 *data = readl(scu->i2c_base + I2C_DATA_ADDR); in intel_scu_ipc_i2c_cntrl()
590 writel(*data, scu->i2c_base + I2C_DATA_ADDR); in intel_scu_ipc_i2c_cntrl()
592 writel(addr, scu->i2c_base + IPC_I2C_CNTRL_ADDR); in intel_scu_ipc_i2c_cntrl()
594 dev_err(scu->dev, in intel_scu_ipc_i2c_cntrl()
614 struct intel_scu_ipc_dev *scu = dev_id; in ioc() local
616 if (scu->irq_mode) in ioc()
617 complete(&scu->cmd_complete); in ioc()
633 struct intel_scu_ipc_dev *scu = &ipcdev; in ipc_probe() local
636 if (scu->dev) /* We support only one SCU */ in ipc_probe()
643 scu->irq_mode = pdata->irq_mode; in ipc_probe()
653 init_completion(&scu->cmd_complete); in ipc_probe()
655 scu->ipc_base = pcim_iomap_table(pdev)[0]; in ipc_probe()
657 scu->i2c_base = ioremap_nocache(pdata->i2c_base, pdata->i2c_len); in ipc_probe()
658 if (!scu->i2c_base) in ipc_probe()
662 scu); in ipc_probe()
667 scu->dev = &pdev->dev; in ipc_probe()
671 pci_set_drvdata(pdev, scu); in ipc_probe()