Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752009AbcLDAJj (ORCPT ); Sat, 3 Dec 2016 19:09:39 -0500 Received: from esa8.dell-outbound.iphmx.com ([68.232.149.218]:53562 "EHLO esa8.dell-outbound.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751596AbcLDAJi (ORCPT ); Sat, 3 Dec 2016 19:09:38 -0500 X-Greylist: delayed 321 seconds by postgrey-1.27 at vger.kernel.org; Sat, 03 Dec 2016 19:09:38 EST DomainKey-Signature: s=smtpout; d=dell.com; c=simple; q=dns; h=Received:Received:Received:X-DKIM:Received:Received:From: To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type: Content-Transfer-Encoding:X-Mailer:Content-Language: Thread-Index:X-RSA-Classifications:X-Sentrion-Hostname; b=MpEQSdniiMzhJOc6kN+k0PweRkorM6pIXt1dql2agVOK+M/R8xEkuAUd XEC5eZh6XXSMNiS3nYNNCfrs/P1npXZbQ1h0oXcogvc8AkCFRkzY921AH 6W6OtRtkffezqgoMnLMmORaVUMC/oRH9Oysm/cma2NRrwmysQxg+lmDiV I=; X-DKIM: OpenDKIM Filter v2.4.3 mailuogwprd51.lss.emc.com uB405lhC006158 From: "Allen Hubbe" To: "'Serge Semin'" , , , Cc: , , Subject: RE: [PATCH 05/22] NTB: Alter Scratchpads NTB API to support multi-ports interface Date: Sat, 3 Dec 2016 19:05:32 -0500 Message-ID: <004001d24dc2$219edfe0$64dc9fa0$@dell.com> MIME-Version: 1.0 Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Outlook 14.0 Content-Language: en-us Thread-Index: AdJNwh7GjXkVKrphRriB1kGY3Gy2Tw== X-RSA-Classifications: public X-Sentrion-Hostname: mailuogwprd51.lss.emc.com Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5989 Lines: 167 From: Serge Semin > Even though there is no any real NTB hardware, which would have both more > than two ports and Scratchpad registers, it is logically correct to have > Scratchpad API accepting a peer port index as well. Intel/AMD drivers used > to utilize Primary and Secondary topology to split Scratchpad between > connected root devices. Since port-index API replaced Primary and Secondary > topology, Intel/AMD NTB hadrware drivers can use device port to determine > which Scratchpad registers actually belong to local and peer devices. > The same approach can be used if some potential hardware in future will be > multi-port and have some set of Scratchpads. > I agree with addition of the peer port index, but I don't think s/idx/sidx/ for scratchpad index is necessary. > Signed-off-by: Serge Semin > > --- > include/linux/ntb.h | 46 ++++++++++++++++++++++++++-------------------- > 1 file changed, 26 insertions(+), 20 deletions(-) > > diff --git a/include/linux/ntb.h b/include/linux/ntb.h > index 59de1f6..fc9d034 100644 > --- a/include/linux/ntb.h > +++ b/include/linux/ntb.h > @@ -268,13 +268,14 @@ struct ntb_dev_ops { > int (*spad_is_unsafe)(struct ntb_dev *ntb); > int (*spad_count)(struct ntb_dev *ntb); > > - u32 (*spad_read)(struct ntb_dev *ntb, int idx); > - int (*spad_write)(struct ntb_dev *ntb, int idx, u32 val); > + u32 (*spad_read)(struct ntb_dev *ntb, int sidx); > + int (*spad_write)(struct ntb_dev *ntb, int sidx, u32 val); > > - int (*peer_spad_addr)(struct ntb_dev *ntb, int idx, > + int (*peer_spad_addr)(struct ntb_dev *ntb, int pidx, int sidx, > phys_addr_t *spad_addr); > - u32 (*peer_spad_read)(struct ntb_dev *ntb, int idx); > - int (*peer_spad_write)(struct ntb_dev *ntb, int idx, u32 val); > + u32 (*peer_spad_read)(struct ntb_dev *ntb, int pidx, int sidx); > + int (*peer_spad_write)(struct ntb_dev *ntb, int pidx, int sidx, > + u32 val); > > int (*msg_count)(struct ntb_dev *ntb); > u64 (*msg_inbits)(struct ntb_dev *ntb); > @@ -1201,6 +1202,7 @@ static inline int ntb_spad_is_unsafe(struct ntb_dev *ntb) > * @ntb: NTB device context. > * > * Hardware and topology may support a different number of scratchpads. > + * Although it must be the same for all ports per NTB device. > * > * Return: the number of scratchpads. > */ > @@ -1215,42 +1217,43 @@ static inline int ntb_spad_count(struct ntb_dev *ntb) > /** > * ntb_spad_read() - read the local scratchpad register > * @ntb: NTB device context. > - * @idx: Scratchpad index. > + * @sidx: Scratchpad index. > * > * Read the local scratchpad register, and return the value. > * > * Return: The value of the local scratchpad register. > */ > -static inline u32 ntb_spad_read(struct ntb_dev *ntb, int idx) > +static inline u32 ntb_spad_read(struct ntb_dev *ntb, int sidx) > { > if (!ntb->ops->spad_read) > return ~(u32)0; > > - return ntb->ops->spad_read(ntb, idx); > + return ntb->ops->spad_read(ntb, sidx); > } > > /** > * ntb_spad_write() - write the local scratchpad register > * @ntb: NTB device context. > - * @idx: Scratchpad index. > + * @sidx: Scratchpad index. > * @val: Scratchpad value. > * > * Write the value to the local scratchpad register. > * > * Return: Zero on success, otherwise an error number. > */ > -static inline int ntb_spad_write(struct ntb_dev *ntb, int idx, u32 val) > +static inline int ntb_spad_write(struct ntb_dev *ntb, int sidx, u32 val) > { > if (!ntb->ops->spad_write) > return -EINVAL; > > - return ntb->ops->spad_write(ntb, idx, val); > + return ntb->ops->spad_write(ntb, sidx, val); > } > > /** > * ntb_peer_spad_addr() - address of the peer scratchpad register > * @ntb: NTB device context. > - * @idx: Scratchpad index. > + * @pidx: Port index of peer device. > + * @sidx: Scratchpad index. > * @spad_addr: OUT - The address of the peer scratchpad register. > * > * Return the address of the peer doorbell register. This may be used, for > @@ -1258,48 +1261,51 @@ static inline int ntb_spad_write(struct ntb_dev *ntb, int idx, u32 > val) > * > * Return: Zero on success, otherwise an error number. > */ > -static inline int ntb_peer_spad_addr(struct ntb_dev *ntb, int idx, > +static inline int ntb_peer_spad_addr(struct ntb_dev *ntb, int pidx, int sidx, > phys_addr_t *spad_addr) > { > if (!ntb->ops->peer_spad_addr) > return -EINVAL; > > - return ntb->ops->peer_spad_addr(ntb, idx, spad_addr); > + return ntb->ops->peer_spad_addr(ntb, pidx, sidx, spad_addr); > } > > /** > * ntb_peer_spad_read() - read the peer scratchpad register > * @ntb: NTB device context. > - * @idx: Scratchpad index. > + * @pidx: Port index of peer device. > + * @sidx: Scratchpad index. > * > * Read the peer scratchpad register, and return the value. > * > * Return: The value of the local scratchpad register. > */ > -static inline u32 ntb_peer_spad_read(struct ntb_dev *ntb, int idx) > +static inline u32 ntb_peer_spad_read(struct ntb_dev *ntb, int pidx, int sidx) > { > if (!ntb->ops->peer_spad_read) > return ~(u32)0; > > - return ntb->ops->peer_spad_read(ntb, idx); > + return ntb->ops->peer_spad_read(ntb, pidx, sidx); > } > > /** > * ntb_peer_spad_write() - write the peer scratchpad register > * @ntb: NTB device context. > - * @idx: Scratchpad index. > + * @pidx: Port index of peer device. > + * @sidx: Scratchpad index. > * @val: Scratchpad value. > * > * Write the value to the peer scratchpad register. > * > * Return: Zero on success, otherwise an error number. > */ > -static inline int ntb_peer_spad_write(struct ntb_dev *ntb, int idx, u32 val) > +static inline int ntb_peer_spad_write(struct ntb_dev *ntb, int pidx, int sidx, > + u32 val) > { > if (!ntb->ops->peer_spad_write) > return -EINVAL; > > - return ntb->ops->peer_spad_write(ntb, idx, val); > + return ntb->ops->peer_spad_write(ntb, pidx, sidx, val); > } > > /** > -- > 2.6.6