From nobody Sun Nov 24 18:32:03 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1720787078; cv=none; d=zohomail.com; s=zohoarc; b=coA+AF3L0QlYMh14tGNLtpGUqNfspLFcX07rgd96j31LFsznzPcAcO4i+JMVz/pi2+ACe7s8ClUVb8Xoqt99m6uwivUX8chB8CNIJuo3MA8DNbwLqTOjQ79qghH5Sqe1y03Zc2JZ+RCuFXr5luCra7V1OvyZELohzNW+cri15Ck= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1720787078; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:Sender:Subject:Subject:To:To:Message-Id; bh=YeD62fkX7vo9+H2iy+MsaNe4pnXzaoFSZR5CuUC4jjM=; b=NBvVmOj2h5USWOT/g58vVOMqnPi1NrrO7v/ZFarxa8ATyb55VHBCoTESaBsrWzUgkMnz8t8pnqtPAloP3r3+sb4/otoTgicZ+nBU4RwDpv9RuchyfxkZ+aspGRVgDOAxHhUCv6prV7/F1FOH6YFVrxo3Poea7H84Qu0iq/q+FN0= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1720787078361469.6812195094856; Fri, 12 Jul 2024 05:24:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sSFK5-0000tI-OD; Fri, 12 Jul 2024 08:24:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sSFK4-0000nt-1n for qemu-devel@nongnu.org; Fri, 12 Jul 2024 08:24:24 -0400 Received: from frasgout.his.huawei.com ([185.176.79.56]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sSFJy-0002X0-SD for qemu-devel@nongnu.org; Fri, 12 Jul 2024 08:24:23 -0400 Received: from mail.maildlp.com (unknown [172.18.186.231]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4WL9jW0ZH9z6JB7C; Fri, 12 Jul 2024 20:23:11 +0800 (CST) Received: from lhrpeml500005.china.huawei.com (unknown [7.191.163.240]) by mail.maildlp.com (Postfix) with ESMTPS id 26EC0140CB1; Fri, 12 Jul 2024 20:24:15 +0800 (CST) Received: from SecurePC-101-06.china.huawei.com (10.122.19.247) by lhrpeml500005.china.huawei.com (7.191.163.240) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Fri, 12 Jul 2024 13:24:14 +0100 To: , Markus Armbruster , CC: , , , Dave Jiang , Huang Ying , Michael Roth , Subject: [RFC qemu 0/6] hw/cxl: Link speed and width control Date: Fri, 12 Jul 2024 13:24:08 +0100 Message-ID: <20240712122414.1448284-1-Jonathan.Cameron@huawei.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.122.19.247] X-ClientProxiedBy: lhrpeml100003.china.huawei.com (7.191.160.210) To lhrpeml500005.china.huawei.com (7.191.163.240) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=185.176.79.56; envelope-from=jonathan.cameron@huawei.com; helo=frasgout.his.huawei.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Jonathan Cameron From: Jonathan Cameron via Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZM-MESSAGEID: 1720787079680116600 Content-Type: text/plain; charset="utf-8" Based-on: [PATCH v5 00/13] acpi: NUMA nodes for CXL HB as GP + complex NUMA= test Based-on: Message-ID: 20240712110837.1439736-1-Jonathan.Cameron@huawei.com The Generic Ports support added the ability to describe the bandwidth and Latency within a host to a CXL host bridge. To be able to test the of the discovery path used by Linux [1] we also need to be able to create bottlenecks at difference places in the topology. There are two parts to this * CXL link characteristics as described by PCI Express Capability Link status etc. * Bandwidth and latency across CXL Switches (via CDAT data from the switch USP) * Bandwidth and latency from the CXL type 3 device port to the actual memory (Via CDAT data from the EP). Currently we have fixed values for the CXL CDAT tables, and to test this I recommend changing those as per the patch at the end of this cover letter (so they aren't always the bottleneck). Making those configurable will be handled in a future patch set. RFC question: - I could enable this for all PCIe device (including ports). Does that makes sense, or is it better to limit this to my cases. It is quite easy to build broken setups (downstream device reports faster link than the port etc) because QEMU 'link' training' is simplistic. I'm not sure it is worth making it more clever. Test case snippets I promised Dave Jiang. These rely on the tweaks to CDAT at end of this cover letter. Case 1: Direct connected pair of type 3 nodes on same HB - type 3 limited =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D -object memory-backend-file,id=3Dcxl-mem1,share=3Don,mem-path=3D/tmp/t3_cx= l1.raw,size=3D1G,align=3D256M \ -object memory-backend-file,id=3Dcxl-mem2,share=3Don,mem-path=3D/tmp/t3_cx= l2.raw,size=3D1G,align=3D256M \ -object memory-backend-file,id=3Dcxl-lsa1,share=3Don,mem-path=3D/tmp/t3_ls= a1.raw,size=3D1M,align=3D1M \ -object memory-backend-file,id=3Dcxl-mem3,share=3Don,mem-path=3D/tmp/t3_cx= l3.raw,size=3D1G,align=3D256M \ -object memory-backend-file,id=3Dcxl-mem4,share=3Don,mem-path=3D/tmp/t3_cx= l4.raw,size=3D1G,align=3D256M \ -object memory-backend-file,id=3Dcxl-lsa2,share=3Don,mem-path=3D/tmp/t3_ls= a2.raw,size=3D1M,align=3D1M \ -device pxb-cxl,bus_nr=3D12,bus=3Dpcie.0,id=3Dcxl.1,hdm_for_passthrough=3D= true,numa_node=3D0 \ -device cxl-rp,port=3D0,bus=3Dcxl.1,id=3Dcxl_rp_port0,chassis=3D0,slot=3D2= \ -device cxl-rp,port=3D1,bus=3Dcxl.1,id=3Dcxl_rp_port1,chassis=3D0,slot=3D3= \ -device cxl-type3,bus=3Dcxl_rp_port0,volatile-memdev=3Dcxl-mem1,id=3Dcxl-p= mem1,lsa=3Dcxl-lsa1,sn=3D3,x-speed=3D32,x-width=3D16 \ -device cxl-type3,bus=3Dcxl_rp_port1,volatile-memdev=3Dcxl-mem3,id=3Dcxl-p= mem2,lsa=3Dcxl-lsa2,sn=3D5,x-speed=3D32,x-width=3D16 \ -machine cxl-fmw.0.targets.0=3Dcxl.1,cxl-fmw.0.size=3D8G,cxl-fmw.0.interle= ave-granularity=3D1k \ -numa node,nodeid=3D0,cpus=3D0-3,memdev=3Dmem0 \ -numa node,nodeid=3D1 \ -object acpi-generic-initiator,id=3Dbob2,pci-dev=3Dbob,node=3D1 \ -numa node,nodeid=3D2 \ -object acpi-generic-port,id=3Dbob11,pci-bus=3Dcxl.1,node=3D2 \ -numa dist,src=3D0,dst=3D0,val=3D10 -numa dist,src=3D0,dst=3D1,val=3D21 -n= uma dist,src=3D0,dst=3D2,val=3D21 \ -numa dist,src=3D1,dst=3D0,val=3D21 -numa dist,src=3D1,dst=3D1,val=3D10 -n= uma dist,src=3D1,dst=3D2,val=3D21 \ -numa dist,src=3D2,dst=3D0,val=3D21 -numa dist,src=3D2,dst=3D1,val=3D21 -n= uma dist,src=3D2,dst=3D2,val=3D10 \ -numa hmat-lb,initiator=3D0,target=3D0,hierarchy=3Dmemory,data-type=3Dacce= ss-latency,latency=3D10 \ -numa hmat-lb,initiator=3D0,target=3D0,hierarchy=3Dmemory,data-type=3Dacce= ss-bandwidth,bandwidth=3D3G \ -numa hmat-lb,initiator=3D0,target=3D2,hierarchy=3Dmemory,data-type=3Dacce= ss-latency,latency=3D100 \ -numa hmat-lb,initiator=3D0,target=3D2,hierarchy=3Dmemory,data-type=3Dacce= ss-bandwidth,bandwidth=3D100G \ -numa hmat-lb,initiator=3D1,target=3D0,hierarchy=3Dmemory,data-type=3Dacce= ss-latency,latency=3D500 \ -numa hmat-lb,initiator=3D1,target=3D0,hierarchy=3Dmemory,data-type=3Dacce= ss-bandwidth,bandwidth=3D100M \ -numa hmat-lb,initiator=3D1,target=3D2,hierarchy=3Dmemory,data-type=3Dacce= ss-latency,latency=3D50 \ -numa hmat-lb,initiator=3D1,target=3D2,hierarchy=3Dmemory,data-type=3Dacce= ss-bandwidth,bandwidth=3D100G Set x-width to 2 and it will be link limited. -device cxl-type3,bus=3Dcxl_rp_port0,volatile-memdev=3Dcxl-mem1,id=3Dcxl-p= mem1,lsa=3Dcxl-lsa1,sn=3D3,x-speed=3D32,x-width=3D2 \ -device cxl-type3,bus=3Dcxl_rp_port1,volatile-memdev=3Dcxl-mem3,id=3Dcxl-p= mem2,lsa=3Dcxl-lsa2,sn=3D5,x-speed=3D32,x-width=3D2 \ Case 2: Switch connected type 3. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D -object memory-backend-file,id=3Dcxl-mem1,share=3Don,mem-path=3D/tmp/t3_cx= l1.raw,size=3D1G,align=3D256M \ -object memory-backend-file,id=3Dcxl-mem3,share=3Don,mem-path=3D/tmp/t3_cx= l3.raw,size=3D1G,align=3D256M \ -device pxb-cxl,bus_nr=3D12,bus=3Dpcie.0,id=3Dcxl.1,hdm_for_passthrough=3D= true \ -device cxl-rp,port=3D0,bus=3Dcxl.1,id=3Dcxl_rp_port0,chassis=3D0,slot=3D2= ,mem-reserve=3D128M,hotplug=3Dtrue \ -device cxl-upstream,port=3D33,bus=3Dcxl_rp_port0,id=3Dus0,multifunction= =3Don,addr=3D0.0,sn=3D33,x-speed=3D64,x-width=3D16 \ -device cxl-downstream,port=3D0,bus=3Dus0,id=3Dswport0,chassis=3D0,slot=3D= 4,hotplug=3Dtrue \ -device cxl-downstream,port=3D1,bus=3Dus0,id=3Dswport1,chassis=3D0,slot=3D= 5,hotplug=3Dtrue \ -device cxl-type3,bus=3Dswport0,volatile-memdev=3Dcxl-mem1,id=3Dcxl-pmem1,= sn=3D3,x-speed=3D32,x-width=3D16 \ -device cxl-type3,bus=3Dswport1,volatile-memdev=3Dcxl-mem3,id=3Dcxl-pmem2,= sn=3D5,x-speed=3D32,x-width=3D16 \ -machine cxl-fmw.0.targets.0=3Dcxl.1,cxl-fmw.0.size=3D4G,cxl-fmw.0.interle= ave-granularity=3D1k \ -numa node,nodeid=3D0,cpus=3D0-3,memdev=3Dmem0 \ -numa node,nodeid=3D1 \ -object acpi-generic-initiator,id=3Dbob2,pci-dev=3Dbob,node=3D1 \ -numa node,nodeid=3D2 \ -object acpi-generic-port,id=3Dbob11,pci-bus=3Dcxl.1,node=3D2 \ -numa dist,src=3D0,dst=3D0,val=3D10 -numa dist,src=3D0,dst=3D1,val=3D21 -n= uma dist,src=3D0,dst=3D2,val=3D21 \ -numa dist,src=3D1,dst=3D0,val=3D21 -numa dist,src=3D1,dst=3D1,val=3D10 -n= uma dist,src=3D1,dst=3D2,val=3D21 \ -numa dist,src=3D2,dst=3D0,val=3D21 -numa dist,src=3D2,dst=3D1,val=3D21 -n= uma dist,src=3D2,dst=3D2,val=3D10 \ -numa hmat-lb,initiator=3D0,target=3D0,hierarchy=3Dmemory,data-type=3Dacce= ss-latency,latency=3D10 \ -numa hmat-lb,initiator=3D0,target=3D0,hierarchy=3Dmemory,data-type=3Dacce= ss-bandwidth,bandwidth=3D800M \ -numa hmat-lb,initiator=3D0,target=3D2,hierarchy=3Dmemory,data-type=3Dacce= ss-latency,latency=3D100 \ -numa hmat-lb,initiator=3D0,target=3D2,hierarchy=3Dmemory,data-type=3Dacce= ss-bandwidth,bandwidth=3D200G \ -numa hmat-lb,initiator=3D1,target=3D0,hierarchy=3Dmemory,data-type=3Dacce= ss-latency,latency=3D500 \ -numa hmat-lb,initiator=3D1,target=3D0,hierarchy=3Dmemory,data-type=3Dacce= ss-bandwidth,bandwidth=3D100M \ -numa hmat-lb,initiator=3D1,target=3D2,hierarchy=3Dmemory,data-type=3Dacce= ss-latency,latency=3D50 \ -numa hmat-lb,initiator=3D1,target=3D2,hierarchy=3Dmemory,data-type=3Dacce= ss-bandwidth,bandwidth=3D200G Starting from this and... * Changing links for the two type 3 devices to x-speed=3D16,x-width=3D4 wil= l make it leaf link limited. * Changing link for the USP to x-speed=3D32,x-width=3D8 will make it head l= ink limited. Case 3: 2 GP, 2 HB, direct connected type 3. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D GP limited configuration (found bug in v6 of kernel series) -object memory-backend-file,id=3Dcxl-mem1,share=3Don,mem-path=3D/tmp/t3_cx= l1.raw,size=3D1G,align=3D256M \ -object memory-backend-file,id=3Dcxl-mem2,share=3Don,mem-path=3D/tmp/t3_cx= l2.raw,size=3D1G,align=3D256M \ -object memory-backend-file,id=3Dcxl-lsa1,share=3Don,mem-path=3D/tmp/t3_ls= a1.raw,size=3D1M,align=3D1M \ -object memory-backend-file,id=3Dcxl-mem3,share=3Don,mem-path=3D/tmp/t3_cx= l3.raw,size=3D1G,align=3D256M \ -object memory-backend-file,id=3Dcxl-mem4,share=3Don,mem-path=3D/tmp/t3_cx= l4.raw,size=3D1G,align=3D256M \ -object memory-backend-file,id=3Dcxl-lsa2,share=3Don,mem-path=3D/tmp/t3_ls= a2.raw,size=3D1M,align=3D1M \ -device pxb-cxl,bus_nr=3D12,bus=3Dpcie.0,id=3Dcxl.1,hdm_for_passthrough=3D= true,numa_node=3D2 \ -device pxb-cxl,bus_nr=3D22,bus=3Dpcie.0,id=3Dcxl.2,hdm_for_passthrough=3D= true,numa_node=3D3 \ -device cxl-rp,port=3D0,bus=3Dcxl.1,id=3Dcxl_rp_port0,chassis=3D0,slot=3D2= \ -device cxl-rp,port=3D1,bus=3Dcxl.2,id=3Dcxl_rp_port1,chassis=3D0,slot=3D3= \ -device cxl-type3,bus=3Dcxl_rp_port0,volatile-memdev=3Dcxl-mem1,id=3Dcxl-p= mem1,lsa=3Dcxl-lsa1,sn=3D3,x-speed=3D32,x-width=3D16 \ -device cxl-type3,bus=3Dcxl_rp_port1,volatile-memdev=3Dcxl-mem3,id=3Dcxl-p= mem2,lsa=3Dcxl-lsa2,sn=3D5,x-speed=3D32,x-width=3D16 \ -machine cxl-fmw.0.targets.0=3Dcxl.1,cxl-fmw.0.targets.1=3Dcxl.2,cxl-fmw.0= .size=3D8G,cxl-fmw.0.interleave-granularity=3D1k \ -numa node,nodeid=3D0,cpus=3D0-3,memdev=3Dmem0 \ -numa node,nodeid=3D1 \ -object acpi-generic-initiator,id=3Dbob2,pci-dev=3Dbob,node=3D1 \ -numa node,nodeid=3D2 \ -object acpi-generic-port,id=3Dbob11,pci-bus=3Dcxl.1,node=3D2 \ -numa node,nodeid=3D3 \ -object acpi-generic-port,id=3Dbob12,pci-bus=3Dcxl.2,node=3D3 \ -numa dist,src=3D0,dst=3D0,val=3D10 -numa dist,src=3D0,dst=3D1,val=3D21 -n= uma dist,src=3D0,dst=3D2,val=3D21 -numa dist,src=3D0,dst=3D3,val=3D21 \ -numa dist,src=3D1,dst=3D0,val=3D21 -numa dist,src=3D1,dst=3D1,val=3D10 -n= uma dist,src=3D1,dst=3D2,val=3D21 -numa dist,src=3D1,dst=3D3,val=3D21 \ -numa dist,src=3D2,dst=3D0,val=3D21 -numa dist,src=3D2,dst=3D1,val=3D21 -n= uma dist,src=3D2,dst=3D2,val=3D10 -numa dist,src=3D2,dst=3D3,val=3D21 \ -numa dist,src=3D3,dst=3D0,val=3D21 -numa dist,src=3D3,dst=3D1,val=3D21 -n= uma dist,src=3D3,dst=3D2,val=3D21 -numa dist,src=3D3,dst=3D3,val=3D10 \ -numa hmat-lb,initiator=3D0,target=3D0,hierarchy=3Dmemory,data-type=3Dacce= ss-latency,latency=3D10 \ -numa hmat-lb,initiator=3D0,target=3D0,hierarchy=3Dmemory,data-type=3Dacce= ss-bandwidth,bandwidth=3D3G \ -numa hmat-lb,initiator=3D0,target=3D2,hierarchy=3Dmemory,data-type=3Dacce= ss-latency,latency=3D100 \ -numa hmat-lb,initiator=3D0,target=3D2,hierarchy=3Dmemory,data-type=3Dacce= ss-bandwidth,bandwidth=3D13G \ -numa hmat-lb,initiator=3D0,target=3D3,hierarchy=3Dmemory,data-type=3Dacce= ss-latency,latency=3D100 \ -numa hmat-lb,initiator=3D0,target=3D3,hierarchy=3Dmemory,data-type=3Dacce= ss-bandwidth,bandwidth=3D13G \ -numa hmat-lb,initiator=3D1,target=3D0,hierarchy=3Dmemory,data-type=3Dacce= ss-latency,latency=3D500 \ -numa hmat-lb,initiator=3D1,target=3D0,hierarchy=3Dmemory,data-type=3Dacce= ss-bandwidth,bandwidth=3D100M \ -numa hmat-lb,initiator=3D1,target=3D2,hierarchy=3Dmemory,data-type=3Dacce= ss-latency,latency=3D50 \ -numa hmat-lb,initiator=3D1,target=3D2,hierarchy=3Dmemory,data-type=3Dacce= ss-bandwidth,bandwidth=3D20G \ -numa hmat-lb,initiator=3D1,target=3D3,hierarchy=3Dmemory,data-type=3Dacce= ss-latency,latency=3D50 \ -numa hmat-lb,initiator=3D1,target=3D3,hierarchy=3Dmemory,data-type=3Dacce= ss-bandwidth,bandwidth=3D20G \ [1] https://lore.kernel.org/linux-cxl/20240710222716.797267-1-dave.jiang@in= tel.com Suggested tweaks to the CDAT values. diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c index 88f117576d..fe5fc8cb6c 100644 --- a/hw/mem/cxl_type3.c +++ b/hw/mem/cxl_type3.c @@ -109,7 +109,7 @@ static void ct3_build_cdat_entries_for_mr(CDATSubHeader= **cdat_table, .flags =3D HMAT_LB_MEM_MEMORY, .data_type =3D HMAT_LB_DATA_READ_BANDWIDTH, .entry_base_unit =3D 1000, /* GB/s */ - .entry[0] =3D 16, + .entry[0] =3D 48, }; dslbis3 =3D g_malloc(sizeof(*dslbis3)); @@ -122,7 +122,7 @@ static void ct3_build_cdat_entries_for_mr(CDATSubHeader= **cdat_table, .flags =3D HMAT_LB_MEM_MEMORY, .data_type =3D HMAT_LB_DATA_WRITE_BANDWIDTH, .entry_base_unit =3D 1000, /* GB/s */ - .entry[0] =3D 16, + .entry[0] =3D 48, }; dsemts =3D g_malloc(sizeof(*dsemts)); diff --git a/hw/pci-bridge/cxl_upstream.c b/hw/pci-bridge/cxl_upstream.c index 70cb06436d..85b114d3ce 100644 --- a/hw/pci-bridge/cxl_upstream.c +++ b/hw/pci-bridge/cxl_upstream.c @@ -319,5 +319,5 @@ static int build_cdat_table(CDATSubHeader ***cdat_table= , void *priv) sslbis_bandwidth->sslbe[i] =3D (CDATSslbe) { .port_x_id =3D CDAT_PORT_ID_USP, .port_y_id =3D port_ids[i], - .latency_bandwidth =3D 16, /* 16 GB/s */ + .latency_bandwidth =3D 128, /* 128 GB/s */ }; Jonathan Cameron (6): hw/pci-bridge/cxl_root_port: Provide x-speed and x-width properties. hw/pci-bridge/cxl_upstream: Provide x-speed and x-width properties. hw/pcie: Factor out PCI Express link register filing common to EP. hw/pcie: Provide a utility function for control of EP / SW USP link hw/mem/cxl-type3: Add properties to control link speed and width hw/pci-bridge/cxl-upstream: Add properties to control link speed and width include/hw/cxl/cxl_device.h | 4 + include/hw/pci-bridge/cxl_upstream_port.h | 4 + include/hw/pci/pcie.h | 2 + hw/mem/cxl_type3.c | 6 ++ hw/pci-bridge/cxl_downstream.c | 23 +++-- hw/pci-bridge/cxl_root_port.c | 5 ++ hw/pci-bridge/cxl_upstream.c | 6 ++ hw/pci/pcie.c | 105 ++++++++++++++-------- 8 files changed, 103 insertions(+), 52 deletions(-) --=20 2.43.0