On Thu Aug 27 15:33:27 2026 +0300, Antti Laakso wrote:
> Buttress registers are stored in separate buffer, which is passed
> down to bus driver. Move allocation of this buffer to subsystem init
> to cleanup pci probe function a bit.
> 
> Signed-off-by: Antti Laakso <[email protected]>
> Signed-off-by: Sakari Ailus <[email protected]>

Patch committed.

Thanks,
Sakari Ailus

 drivers/media/pci/intel/ipu6/ipu6.c | 43 +++++++++++++++++++------------------
 1 file changed, 22 insertions(+), 21 deletions(-)

---

diff --git a/drivers/media/pci/intel/ipu6/ipu6.c 
b/drivers/media/pci/intel/ipu6/ipu6.c
index 7d1c3713a69b..4e4f32723904 100644
--- a/drivers/media/pci/intel/ipu6/ipu6.c
+++ b/drivers/media/pci/intel/ipu6/ipu6.c
@@ -90,7 +90,7 @@ static struct ipu6_psys_internal_pdata psys_ipdata = {
        },
 };
 
-static const struct ipu6_buttress_ctrl isys_buttress_ctrl = {
+static const struct ipu6_buttress_ctrl ipu6_isys_buttress_ctrl = {
        .subsys_id = IPU_ISYS,
        .ratio = IPU6_IS_FREQ_CTL_DEFAULT_RATIO,
        .qos_floor = IPU6_IS_FREQ_CTL_DEFAULT_QOS_FLOOR_RATIO,
@@ -101,7 +101,7 @@ static const struct ipu6_buttress_ctrl isys_buttress_ctrl = 
{
        .pwr_sts_off = IPU6_BUTTRESS_PWR_STATE_DN_DONE,
 };
 
-static const struct ipu6_buttress_ctrl psys_buttress_ctrl = {
+static const struct ipu6_buttress_ctrl ipu6_psys_buttress_ctrl = {
        .subsys_id = IPU_PSYS,
        .ratio = IPU6_PS_FREQ_CTL_DEFAULT_RATIO,
        .qos_floor = IPU6_PS_FREQ_CTL_DEFAULT_QOS_FLOOR_RATIO,
@@ -341,11 +341,12 @@ static void ipu6_internal_pdata_init(struct ipu6_device 
*isp)
 
 static struct ipu6_bus_device *
 ipu6_isys_init(struct pci_dev *pdev, struct device *parent,
-              struct ipu6_buttress_ctrl *ctrl, void __iomem *base,
+              const struct ipu6_buttress_ctrl *ctrl, void __iomem *base,
               const struct ipu6_isys_internal_pdata *ipdata)
 {
        struct device *dev = &pdev->dev;
        struct ipu6_bus_device *isys_adev;
+       struct ipu6_buttress_ctrl *devm_ctrl;
        struct ipu6_isys_pdata *pdata;
        int ret;
 
@@ -355,6 +356,10 @@ ipu6_isys_init(struct pci_dev *pdev, struct device *parent,
                return ERR_PTR(ret);
        }
 
+       devm_ctrl = devm_kmemdup(dev, ctrl, sizeof(*ctrl), GFP_KERNEL);
+       if (!devm_ctrl)
+               return ERR_PTR(-ENOMEM);
+
        pdata = kzalloc_obj(*pdata);
        if (!pdata)
                return ERR_PTR(-ENOMEM);
@@ -362,7 +367,7 @@ ipu6_isys_init(struct pci_dev *pdev, struct device *parent,
        pdata->base = base;
        pdata->ipdata = ipdata;
 
-       isys_adev = ipu6_bus_initialize_device(pdev, parent, pdata, ctrl,
+       isys_adev = ipu6_bus_initialize_device(pdev, parent, pdata, devm_ctrl,
                                               IPU6_ISYS_NAME);
        if (IS_ERR(isys_adev)) {
                kfree(pdata);
@@ -388,13 +393,19 @@ ipu6_isys_init(struct pci_dev *pdev, struct device 
*parent,
 
 static struct ipu6_bus_device *
 ipu6_psys_init(struct pci_dev *pdev, struct device *parent,
-              struct ipu6_buttress_ctrl *ctrl, void __iomem *base,
+              const struct ipu6_buttress_ctrl *ctrl, void __iomem *base,
               const struct ipu6_psys_internal_pdata *ipdata)
 {
+       struct device *dev = &pdev->dev;
        struct ipu6_bus_device *psys_adev;
+       struct ipu6_buttress_ctrl *devm_ctrl;
        struct ipu6_psys_pdata *pdata;
        int ret;
 
+       devm_ctrl = devm_kmemdup(dev, ctrl, sizeof(*ctrl), GFP_KERNEL);
+       if (!devm_ctrl)
+               return ERR_PTR(-ENOMEM);
+
        pdata = kzalloc_obj(*pdata);
        if (!pdata)
                return ERR_PTR(-ENOMEM);
@@ -402,7 +413,7 @@ ipu6_psys_init(struct pci_dev *pdev, struct device *parent,
        pdata->base = base;
        pdata->ipdata = ipdata;
 
-       psys_adev = ipu6_bus_initialize_device(pdev, parent, pdata, ctrl,
+       psys_adev = ipu6_bus_initialize_device(pdev, parent, pdata, devm_ctrl,
                                               IPU6_PSYS_NAME);
        if (IS_ERR(psys_adev)) {
                kfree(pdata);
@@ -469,7 +480,7 @@ static void ipu6_configure_vc_mechanism(struct ipu6_device 
*isp)
 
 static int ipu6_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 {
-       struct ipu6_buttress_ctrl *isys_ctrl = NULL, *psys_ctrl = NULL;
+       const struct ipu6_buttress_ctrl *isys_ctrl, *psys_ctrl;
        struct device *dev = &pdev->dev;
        void __iomem *isys_base = NULL;
        void __iomem *psys_base = NULL;
@@ -484,6 +495,8 @@ static int ipu6_pci_probe(struct pci_dev *pdev, const 
struct pci_device_id *id)
 
        isp->cpd_metadata_cmpnt_size = sizeof(struct ipu6_cpd_metadata_cmpnt);
        isp->buttress.regs = &ipu6_buttress_regs;
+       isys_ctrl = &ipu6_isys_buttress_ctrl;
+       psys_ctrl = &ipu6_psys_buttress_ctrl;
 
        switch (id->device) {
        case PCI_DEVICE_ID_INTEL_IPU6:
@@ -513,6 +526,8 @@ static int ipu6_pci_probe(struct pci_dev *pdev, const 
struct pci_device_id *id)
                isp->hw_ver = IPU_VERSION_7;
                isp->cpd_fw_name = IPU7_FIRMWARE_NAME;
                isp->buttress.regs = &ipu7_buttress_regs;
+               isys_ctrl = &ipu7_isys_buttress_ctrl;
+               psys_ctrl = &ipu7_psys_buttress_ctrl;
                break;
        default:
                return dev_err_probe(dev, -ENODEV,
@@ -582,13 +597,6 @@ static int ipu6_pci_probe(struct pci_dev *pdev, const 
struct pci_device_id *id)
                goto out_ipu6_bus_del_devices;
        }
 
-       isys_ctrl = devm_kmemdup(dev, &isys_buttress_ctrl,
-                                sizeof(isys_buttress_ctrl), GFP_KERNEL);
-       if (!isys_ctrl) {
-               ret = -ENOMEM;
-               goto out_ipu6_bus_del_devices;
-       }
-
        isp->isys = ipu6_isys_init(pdev, dev, isys_ctrl, isys_base,
                                   &isys_ipdata);
        if (IS_ERR(isp->isys)) {
@@ -596,13 +604,6 @@ static int ipu6_pci_probe(struct pci_dev *pdev, const 
struct pci_device_id *id)
                goto out_ipu6_bus_del_devices;
        }
 
-       psys_ctrl = devm_kmemdup(dev, &psys_buttress_ctrl,
-                                sizeof(psys_buttress_ctrl), GFP_KERNEL);
-       if (!psys_ctrl) {
-               ret = -ENOMEM;
-               goto out_ipu6_bus_del_devices;
-       }
-
        isp->psys = ipu6_psys_init(pdev, &isp->isys->auxdev.dev, psys_ctrl,
                                   psys_base, &psys_ipdata);
        if (IS_ERR(isp->psys)) {
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to