{"id":2175206,"url":"http://patchwork.ozlabs.org/api/1.0/patches/2175206/?format=json","project":{"id":28,"url":"http://patchwork.ozlabs.org/api/1.0/projects/28/?format=json","name":"Linux PCI development","link_name":"linux-pci","list_id":"linux-pci.vger.kernel.org","list_email":"linux-pci@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null},"msgid":"<20251217151609.3162665-30-den@valinux.co.jp>","date":"2025-12-17T15:16:03","name":"[RFC,v3,29/35] NTB: epf: Add per-SoC quirk to cap MRRS for DWC eDMA (128B for R-Car)","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"85d0d3a80068445ee5bde9c633fd3bf6d765aa6e","submitter":{"id":91573,"url":"http://patchwork.ozlabs.org/api/1.0/people/91573/?format=json","name":"Koichiro Den","email":"den@valinux.co.jp"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-pci/patch/20251217151609.3162665-30-den@valinux.co.jp/mbox/","series":[{"id":485709,"url":"http://patchwork.ozlabs.org/api/1.0/series/485709/?format=json","date":"2025-12-17T15:15:53","name":"NTB transport backed by endpoint DW eDMA","version":3,"mbox":"http://patchwork.ozlabs.org/series/485709/mbox/"}],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2175206/checks/","tags":{},"headers":{"Return-Path":"\n <linux-pci+bounces-43193-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-pci@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=valinux.co.jp header.i=@valinux.co.jp\n header.a=rsa-sha256 header.s=selector1 header.b=rPuhCfeq;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=linux-pci+bounces-43193-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp\n header.b=\"rPuhCfeq\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.229.13","smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=valinux.co.jp","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=valinux.co.jp","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=valinux.co.jp;"],"Received":["from sea.lore.kernel.org (sea.lore.kernel.org\n [IPv6:2600:3c0a:e001:db::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4dWd495nNMz1xpw\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 18 Dec 2025 02:28:41 +1100 (AEDT)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 902B43013EF5\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 17 Dec 2025 15:25:19 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id CCF5B3644BE;\n\tWed, 17 Dec 2025 15:17:51 +0000 (UTC)","from TY3P286CU002.outbound.protection.outlook.com\n (mail-japaneastazon11010013.outbound.protection.outlook.com [52.101.229.13])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 68F4B362157;\n\tWed, 17 Dec 2025 15:17:49 +0000 (UTC)","from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11)\n by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec\n 2025 15:16:40 +0000","from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM\n ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM\n ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025\n 15:16:40 +0000"],"ARC-Seal":["i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1765984671; cv=fail;\n b=cDqnNTkgJeM96Jgk6oDvnKPoLn3+jnR2ccsNYHX3Ws+CbKUzK8idGZ4RplAj7BmjxteyPhOzz0nBW2DSADgk8IY3wHiew0O4sWGKMEUkBRZbg8V/G6XF2t0mxlAAvOh5Dl5W44REWq5CrB7D6SZw49D2BnrugCeR68oP+XaToag=","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=jcbFjJdcW9cBdP1aVH3sVRpsiE2CN+LeJLCjjfg7X+7LC5chkQuop50kiZ2RvajXeGoKMoQwWweL05q+XR7uGCHekBcrTexHJWi4NHdLxE2ZIGJlqWY7364el6P6EuGWRLrBXY30YQBDRLFlLTU+MZpsO1LIQNNmgtQPNIumLxSV2pHJXHNn7seOdCC/ARGQRmzDoVzQCMABTahMbn4APoGnZ2IYP6dwr3vk1IeDubVbx+L2tEKIZPDpLILA4Ld5JzlCrUaGXiw8rLVV14FN3DBmBYTbdKHvnYH0Jvt8u1aIwvealnoVzYLhYoU624QFs+Um/4O/nu9MItYDXlHuIQ=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1765984671; c=relaxed/simple;\n\tbh=a4G9QRnVsPt/uuqkfe9kUrRCGOW9nceP9hOOxskp0WE=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=IZxdMC9t3VkINhXyxgWLo6L7g4uNXtEfV39//RhvoD6VHbu7nsCxfZcpRBQjvPjJAVoXHu6YLBGHc8f75jWoJ+AydKb4DYRqeBrBDcjoPECeiMZnGCRdqZ9/6TrXlX8w535F32ZBFnzdZWeYxX61ILF6oMSIn1wiB8mFJ0j/F5k=","i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=fGCTgygFHcBT4UMiTZRF4kncO36Fu1a7I/tGPUBEN0I=;\n b=cEruZ6sSWHUUWiW+VwS2BP2DB1CM03qc60JxmIxX4EQIXolP9dUGAbEsMp50xlrbtZxVETVz5fHUbzJ6eT/HK7lJ61+b9ih7nkP7ws6KsLW9xoBb8DKjjYnZIfG7p25pl+MwcUo7YOh+t1eJxy76F/Bufw2PxkbWlPWdL5CkNPFAoOUR88PrIrackxgzuLPetAl6C8e5nEqGj6G57d/hHGQt/vOAnlYiyVceuT0m1xGMLEs55ucoJktXrlF1RkHQi94Hvjxh2L8DRpCbRkqZfsY8YIKkCgvIPU5nslvIUB7BziyATw7o9B2CqhTRhZ2rwRmRpzVpfhhvZXNucOFXAg=="],"ARC-Authentication-Results":["i=2; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=valinux.co.jp;\n spf=pass smtp.mailfrom=valinux.co.jp;\n dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp\n header.b=rPuhCfeq; arc=fail smtp.client-ip=52.101.229.13","i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=valinux.co.jp; dmarc=pass action=none\n header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=fGCTgygFHcBT4UMiTZRF4kncO36Fu1a7I/tGPUBEN0I=;\n b=rPuhCfeq3Jn8Uo56hRV9IH8kVmavYoOZ28FZNx/H+ll51odi59hFY1V9F8twTDB/O4Vjt4PdfoR+N0q57SSKdUQQ8jhFf9C0ysTX8qR25zhn2AW4a8nyLcliRdpd8T9u+cvXDm3kPGmivQq9wJTP7YBkbzzl13KVuETdlaK9sPA=","From":"Koichiro Den <den@valinux.co.jp>","To":"Frank.Li@nxp.com,\n\tdave.jiang@intel.com,\n\tntb@lists.linux.dev,\n\tlinux-pci@vger.kernel.org,\n\tdmaengine@vger.kernel.org,\n\tlinux-renesas-soc@vger.kernel.org,\n\tnetdev@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org","Cc":"mani@kernel.org,\n\tkwilczynski@kernel.org,\n\tkishon@kernel.org,\n\tbhelgaas@google.com,\n\tcorbet@lwn.net,\n\tgeert+renesas@glider.be,\n\tmagnus.damm@gmail.com,\n\trobh@kernel.org,\n\tkrzk+dt@kernel.org,\n\tconor+dt@kernel.org,\n\tvkoul@kernel.org,\n\tjoro@8bytes.org,\n\twill@kernel.org,\n\trobin.murphy@arm.com,\n\tjdmason@kudzu.us,\n\tallenbh@gmail.com,\n\tandrew+netdev@lunn.ch,\n\tdavem@davemloft.net,\n\tedumazet@google.com,\n\tkuba@kernel.org,\n\tpabeni@redhat.com,\n\tBasavaraj.Natikar@amd.com,\n\tShyam-sundar.S-k@amd.com,\n\tkurt.schwemmer@microsemi.com,\n\tlogang@deltatee.com,\n\tjingoohan1@gmail.com,\n\tlpieralisi@kernel.org,\n\tutkarsh02t@gmail.com,\n\tjbrunet@baylibre.com,\n\tdlemoal@kernel.org,\n\tarnd@arndb.de,\n\telfring@users.sourceforge.net,\n\tden@valinux.co.jp","Subject":"[RFC PATCH v3 29/35] NTB: epf: Add per-SoC quirk to cap MRRS for DWC\n eDMA (128B for R-Car)","Date":"Thu, 18 Dec 2025 00:16:03 +0900","Message-ID":"<20251217151609.3162665-30-den@valinux.co.jp>","X-Mailer":"git-send-email 2.51.0","In-Reply-To":"<20251217151609.3162665-1-den@valinux.co.jp>","References":"<20251217151609.3162665-1-den@valinux.co.jp>","Content-Transfer-Encoding":"8bit","Content-Type":"text/plain","X-ClientProxiedBy":"TY4P301CA0005.JPNP301.PROD.OUTLOOK.COM\n (2603:1096:405:26f::9) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM\n (2603:1096:400:24c::11)","Precedence":"bulk","X-Mailing-List":"linux-pci@vger.kernel.org","List-Id":"<linux-pci.vger.kernel.org>","List-Subscribe":"<mailto:linux-pci+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-pci+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"TYWP286MB2697:EE_|TYCP286MB2863:EE_","X-MS-Office365-Filtering-Correlation-Id":"0a7de7a2-4218-4c83-0d26-08de3d7f4757","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"\n\tBCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016|7053199007;","X-Microsoft-Antispam-Message-Info":"\n qIF/ch9/irPNPtkDzULZ1PKRHG4qAWuaBYjhOT2FnLJnsp3MHMcF5cktBiyL4H5odU8KFmgj4zlyAobvzFow0XsCi6S619AYLWWx5ELsvZSVy9R64dpSa/FqTZ5n2+s6FMnJpd7keMdyueIc6nzY+G0lQ79c2JeDwSETw9jzNZjVR/fwNUiwD94d25AscRx6S/TZ3vEEUMhHfJkJMmLdsHpFGYwHnCNYw5PWvoC2MCVAW4iNP+BRldJ8kazFkXLPRJidukGhRauKr4FUI0woUjVIf3QKJsZ9ngnikBRiuQ095arqAaP/v4ms6uf7KRJYLxFfY/sDlCetXgJpFMfPuxFQ5JXNR6w3tWEh95aDRQEyS/BMvQIUpM9i9aAi24N2PgsVRDlIKBuF75zfr8B1XIIEYBPQrBu3V7VCTFZsLozoxKW+6vy3ESxZTormzMoOsjDEd7PkkaxTjAdkvC+SXa/9XvvdxaeeiZZxzz65X3Uznvm5UUA/pdq15cGFn1cAqbMETzJ7+cJj66ySQycZ1EkTVWx9RRM3L+Cwf3/yppRzSpGuMpdhchWNQot+6A6tM9X12zBOzfFwmJS5roUg7epKDqLy9OBDjCzTO7oqbq9fKEY31yUSbEPqY7FUcF4Y91+X9OKXDg56UymBbVvz6F5mZNMdfjRJgICGSOYNPZCYRrJKyX+zDwiSgiymq87FM74roLt7U2Zk8BV0YH5pZKGaWYakhoNMyT5gobzQa3cT5954CtN5WIf+KTlABQC0HhwweIO7YUBewUCfIMlDPp0Q1b52xyFB12svu3mYeFdLEoYtKskgg8fkB+9fmaVL+n++24svfFrBdCLl0Jj7OsRS8R+ShEfJTFGxsnMB6w/hU8SdTl5fnyYH5VyZliv2BcOx5e2vfP2hnpctQ+iUDHJU20PlL3kY9RCZrfo+DP1wNAnk/GggirOkmzxsLimpX8/mC36YV7iuDV8TpHi6hPqSUlPgsFp4NMulkPIk7PRLgaDcAqz7rl+kcTKOPG2cO/fqq6NGDtnKVoJZrmmpyn/+JOyYfAnVWqP8PiEo32E9F/T0GHDa1uTzvsAHSrcDkdVTY7cPUtg8nr9oTXyv3ByT8/zloNd92dWpIz9gFeNpbY6HMBpV72mTEjPh+NaWww58/AkgXHEp9fp9SjaJLN770co65WwJ4xomKTCxBWE7Yd/MWYl11GF+5OGeDJpsJt8TGrhZHD2wCmRA/2bu0C8ANpxbKSnkGvtH7cBxNDTgeBxk//Z+XIG0G+XE5EZW8mm/69QWV1mxANIgdHZpg8bvJNAVY1jEYysMNg9CqSXC5hqm8mrw7QGiaQrBLRkGkFxTesON/GHe/RBPBHIZVVNtDbsh6WtV/pIfW+cauoKr4ehRxPBeleH9ACvUJkbjxlxcC3Vtsw3CqG5Xl0deh2ME7CeZoze/jrrBGKmUELKTKdn7iM4nQYCUF2H58BH6","X-Forefront-Antispam-Report":"\n\tCIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016)(7053199007);DIR:OUT;SFP:1101;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"\n qiRxN8GdRJwFGPVsFTPfMTuMrQy7M8+ND54WQ1n842IyjXCRIwO0uwzQ37g8ncfVlnwzq15BtLTgS44NBs6JQsmtoWqCBwsd3vjPRt82oiqbQsjvbhLm7GPXO5kmjLdt1svijAShTftK6UT/XznKWnvOnWt3TTwintC0XxnuxfzfUF3Jw5jOuH6Kn1dZquWBbg2Gt/1yhFA+kyQGxSpAn35vmtGcaBnBlV5ofHw2Yl6RQ2v9v+t9HM9d9fst5lHLL5wcDJReUsWNEotyNzKLLq/MxhnkZGtDKbyqdALPt+kcwQHcwvpDDKEW+HW3R02qeJ5N+SB6qiCwRKs5lai22sk04PxG9XogIM98kbRBD1El1n1QEIN5I/QalLF0e29MsLeaDo3rbbYDgxGKtM4631yI+g8r6OQE1t5wAcsOP0NA2BgXCqEq+6NhEr9Y+/3wCNyFX1k530gdv7bxS7CDqNmKEuHakDGJ2gIGoV8vu4jy2jQgevBUHha2Ht+JrbSlw1dChiZK2aJJh/atlGf80Won6gSqfSZDVcQKb0zRnEN6IjiangjJHkz1e1HH1PyaO4Yw8jA6Mp4E5pCGfey+qg5iS4bPkOQ+YfZdRlwdM6+9XOPwvxt4zX6nU9POK2aXrcMNq6JIqUgg9uXKc2NkqH7WVKHHzENUNc9/FOTaCi9uQv9BgYYoWHpPW9bOzx5Y0QAZDwt8gKoFKgb1AUvT7eibqJp3WJrzEHFgsZATsqvU7AkazMbieQqVihxBPjhcMyxw5VbYkshN6h5xXO5WgHdqhx1u9MyzFM1tulmBeNSxMHk/FNrzPemh1PhkUZGnhxjjAQ20wpdwkrRuX08Sp3kKvrO1HpMYNvtnTu0xk76SEUpt0OYT5efhJwQOEobTk3Nrpn5KFpTIiTmj6jWz5+6RXbmnkGgUjNCLdzfODX6YqHBw71QehvWl1aIbl/xZsgi7Jx99sddOY9N7qNWuPKe7BNA8PBOQ7fulO89KapxMc1L8a/YbYO0w9hVV41sOhNLncJM43buZSeuobo/33iYFJvRW30M2c32F4/5KbJ9loJWzGsuQPBHGVnXa9d1mcenlX+1FwzdkUBDem3On3zFRlC6kD4rgoS3bMv2dXHeknfD9znW7Zp+MBhg5JyVtZeAtb2+pF6HKsfUYdruO1iN8qlla48R5OFZeRfKpUx35ucSGA5bz17hSqsNB7YjJI8jc9o1nD7VU3PvzEXrYC0CnPpWWWMKVxb3fysLbrPh0MWNa7ncIm3Xoopx1JdWRmYkXk/u8UloUWnBe+DDxJN+ijE1PGGmVilqWMbDstknrmnDIY4TKCTrCcT33AAAWIkqCjzP5dA74lym7IXSE2HgkVv6iNbC93NDDtUYlw5l1cI9SoFaTo1FXFuv1KbSTf6s2XGJuKe/5V3ed4sIF4BOyb3OjFk8REoB6oLVD+F4NlreRKDbhInOkqtxI5ez0dh3Zp8+3FMOR5dIysD/pJFTp+umcxt/KLcfDWYOpncjh5SyUL2+JMc9GcOB0s0pnYKg2T4lgye9a/5u6Na9Z/x7vXaCu3iFptKLSSOwlDOy2btX7+Z6mnwWXoLAR8BZQ7sxf0mSQ5gDIwqmOiN9jiWXkI3mnG0ni2a3F5ZQE4Ic=","X-OriginatorOrg":"valinux.co.jp","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 0a7de7a2-4218-4c83-0d26-08de3d7f4757","X-MS-Exchange-CrossTenant-AuthSource":"TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"17 Dec 2025 15:16:40.0862\n (UTC)","X-MS-Exchange-CrossTenant-FromEntityHeader":"Hosted","X-MS-Exchange-CrossTenant-Id":"7a57bee8-f73d-4c5f-a4f7-d72c91c8c111","X-MS-Exchange-CrossTenant-MailboxType":"HOSTED","X-MS-Exchange-CrossTenant-UserPrincipalName":"\n F9kQBDRlVH61IbI2v1DnVQAF6q9WKPe2/Sf5dF+pU8zt0yE3t4SAIxHWL8fK38K0J5J/EPx4ZWKkhuu239XybA==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"TYCP286MB2863"},"content":"Some R-Car platforms using Synopsys DesignWare PCIe with the integrated\neDMA exhibit reproducible payload corruption in RC->EP remote DMA read\ntraffic whenever the endpoint issues 256-byte Memory Read (MRd) TLPs.\n\nThe eDMA injects multiple MRd requests of size less than or equal to\nmin(MRRS, MPS), so constraining the endpoint's MRd request size removes\n256-byte MRd TLPs and avoids the issue. This change adds a per-SoC knob\nin the ntb_hw_epf driver and sets MRRS=128 on R-Car.\n\nWe intentionally do not change the endpoint's MPS. Per PCIe Base\nSpecification, MPS limits the payload size of TLPs with data transmitted\nby the Function, while Max_Read_Request_Size limits the size of read\nrequests produced by the Function as a Requester. Limiting MRRS is\nsufficient to constrain MRd Byte Count, while lowering MPS would also\nthrottle unrelated traffic (e.g. endpoint-originated Posted Writes and\nCompletions with Data) without being necessary for this fix.\n\nThis quirk is scoped to the affected endpoint only and can be removed\nonce the underlying issue is resolved in the controller/IP.\n\nReviewed-by: Frank Li <Frank.Li@nxp.com>\nSigned-off-by: Koichiro Den <den@valinux.co.jp>\n---\n drivers/ntb/hw/epf/ntb_hw_epf.c | 66 +++++++++++++++++++++++++++++----\n 1 file changed, 58 insertions(+), 8 deletions(-)","diff":"diff --git a/drivers/ntb/hw/epf/ntb_hw_epf.c b/drivers/ntb/hw/epf/ntb_hw_epf.c\nindex 5303a8944019..efe540a8c734 100644\n--- a/drivers/ntb/hw/epf/ntb_hw_epf.c\n+++ b/drivers/ntb/hw/epf/ntb_hw_epf.c\n@@ -74,6 +74,12 @@ enum epf_ntb_bar {\n \tNTB_BAR_NUM,\n };\n \n+struct ntb_epf_soc_data {\n+\tconst enum pci_barno *barno_map;\n+\t/* non-zero to override MRRS for this SoC */\n+\tint force_mrrs;\n+};\n+\n #define NTB_EPF_MAX_MW_COUNT\t(NTB_BAR_NUM - BAR_MW1)\n \n struct ntb_epf_dev {\n@@ -624,11 +630,12 @@ static int ntb_epf_init_dev(struct ntb_epf_dev *ndev)\n }\n \n static int ntb_epf_init_pci(struct ntb_epf_dev *ndev,\n-\t\t\t    struct pci_dev *pdev)\n+\t\t\t    struct pci_dev *pdev,\n+\t\t\t    const struct ntb_epf_soc_data *soc)\n {\n \tstruct device *dev = ndev->dev;\n \tsize_t spad_sz, spad_off;\n-\tint ret;\n+\tint ret, cur;\n \n \tpci_set_drvdata(pdev, ndev);\n \n@@ -646,6 +653,17 @@ static int ntb_epf_init_pci(struct ntb_epf_dev *ndev,\n \n \tpci_set_master(pdev);\n \n+\tif (soc && pci_is_pcie(pdev) && soc->force_mrrs) {\n+\t\tcur = pcie_get_readrq(pdev);\n+\t\tret = pcie_set_readrq(pdev, soc->force_mrrs);\n+\t\tif (ret)\n+\t\t\tdev_warn(&pdev->dev, \"failed to set MRRS=%d: %d\\n\",\n+\t\t\t\t soc->force_mrrs, ret);\n+\t\telse\n+\t\t\tdev_info(&pdev->dev, \"capped MRRS: %d->%d for ntb-epf\\n\",\n+\t\t\t\t cur, soc->force_mrrs);\n+\t}\n+\n \tret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64));\n \tif (ret) {\n \t\tret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32));\n@@ -720,6 +738,7 @@ static void ntb_epf_cleanup_isr(struct ntb_epf_dev *ndev)\n static int ntb_epf_pci_probe(struct pci_dev *pdev,\n \t\t\t     const struct pci_device_id *id)\n {\n+\tconst struct ntb_epf_soc_data *soc = (const void *)id->driver_data;\n \tstruct device *dev = &pdev->dev;\n \tstruct ntb_epf_dev *ndev;\n \tint ret;\n@@ -731,16 +750,16 @@ static int ntb_epf_pci_probe(struct pci_dev *pdev,\n \tif (!ndev)\n \t\treturn -ENOMEM;\n \n-\tndev->barno_map = (const enum pci_barno *)id->driver_data;\n-\tif (!ndev->barno_map)\n+\tif (!soc || !soc->barno_map)\n \t\treturn -EINVAL;\n \n+\tndev->barno_map = soc->barno_map;\n \tndev->dev = dev;\n \n \tntb_epf_init_struct(ndev, pdev);\n \tmutex_init(&ndev->cmd_lock);\n \n-\tret = ntb_epf_init_pci(ndev, pdev);\n+\tret = ntb_epf_init_pci(ndev, pdev, soc);\n \tif (ret) {\n \t\tdev_err(dev, \"Failed to init PCI\\n\");\n \t\treturn ret;\n@@ -812,21 +831,52 @@ static const enum pci_barno rcar_barno[NTB_BAR_NUM] = {\n \t[BAR_MW4]\t= NO_BAR,\n };\n \n+static const struct ntb_epf_soc_data j721e_soc = {\n+\t.barno_map = j721e_map,\n+};\n+\n+static const struct ntb_epf_soc_data mx8_soc = {\n+\t.barno_map = mx8_map,\n+};\n+\n+static const struct ntb_epf_soc_data rcar_soc = {\n+\t.barno_map = rcar_barno,\n+\t/*\n+\t * On some R-Car platforms using the Synopsys DWC PCIe + eDMA we\n+\t * observe data corruption on RC->EP Remote DMA Read paths whenever\n+\t * the EP issues large MRd requests. The corruption consistently\n+\t * hits the tail of each 256-byte segment (e.g. offsets\n+\t * 0x00E0..0x00FF within a 256B block, and again at 0x01E0..0x01FF\n+\t * for larger transfers).\n+\t *\n+\t * The DMA injects multiple MRd requests of size less than or equal\n+\t * to the min(MRRS, MPS) into the outbound request path. By\n+\t * lowering MRRS to 128 we prevent 256B MRd TLPs from being\n+\t * generated and avoid the issue on the affected hardware. We\n+\t * intentionally keep MPS unchanged and scope this quirk to this\n+\t * endpoint to avoid impacting unrelated devices.\n+\t *\n+\t * Remove this once the issue is resolved (maybe controller/IP\n+\t * level) or a more preferable workaround becomes available.\n+\t */\n+\t.force_mrrs = 128,\n+};\n+\n static const struct pci_device_id ntb_epf_pci_tbl[] = {\n \t{\n \t\tPCI_DEVICE(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_J721E),\n \t\t.class = PCI_CLASS_MEMORY_RAM << 8, .class_mask = 0xffff00,\n-\t\t.driver_data = (kernel_ulong_t)j721e_map,\n+\t\t.driver_data = (kernel_ulong_t)&j721e_soc,\n \t},\n \t{\n \t\tPCI_DEVICE(PCI_VENDOR_ID_FREESCALE, 0x0809),\n \t\t.class = PCI_CLASS_MEMORY_RAM << 8, .class_mask = 0xffff00,\n-\t\t.driver_data = (kernel_ulong_t)mx8_map,\n+\t\t.driver_data = (kernel_ulong_t)&mx8_soc,\n \t},\n \t{\n \t\tPCI_DEVICE(PCI_VENDOR_ID_RENESAS, 0x0030),\n \t\t.class = PCI_CLASS_MEMORY_RAM << 8, .class_mask = 0xffff00,\n-\t\t.driver_data = (kernel_ulong_t)rcar_barno,\n+\t\t.driver_data = (kernel_ulong_t)&rcar_soc,\n \t},\n \t{ },\n };\n","prefixes":["RFC","v3","29/35"]}