Message ID | 20250303-pcc_fixes_updates-v1-12-3b44f3d134b1@arm.com (mailing list archive) |
---|---|
State | Handled Elsewhere |
Headers | show |
Series | mailbox: pcc: Fixes and cleanup/refactoring | expand |
On 3/3/25 02:51, Sudeep Holla wrote: > The PCC driver now handles mapping and unmapping of shared memory > areas as part of pcc_mbox_{request,free}_channel(). Without these before, > this xgene hwmon driver did handling of those mappings like several > other PCC mailbox client drivers. > > There were redundant operations, leading to unnecessary code. Maintaining > the consistency across these driver was harder due to scattered handling > of shmem. > > Just use the mapped shmem and remove all redundant operations from this > driver. > > Cc: Jean Delvare <jdelvare@suse.com> > Cc: Guenter Roeck <linux@roeck-us.net> > Cc: linux-hwmon@vger.kernel.org > Signed-off-by: Sudeep Holla <sudeep.holla@arm.com> Acked-by: Guenter Roeck <linux@roeck-us.net> Note that I'll apply a fix this week which will cause a context conflict. See below. > --- > drivers/hwmon/xgene-hwmon.c | 40 ++++------------------------------------ ... > @@ -685,34 +681,6 @@ static int xgene_hwmon_probe(struct platform_device *pdev) > goto out; > } > > - /* > - * This is the shared communication region > - * for the OS and Platform to communicate over. > - */ > - ctx->comm_base_addr = pcc_chan->shmem_base_addr; > - if (ctx->comm_base_addr) { > - if (version == XGENE_HWMON_V2) > - ctx->pcc_comm_addr = (void __force *)devm_ioremap(&pdev->dev, > - ctx->comm_base_addr, > - pcc_chan->shmem_size); > - else > - ctx->pcc_comm_addr = devm_memremap(&pdev->dev, > - ctx->comm_base_addr, > - pcc_chan->shmem_size, > - MEMREMAP_WB); > - } else { > - dev_err(&pdev->dev, "Failed to get PCC comm region\n"); > - rc = -ENODEV; > - goto out; > - } > - > - if (!ctx->pcc_comm_addr) { This needed to be IS_ERR_OR_NULL() since devm_memremap() returns an ERR_PTR. Thanks, Guenter
On Mon, Mar 03, 2025 at 05:55:57AM -0800, Guenter Roeck wrote: > On 3/3/25 02:51, Sudeep Holla wrote: > > The PCC driver now handles mapping and unmapping of shared memory > > areas as part of pcc_mbox_{request,free}_channel(). Without these before, > > this xgene hwmon driver did handling of those mappings like several > > other PCC mailbox client drivers. > > > > There were redundant operations, leading to unnecessary code. Maintaining > > the consistency across these driver was harder due to scattered handling > > of shmem. > > > > Just use the mapped shmem and remove all redundant operations from this > > driver. > > > > Cc: Jean Delvare <jdelvare@suse.com> > > Cc: Guenter Roeck <linux@roeck-us.net> > > Cc: linux-hwmon@vger.kernel.org > > Signed-off-by: Sudeep Holla <sudeep.holla@arm.com> > > Acked-by: Guenter Roeck <linux@roeck-us.net> > > Note that I'll apply a fix this week which will cause a context conflict. > See below. > Sure, I was planning to repost these individually after the mailbox changes are merged. I am not sure if I can get some testing on this xgene platform as I am changing the mapping attributes which currently is different for different versions of firmware and both are incorrect in terms of ACPI spec. In short, no rush. The idea of posting these is to show how duplicate code can be removed. I will post it independently sometime in the future. > > This needed to be IS_ERR_OR_NULL() since devm_memremap() returns an ERR_PTR. > True. IIRC, there are few valid iomem related sparse warnings which I plan to fix and post it together once the PCC changes are merged. Thanks for the review.
diff --git a/drivers/hwmon/xgene-hwmon.c b/drivers/hwmon/xgene-hwmon.c index 1e3bd129a922d25ff25142d864503377773304a8..ea350d4de902c4e6fc4de1cd54a8b75edfad1119 100644 --- a/drivers/hwmon/xgene-hwmon.c +++ b/drivers/hwmon/xgene-hwmon.c @@ -102,9 +102,6 @@ struct xgene_hwmon_dev { struct device *hwmon_dev; bool temp_critical_alarm; - - phys_addr_t comm_base_addr; - void *pcc_comm_addr; u64 usecs_lat; }; @@ -125,7 +122,8 @@ static u16 xgene_word_tst_and_clr(u16 *addr, u16 mask) static int xgene_hwmon_pcc_rd(struct xgene_hwmon_dev *ctx, u32 *msg) { - struct acpi_pcct_shared_memory *generic_comm_base = ctx->pcc_comm_addr; + struct acpi_pcct_shared_memory __iomem *generic_comm_base = + ctx->pcc_chan->shmem; u32 *ptr = (void *)(generic_comm_base + 1); int rc, i; u16 val; @@ -523,7 +521,8 @@ static void xgene_hwmon_rx_cb(struct mbox_client *cl, void *msg) static void xgene_hwmon_pcc_rx_cb(struct mbox_client *cl, void *msg) { struct xgene_hwmon_dev *ctx = to_xgene_hwmon_dev(cl); - struct acpi_pcct_shared_memory *generic_comm_base = ctx->pcc_comm_addr; + struct acpi_pcct_shared_memory __iomem *generic_comm_base = + ctx->pcc_chan->shmem; struct slimpro_resp_msg amsg; /* @@ -649,7 +648,6 @@ static int xgene_hwmon_probe(struct platform_device *pdev) } else { struct pcc_mbox_chan *pcc_chan; const struct acpi_device_id *acpi_id; - int version; acpi_id = acpi_match_device(pdev->dev.driver->acpi_match_table, &pdev->dev); @@ -658,8 +656,6 @@ static int xgene_hwmon_probe(struct platform_device *pdev) goto out_mbox_free; } - version = (int)acpi_id->driver_data; - if (device_property_read_u32(&pdev->dev, "pcc-channel", &ctx->mbox_idx)) { dev_err(&pdev->dev, "no pcc-channel property\n"); @@ -685,34 +681,6 @@ static int xgene_hwmon_probe(struct platform_device *pdev) goto out; } - /* - * This is the shared communication region - * for the OS and Platform to communicate over. - */ - ctx->comm_base_addr = pcc_chan->shmem_base_addr; - if (ctx->comm_base_addr) { - if (version == XGENE_HWMON_V2) - ctx->pcc_comm_addr = (void __force *)devm_ioremap(&pdev->dev, - ctx->comm_base_addr, - pcc_chan->shmem_size); - else - ctx->pcc_comm_addr = devm_memremap(&pdev->dev, - ctx->comm_base_addr, - pcc_chan->shmem_size, - MEMREMAP_WB); - } else { - dev_err(&pdev->dev, "Failed to get PCC comm region\n"); - rc = -ENODEV; - goto out; - } - - if (!ctx->pcc_comm_addr) { - dev_err(&pdev->dev, - "Failed to ioremap PCC comm region\n"); - rc = -ENOMEM; - goto out; - } - /* * pcc_chan->latency is just a Nominal value. In reality * the remote processor could be much slower to reply.
The PCC driver now handles mapping and unmapping of shared memory areas as part of pcc_mbox_{request,free}_channel(). Without these before, this xgene hwmon driver did handling of those mappings like several other PCC mailbox client drivers. There were redundant operations, leading to unnecessary code. Maintaining the consistency across these driver was harder due to scattered handling of shmem. Just use the mapped shmem and remove all redundant operations from this driver. Cc: Jean Delvare <jdelvare@suse.com> Cc: Guenter Roeck <linux@roeck-us.net> Cc: linux-hwmon@vger.kernel.org Signed-off-by: Sudeep Holla <sudeep.holla@arm.com> --- drivers/hwmon/xgene-hwmon.c | 40 ++++------------------------------------ 1 file changed, 4 insertions(+), 36 deletions(-)