From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id ED4BCC71157 for ; Thu, 19 Jun 2025 01:47:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5934E6B00AE; Wed, 18 Jun 2025 21:47:24 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5434E6B00B0; Wed, 18 Jun 2025 21:47:24 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 431F16B00B2; Wed, 18 Jun 2025 21:47:24 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 2249C6B00AE for ; Wed, 18 Jun 2025 21:47:24 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id B9A6E1A151B for ; Thu, 19 Jun 2025 01:47:23 +0000 (UTC) X-FDA: 83570462766.21.7D5F68F Received: from zg8tmtyylji0my4xnjqumte4.icoremail.net (zg8tmtyylji0my4xnjqumte4.icoremail.net [162.243.164.118]) by imf07.hostedemail.com (Postfix) with ESMTP id 0FE0340005 for ; Thu, 19 Jun 2025 01:47:20 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=none; spf=pass (imf07.hostedemail.com: domain of wangyuquan1236@phytium.com.cn designates 162.243.164.118 as permitted sender) smtp.mailfrom=wangyuquan1236@phytium.com.cn; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750297642; a=rsa-sha256; cv=none; b=IAMkigP3QhN1HYI/ZUTmslyQeL31dmcVaKEFoRbEFM55OvYKB1Y/JJ1cBSdwetWDi825Gj o6X2HLqHkAZbkmTrWof0z4hwFpKT2qS9cmffdB5M83or+/h4NnnNr3x3iMrjWalZOxBSki fD2CdGdPdTQEqaSzbeNdAN05+6/1210= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=none; spf=pass (imf07.hostedemail.com: domain of wangyuquan1236@phytium.com.cn designates 162.243.164.118 as permitted sender) smtp.mailfrom=wangyuquan1236@phytium.com.cn; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750297642; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=q5+yYUf7Xh3+LgfYB7E570yqxTmwU49GkFB3PlAclmA=; b=ZrMY4MbfxHo5C8n8/V9mYOqcEHMs3ICOLojmCUFmzodUmhBi89OtgJT8xxHd8IVvNSjc9y lbFjxT+GqAy29Lz+LE3RpsvVg2igiAeezO95pjkSliVax9B6jAoqrEetGZ3M7RLoMLGAVz uS4N/X03IkkwHF9PZa1j+ORC/dQNslA= Received: from prodtpl.icoremail.net (unknown [10.12.1.20]) by hzbj-icmmx-6 (Coremail) with SMTP id AQAAfwAnwsUebFNoGCsbAw--.47393S2; Thu, 19 Jun 2025 09:47:10 +0800 (CST) Received: from localhost (unknown [123.150.8.50]) by mail (Coremail) with SMTP id AQAAfwD3jCYVbFNohbBXAA--.8864S2; Thu, 19 Jun 2025 09:47:02 +0800 (CST) Date: Thu, 19 Jun 2025 09:47:00 +0800 From: Yuquan Wang To: Jonathan Cameron Cc: linux-cxl@vger.kernel.org, linux-mm@kvack.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, linuxarm@huawei.com, tongtiangen@huawei.com, Yicong Yang , Niyas Sait , ajayjoshi@micron.com, Vandana Salve , Davidlohr Bueso , Dave Jiang , Alison Schofield , Ira Weiny , Dan Williams , Alexander Shishkin , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Gregory Price , Huang Ying Subject: Re: [RFC PATCH 1/4] cxl: Register devices for CXL Hotness Monitoring Units (CHMU) Message-ID: References: <20241121101845.1815660-1-Jonathan.Cameron@huawei.com> <20241121101845.1815660-2-Jonathan.Cameron@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20241121101845.1815660-2-Jonathan.Cameron@huawei.com> X-CM-TRANSID:AQAAfwD3jCYVbFNohbBXAA--.8864S2 X-CM-SenderInfo: 5zdqw5pxtxt0arstlqxsk13x1xpou0fpof0/1tbiAQAFAWhRxgsBrAAjs- X-Coremail-Antispam: 1Uk129KBjvJXoWxKrWkCFW5KF4kXw47CrWUCFg_yoWxKF4DpF W8CFWrGr48JF9F9ry3Xay5ZFn8W3Z29FyUuryIq34avFnxAFyDJF4UJayUAryrC3ykGw47 WF15Kr10kayYgr7anT9S1TB71UUUUUDqnTZGkaVYY2UrUUUUj1kv1TuYvTs0mT0YCTnIWj DUYxn0WfASr-VFAU7a7-sFnT9fnUUIcSsGvfJ3UbIYCTnIWIevJa73UjIFyTuYvj4RJUUU UUUUU X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 0FE0340005 X-Stat-Signature: 7zk9djw4uwjwmp3xzmhbo7rw3u9zk8cd X-Rspam-User: X-HE-Tag: 1750297640-161854 X-HE-Meta: U2FsdGVkX1/wE8oJPqMIIt2Qpn5Evw8TnJhRaXy4lao7Yw3J3cekhzlGGgqS4ZXgUIjCZGF/evnXA+o8I2oE2wgKdoq87lMZkOZfkNOoV+94AbxsCDpM1plNs3oQ3GFW9FwII2sq0zlpqGt5z3yePRzqGtPQWmNOn+a+J8iimnc3n+KTaungxKqnhL63VBh9n90Q/UQjSw6/orkBDCRhMO4VwGhu+LTodyp8nfkZMh1WEXUdr9Ul8OlFwboqLZH2wKqC8ZyP93Jnc/c4nCU0ZuvWCDwwwmJid+6PfdpuyQs195KjnFEC7IwnW4AwtXDDUIgbphsG9+2hropzRdID92RhcIFzy6e3PIvTvsXqTUBm6P/yddvH9H9a4RN8Lrwr5GIhM1QOd/3f0sTT5TtgO0+Y4OHKlU1c2WloK6raV7sDMa7o44eh2uAwih9/yVrVH6yo4Mk3jxdokCuIR8pN5lI+lcmZrd68SefDx5JyUUJkKUZ0Or6EnIqoU1tbEqleYbZoRzZfNcjmkwMcHixxy/ofIeqJdJXb77GoDZlbE8EEFZDMigNm67M/AuwNVYwZd7amO7/mKDR1oxWcfnAY1+7E2RheQPEveBi0gHnDX5cRSISk0A5voRLfpqQI7rRm+cxULZPVPaWMLR9Z0IXcZ/VyGniCIiZg8XOHl2yco3qU22IQbNfZW3UkJ5mwDjl/UeqRQw9C9CCtVaMd03Z2XxvzD4BzvJ+2od82IGwujYXffZ+fKogKLnOepNxVr1+yqElL0hEZ5bl3oOntgmJFx0vNaEBNl2dQ2twQPpfHvdz52KcV3qaa/Z5gbF2aJwl3MtEGKhzGSWtUmOhfhIIhrrgQWqhVcNFUWGxOTXH+MIW1sNZc0QDjdPcXg9ETM+uPsir1rWVRD596ZvgD6CahOSe1gMIO+NsYXLLlZjJsuYXlh30dMc5x/YDnnTw2kigNI+u32DqEdy7RqqKHrxo cMXGuaD8 F7E9sCn3s0DAcM+x0zDOcTiFmX0fFsBTxY1IOaFJkE+WfQVy7cN8LpWGJP5LuU5zbJJxFxXkbiJ+JsHxNRIisGnkLJMrdonNup7p+pU/atfG5l8O7Hl7xZXhrCIBzHcF2DwV1LMqL5hOc8sw1lsg8rNlPZLHacIwpQbBq4CN1/xafDKKHt//cFNgbQeMe0mdea+0y X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Thu, Nov 21, 2024 at 10:18:42AM +0000, Jonathan Cameron wrote: > Basic registration using similar approach to how the CPMUs > are registered. > > Signed-off-by: Jonathan Cameron > --- > drivers/cxl/core/Makefile | 1 + > drivers/cxl/core/hmu.c | 64 +++++++++++++++++++++++++++++++++++++++ > drivers/cxl/core/regs.c | 14 +++++++++ > drivers/cxl/cxl.h | 4 +++ > drivers/cxl/cxlpci.h | 1 + > drivers/cxl/hmu.h | 23 ++++++++++++++ > drivers/cxl/pci.c | 26 +++++++++++++++- > 7 files changed, 132 insertions(+), 1 deletion(-) > > diff --git a/drivers/cxl/core/Makefile b/drivers/cxl/core/Makefile > index 9259bcc6773c..d060abb773ae 100644 > --- a/drivers/cxl/core/Makefile > +++ b/drivers/cxl/core/Makefile > @@ -12,6 +12,7 @@ cxl_core-y += memdev.o > cxl_core-y += mbox.o > cxl_core-y += pci.o > cxl_core-y += hdm.o > +cxl_core-y += hmu.o > cxl_core-y += pmu.o > cxl_core-y += cdat.o > cxl_core-$(CONFIG_TRACING) += trace.o > diff --git a/drivers/cxl/core/hmu.c b/drivers/cxl/core/hmu.c > new file mode 100644 > index 000000000000..3ee938bb6c05 > --- /dev/null > +++ b/drivers/cxl/core/hmu.c > @@ -0,0 +1,64 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* Copyright(c) 2024 Huawei. All rights reserved. */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include "core.h" > + > +static void cxl_hmu_release(struct device *dev) > +{ > + struct cxl_hmu *hmu = to_cxl_hmu(dev); > + > + kfree(hmu); > +} > + > +const struct device_type cxl_hmu_type = { > + .name = "cxl_hmu", > + .release = cxl_hmu_release, > +}; > + > +static void remove_dev(void *dev) > +{ > + device_unregister(dev); > +} > + > +int devm_cxl_hmu_add(struct device *parent, struct cxl_hmu_regs *regs, > + int assoc_id, int index) > +{ > + struct cxl_hmu *hmu; > + struct device *dev; > + int rc; > + > + hmu = kzalloc(sizeof(*hmu), GFP_KERNEL); > + if (!hmu) > + return -ENOMEM; > + > + hmu->assoc_id = assoc_id; > + hmu->index = index; > + hmu->base = regs->hmu; > + dev = &hmu->dev; > + device_initialize(dev); > + device_set_pm_not_required(dev); > + dev->parent = parent; > + dev->bus = &cxl_bus_type; > + dev->type = &cxl_hmu_type; > + rc = dev_set_name(dev, "hmu_mem%d.%d", assoc_id, index); > + if (rc) > + goto err; > + > + rc = device_add(dev); > + if (rc) > + goto err; > + > + return devm_add_action_or_reset(parent, remove_dev, dev); > + > +err: > + put_device(&hmu->dev); > + return rc; > +} > +EXPORT_SYMBOL_NS_GPL(devm_cxl_hmu_add, CXL); > + > diff --git a/drivers/cxl/core/regs.c b/drivers/cxl/core/regs.c > index e1082e749c69..c12afaa6ef98 100644 > --- a/drivers/cxl/core/regs.c > +++ b/drivers/cxl/core/regs.c > @@ -401,6 +401,20 @@ int cxl_map_pmu_regs(struct cxl_register_map *map, struct cxl_pmu_regs *regs) > } > EXPORT_SYMBOL_NS_GPL(cxl_map_pmu_regs, CXL); > > +int cxl_map_hmu_regs(struct cxl_register_map *map, struct cxl_hmu_regs *regs) > +{ > + struct device *dev = map->host; > + resource_size_t phys_addr; > + > + phys_addr = map->resource; > + regs->hmu = devm_cxl_iomap_block(dev, phys_addr, map->max_size); I applied CHMU patch on 6.15.0 kernel and I tried to boot the virt with one cxl root port and one device (jic23/cxl-2025-06-10), then the dmesg shows "Failed to request region 0x10210000-0x1023ffff". I guess it is caused by the 'map->max_size'(0x30000) is large and the resource has been allocated by CPMU regs. I tried to change it to 0x10000, the hmu_mem0.0 could be created as normal. > + if (!regs->hmu) > + return -ENOMEM; > + > + return 0; > +} > +EXPORT_SYMBOL_NS_GPL(cxl_map_hmu_regs, CXL); > + > static int cxl_map_regblock(struct cxl_register_map *map) > { > struct device *host = map->host; > diff --git a/drivers/cxl/cxl.h b/drivers/cxl/cxl.h > index 5406e3ab3d4a..8172bc1f7a8d 100644 > --- a/drivers/cxl/cxl.h > +++ b/drivers/cxl/cxl.h > @@ -227,6 +227,9 @@ struct cxl_regs { > struct_group_tagged(cxl_pmu_regs, pmu_regs, > void __iomem *pmu; > ); > + struct_group_tagged(cxl_hmu_regs, hmu_regs, > + void __iomem *hmu; > + ); > > /* > * RCH downstream port specific RAS register > @@ -292,6 +295,7 @@ int cxl_map_component_regs(const struct cxl_register_map *map, > unsigned long map_mask); > int cxl_map_device_regs(const struct cxl_register_map *map, > struct cxl_device_regs *regs); > +int cxl_map_hmu_regs(struct cxl_register_map *map, struct cxl_hmu_regs *regs); > int cxl_map_pmu_regs(struct cxl_register_map *map, struct cxl_pmu_regs *regs); > > enum cxl_regloc_type; > diff --git a/drivers/cxl/cxlpci.h b/drivers/cxl/cxlpci.h > index 4da07727ab9c..71f5e9620137 100644 > --- a/drivers/cxl/cxlpci.h > +++ b/drivers/cxl/cxlpci.h > @@ -67,6 +67,7 @@ enum cxl_regloc_type { > CXL_REGLOC_RBI_VIRT, > CXL_REGLOC_RBI_MEMDEV, > CXL_REGLOC_RBI_PMU, > + CXL_REGLOC_RBI_HMU, > CXL_REGLOC_RBI_TYPES > }; > > diff --git a/drivers/cxl/hmu.h b/drivers/cxl/hmu.h > new file mode 100644 > index 000000000000..c4798ed9764b > --- /dev/null > +++ b/drivers/cxl/hmu.h > @@ -0,0 +1,23 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +/* > + * Copyright(c) 2024 Huawei > + * CXL Specification rev 3.2 Setion 8.2.8 (CHMU Register Interface) > + */ > +#ifndef CXL_HMU_H > +#define CXL_HMU_H > +#include > + > +#define CXL_HMU_REGMAP_SIZE 0xe00 /* Table 8-32 CXL 3.0 specification */ > +struct cxl_hmu { > + struct device dev; > + void __iomem *base; > + int assoc_id; > + int index; > +}; > + > +#define to_cxl_hmu(dev) container_of(dev, struct cxl_hmu, dev) > +struct cxl_hmu_regs; > +int devm_cxl_hmu_add(struct device *parent, struct cxl_hmu_regs *regs, > + int assoc_id, int idx); > + > +#endif > diff --git a/drivers/cxl/pci.c b/drivers/cxl/pci.c > index 188412d45e0d..e89ea9d3f007 100644 > --- a/drivers/cxl/pci.c > +++ b/drivers/cxl/pci.c > @@ -15,6 +15,7 @@ > #include "cxlmem.h" > #include "cxlpci.h" > #include "cxl.h" > +#include "hmu.h" > #include "pmu.h" > > /** > @@ -814,7 +815,7 @@ static int cxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) > struct cxl_dev_state *cxlds; > struct cxl_register_map map; > struct cxl_memdev *cxlmd; > - int i, rc, pmu_count; > + int i, rc, hmu_count, pmu_count; > bool irq_avail; > > /* > @@ -938,6 +939,29 @@ static int cxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) > } > } > > + hmu_count = cxl_count_regblock(pdev, CXL_REGLOC_RBI_HMU); > + for (i = 0; i < hmu_count; i++) { > + struct cxl_hmu_regs hmu_regs; > + > + rc = cxl_find_regblock_instance(pdev, CXL_REGLOC_RBI_HMU, &map, i); > + if (rc) { > + dev_dbg(&pdev->dev, "Could not find HMU regblock\n"); > + break; > + } > + > + rc = cxl_map_hmu_regs(&map, &hmu_regs); > + if (rc) { > + dev_dbg(&pdev->dev, "Could not map HMU regs\n"); > + break; > + } > + > + rc = devm_cxl_hmu_add(cxlds->dev, &hmu_regs, cxlmd->id, i); > + if (rc) { > + dev_dbg(&pdev->dev, "Could not add HMU instance\n"); > + break; > + } > + } > + > rc = cxl_event_config(host_bridge, mds, irq_avail); > if (rc) > return rc; > -- > 2.43.0 >