Re: [PATCH v6 2/4] SFH: PCIe driver to add support of AMD sensor fusion

From: Andy Shevchenko
Date: Wed Aug 19 2020 - 06:40:51 EST


On Sun, Aug 9, 2020 at 1:25 PM Sandeep Singh <Sandeep.Singh@xxxxxxx> wrote:

> AMD SFH uses HID over PCIe bus.SFH fw is part of MP2 processor
> (MP2 which is an ARM® Cortex-M4 core based co-processor to x86) and
> it runs on MP2 where in driver resides on X86. This part of module

where the driver

> will communicate with MP2 FW and provide that data into DRAM

...

> +#
> +#

One is enough.

...

> +#define ACEL_EN BIT(accel_idx)
> +#define GYRO_EN BIT(gyro_idx)
> +#define MAGNO_EN BIT(mag_idx)
> +#define ALS_EN BIT(als_idx)

What is this?

...

> +int amd_mp2_get_sensor_num(struct amd_mp2_dev *privdata, u8 *sensor_id)
> +{
> + int activestatus, num_of_sensors = 0;
> +

> + if (!sensor_id)
> + return -EINVAL;

Is it possible?

> + privdata->activecontrolstatus = readl(privdata->mmio + AMD_P2C_MSG3);
> + activestatus = privdata->activecontrolstatus >> 4;
> + if (ACEL_EN & activestatus)
> + sensor_id[num_of_sensors++] = accel_idx;
> +
> + if (GYRO_EN & activestatus)
> + sensor_id[num_of_sensors++] = gyro_idx;
> +
> + if (MAGNO_EN & activestatus)
> + sensor_id[num_of_sensors++] = mag_idx;
> +
> + if (ALS_EN & activestatus)
> + sensor_id[num_of_sensors++] = als_idx;
> +
> + return num_of_sensors;
> +}

...

> +static int amd_mp2_pci_init(struct amd_mp2_dev *privdata, struct pci_dev *pdev)
> +{
> + int rc;
> +

> + pci_set_drvdata(pdev, privdata);

This is better to have after initial resources were retrieved.

> + pcim_enable_device(pdev);

> + pcim_iomap_regions(pdev, BIT(2), DRIVER_NAME);

Where is the error check?

> + privdata->mmio = pcim_iomap_table(pdev)[2];
> + pci_set_master(pdev);
> +
> + rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
> + if (rc)
> + rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
> + return rc;
> +}

What is the point to have this function separated from ->probe()?

...

> + rc = amd_sfh_hid_client_init(privdata);
> + if (rc)
> + return rc;
> + return 0;

return amd_...(...);

...

> +static const struct pci_device_id amd_mp2_pci_tbl[] = {
> + { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_MP2) },

> + {},

No comma.

> +};

...

> +#include <linux/pci.h>

I don't see any users of it in the file.
Use forward declaration instead.

> +#include <linux/types.h>

...

> +enum command_id {
> + enable_sensor = 1,
> + disable_sensor = 2,
> + stop_all_sensors = 8,

> + invalid_cmd = 0xf

GENMASK()?
(Will require bits.h)

> +};
> +
> +enum sensor_idx {
> + accel_idx = 0,
> + gyro_idx = 1,
> + mag_idx = 2,
> + als_idx = 19

+ comma.

> +};
> +
> +struct amd_mp2_dev {
> + struct pci_dev *pdev;
> + struct amdtp_cl_data *cl_data;

> + void __iomem *mmio;

Is __iomem provided by linux/types.h? Otherwise include corresponding header.

> + u32 activecontrolstatus;
> +};

--
With Best Regards,
Andy Shevchenko