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]