Re: [PATCH v2 06/15] media: intel/ipu6: add syscom interfaces between firmware and driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Andreas,

On 11/23/23 5:33 PM, Andreas Helbech Kleist wrote:
> Hi,
> 
> On Tue, 2023-10-24 at 19:29 +0800, bingbu.cao@xxxxxxxxx wrote:
>> From: Bingbu Cao <bingbu.cao@xxxxxxxxx>
>>
>> Syscom is an inter-process(or) communication mechanism between an IPU
>> and host. Syscom uses message queues for message exchange between IPU
>> and host. Each message queue has its consumer and producer, host
>> queue
>> messages to firmware as the producer and then firmware to dequeue the
>> messages as consumer and vice versa. IPU and host use shared
>> registers
>> or memory to reside the read and write indices which are updated by
>> consumer and producer.
>>
>> Signed-off-by: Bingbu Cao <bingbu.cao@xxxxxxxxx>
>> ---
>>  drivers/media/pci/intel/ipu6/ipu6-fw-com.c | 411
>> +++++++++++++++++++++
>>  drivers/media/pci/intel/ipu6/ipu6-fw-com.h |  47 +++
>>  2 files changed, 458 insertions(+)
>>  create mode 100644 drivers/media/pci/intel/ipu6/ipu6-fw-com.c
>>  create mode 100644 drivers/media/pci/intel/ipu6/ipu6-fw-com.h
> ...
>> +struct ipu6_fw_com_context {
>> +       struct ipu6_bus_device *adev;
>> +       void __iomem *dmem_addr;
>> +       int (*cell_ready)(struct ipu6_bus_device *adev);
>> +       void (*cell_start)(struct ipu6_bus_device *adev);
> 
> Why are cell_ready and cell_start function pointers? They seem to
> always be set to query_sp and start_sp.
> 
>> +
>> +       void *dma_buffer;
>> +       dma_addr_t dma_addr;
>> +       unsigned int dma_size;
>> +       unsigned long attrs;
>> +
>> +       struct ipu6_fw_sys_queue *input_queue;  /* array of host to
>> SP queues */
>> +       struct ipu6_fw_sys_queue *output_queue; /* array of SP to
>> host */
>> +
>> +       u32 config_vied_addr;
>> +
>> +       unsigned int buttress_boot_offset;
>> +       void __iomem *base_addr;
>> +};
>> +
>> +#define FW_COM_WR_REG 0
>> +#define FW_COM_RD_REG 4
>> +
>> +#define REGMEM_OFFSET 0
>> +#define TUNIT_MAGIC_PATTERN 0x5a5a5a5a
>> +
>> +enum regmem_id {
>> +       /* pass pkg_dir address to SPC in non-secure mode */
>> +       PKG_DIR_ADDR_REG = 0,
>> +       /* Tunit CFG blob for secure - provided by host.*/
>> +       TUNIT_CFG_DWR_REG = 1,
>> +       /* syscom commands - modified by the host */
>> +       SYSCOM_COMMAND_REG = 2,
>> +       /* Store interrupt status - updated by SP */
>> +       SYSCOM_IRQ_REG = 3,
>> +       /* first syscom queue pointer register */
>> +       SYSCOM_QPR_BASE_REG = 4
>> +};
>> +
>> +enum message_direction {
>> +       DIR_RECV = 0,
>> +       DIR_SEND
>> +};
> 
> Not used?

Ack, will remove.

> 
> 
> ...
>> +struct ipu6_fw_com_cfg {
>> +       unsigned int num_input_queues;
>> +       unsigned int num_output_queues;
>> +       struct ipu6_fw_syscom_queue_config *input;
>> +       struct ipu6_fw_syscom_queue_config *output;
>> +
>> +       unsigned int dmem_addr;
>> +
>> +       /* firmware-specific configuration data */
>> +       void *specific_addr;
>> +       unsigned int specific_size;
>> +       int (*cell_ready)(struct ipu6_bus_device *adev);
>> +       void (*cell_start)(struct ipu6_bus_device *adev);
>> +
>> +       unsigned int buttress_boot_offset;
> 
> This seems to always be 0 (set by ipu6-fw-isys.c), seems to be trivial
> to remove.

All these fields are all used to extend for psys driver.

> 
> /Andreas
> 

-- 
Best regards,
Bingbu Cao




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux