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]

 



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.

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

/Andreas






[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