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 1/3/24 5:25 PM, Andreas Helbech Kleist wrote:
> Hi, 
> 
> On Thu, 2023-12-28 at 14:39 +0800, Bingbu Cao wrote:
>> 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.
> 
> Then I suppose they can be added if a psys driver is submitted upstream
> at some point.

For IPU subsystem, the fwcom interface (IPU6 driver) is a common
interface for both isys and psys. It makes sense that making the
common interface scalable even it is only set by isys driver now.

> 
> Is is it the intention to submit a psys driver as well?

Yes, we are going to submit a IPU6 psys driver, but it will take more
time to get ready.

> 
> /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