On Tue, Sep 5, 2017 at 8:37 AM,
<sathyanarayanan.kuppusw...@linux.intel.com> wrote:
> From: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppusw...@linux.intel.com>
>
> Hi All,
>
> Currently intel_pmc_ipc.c, intel_punit_ipc.c, intel_scu_ipc.c drivers 
> implements the same IPC features.
> This code duplication could be avoided if we implement the IPC driver as a 
> generic library and let custom
> device drivers use API provided by generic driver. This patchset mainly 
> addresses this issue.
>
> Along with above code duplication issue, This patchset also addresses 
> following issues in intel_pmc_ipc and
> intel_punit_ipc drivers.
>
> 1. Intel_pmc_ipc.c driver does not use any resource managed (devm_*) calls.
> 2. In Intel_pmc_ipc.c driver, dependent devices like PUNIT, Telemetry and 
> iTCO are created manually and uses lot of redundant buffer code.
> 3. Global variable is used to store the IPC device structure and it is used 
> across all functions in intel_pmc_ipc.c and intel_punit_ipc.c.
>
> More info on Intel IPC device library:
> -------------------------------------
>
> A generic Intel IPC class driver has been implemented and all common IPC 
> helper functions has been moved to this driver. It exposes APIs to create IPC 
> device channel, send raw IPC command and simple IPC commands. It also creates 
> device attribute to send IPC command from user space.
>
> API for creating a new IPC channel device is,
>
> struct intel_ipc_dev *devm_intel_ipc_dev_create(struct device *dev, const 
> char *devname, struct intel_ipc_dev_cfg *cfg, struct intel_ipc_dev_ops *ops)
>
> The IPC channel drivers (PUNIT/PMC/SCU) when creating a new device can 
> configure their device params like register mapping, irq, irq-mode, channel 
> type,etc  using intel_ipc_dev_cfg and intel_ipc_dev_ops arguments. After a 
> new IPC channel device is created, IPC users can use the generic APIs to make 
> IPC calls.
>
> For example, after using this new model, IPC call to PMC device will look 
> like,
>
> pmc_ipc_dev = intel_ipc_dev_get(INTEL_PMC_IPC_DEV);
> ipc_dev_raw_cmd(pmc_ipc_dev, cmd, PMC_PARAM_LEN, (u32 *)ipc_in, 1, NULL, 0, 
> 0, 0);
>
> I am still testing the driver in different products. But posted it to get 
> some early comments. I also welcome any PMC/PUNIT driver users to check these 
> patches in their product.

I have applied first patch from the series with some small changes.
Please rebase the rest on top of my review branch (review-andy).
Before sending new version, address comments that others and me did.

-- 
With Best Regards,
Andy Shevchenko

Reply via email to