Re: [PATCH 10/14] soc: hisilicon: kunpeng_hccs: Simplify PCC shared memory region handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




在 2025/3/3 18:51, Sudeep Holla 写道:
The PCC driver now handles mapping and unmapping of shared memory
areas as part of pcc_mbox_{request,free}_channel(). Without these before,
this Kunpeng HCCS 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: Huisong Li <lihuisong@xxxxxxxxxx>
Signed-off-by: Sudeep Holla <sudeep.holla@xxxxxxx>
With belows to change,
Reviewed-by: Huisong Li <lihuisong@xxxxxxxxxx>
---
  drivers/soc/hisilicon/kunpeng_hccs.c | 38 ++++++++++++------------------------
  drivers/soc/hisilicon/kunpeng_hccs.h |  2 --
  2 files changed, 13 insertions(+), 27 deletions(-)

diff --git a/drivers/soc/hisilicon/kunpeng_hccs.c b/drivers/soc/hisilicon/kunpeng_hccs.c
index 8aa8dec14911cdcdc2a2d11606bf6159144e9489..3b57189cd778f507afaa89bf47f0fa834043c244 100644
--- a/drivers/soc/hisilicon/kunpeng_hccs.c
+++ b/drivers/soc/hisilicon/kunpeng_hccs.c
@@ -167,10 +167,6 @@ static void hccs_pcc_rx_callback(struct mbox_client *cl, void *mssg)
static void hccs_unregister_pcc_channel(struct hccs_dev *hdev)
  {
-	struct hccs_mbox_client_info *cl_info = &hdev->cl_info;
-
-	if (cl_info->pcc_comm_addr)
-		iounmap(cl_info->pcc_comm_addr);
  	pcc_mbox_free_channel(hdev->cl_info.pcc_chan);
  }
@@ -179,6 +175,7 @@ static int hccs_register_pcc_channel(struct hccs_dev *hdev)
  	struct hccs_mbox_client_info *cl_info = &hdev->cl_info;
  	struct mbox_client *cl = &cl_info->client;
  	struct pcc_mbox_chan *pcc_chan;
+	struct mbox_chan *mbox_chan;
  	struct device *dev = hdev->dev;
  	int rc;
@@ -196,7 +193,7 @@ static int hccs_register_pcc_channel(struct hccs_dev *hdev)
  		goto out;
  	}
  	cl_info->pcc_chan = pcc_chan;
-	cl_info->mbox_chan = pcc_chan->mchan;
+	mbox_chan = pcc_chan->mchan;
/*
  	 * pcc_chan->latency is just a nominal value. In reality the remote
@@ -206,34 +203,24 @@ static int hccs_register_pcc_channel(struct hccs_dev *hdev)
  	cl_info->deadline_us =
  			HCCS_PCC_CMD_WAIT_RETRIES_NUM * pcc_chan->latency;
  	if (!hdev->verspec_data->has_txdone_irq &&
-	    cl_info->mbox_chan->mbox->txdone_irq) {
+	    mbox_chan->mbox->txdone_irq) {
  		dev_err(dev, "PCC IRQ in PCCT is enabled.\n");
  		rc = -EINVAL;
  		goto err_mbx_channel_free;
  	} else if (hdev->verspec_data->has_txdone_irq &&
-		   !cl_info->mbox_chan->mbox->txdone_irq) {
+		   !mbox_chan->mbox->txdone_irq) {
  		dev_err(dev, "PCC IRQ in PCCT isn't supported.\n");
  		rc = -EINVAL;
  		goto err_mbx_channel_free;
  	}
- if (!pcc_chan->shmem_base_addr ||
-	    pcc_chan->shmem_size != HCCS_PCC_SHARE_MEM_BYTES) {
+	if (pcc_chan->shmem_size != HCCS_PCC_SHARE_MEM_BYTES) {
  		dev_err(dev, "The base address or size (%llu) of PCC communication region is invalid.\n",
  			pcc_chan->shmem_size);

Now the check of shared base address is not here. The log about this address no need to be printed.

Can you help me fix it like:

dev_err(dev, "The base size (%llu) of PCC communication region must be %d Byte.\n",
 			pcc_chan->shmem_size, HCCS_PCC_SHARE_MEM_BYTES
);

  		rc = -EINVAL;
  		goto err_mbx_channel_free;
  	}





[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]
  Powered by Linux