Received: by 2002:ab2:3350:0:b0:1f4:6588:b3a7 with SMTP id o16csp97930lqe; Fri, 5 Apr 2024 14:03:19 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCUse99DIXeGyoYeUIuwx7jz3YVpov5YUujcn25k569ZNjnaQlyvJzy700PG4za4BjBmvvKaVKqRuxRj/vFVOBEt5EfIG/YdWXQaZNVHiw== X-Google-Smtp-Source: AGHT+IF2tC8DwvVtidcOf8nvz4t1Sy6eWs8hDFE63vEeTy8ZYzp2Qq3lgdinWEJrgYRp4mvEQsoJ X-Received: by 2002:a05:622a:305:b0:432:c8b7:7096 with SMTP id q5-20020a05622a030500b00432c8b77096mr2491164qtw.34.1712350999403; Fri, 05 Apr 2024 14:03:19 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1712350999; cv=pass; d=google.com; s=arc-20160816; b=FFddLKpVbTNo3EmMOHXySpQD+DUKH4J4EsZoCavAsfsmMOE73Sov2F3pcWTfbhPo1J KlTHqffWNRi59AMCIsrnDlXTVXCMFG4qBF624IrFepWfwbdvayihaMmrm47bf8dwX9fk qwZ/hETT8Bsl3Mw8KPUHYnRtMXTKPeTq2uM/vV8/D/qI1q6z6bVOBrPNm15xuFx/bRGD Xd01957dQNKW4ZgYJkg90YU7bcCAYPsKdguUAyivKn5Mr+h38gpzzb35Ko0+A8HZyz3y q85rXBDPLulFw3abQXNmhFegG/hdzolDOx/JL157NmAF7wcgGXwjnLh4vJQsF33EhO2z 1XHA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=subject:cc:to:from:date:references:in-reply-to:message-id :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :user-agent:feedback-id:dkim-signature; bh=L+USHzrrnPD+KoKEBqKmOCyC1BIR3hYIUAMpAR3bPxw=; fh=aCmVb4PxBh3U/tWKvg1mEFOwceuQ0g/uKkUz663cGVI=; b=BgJ8Shfv94eMOMWDuuBn7t1RNqPNi5RVhz4duyZXxOhX+A/AN1Tqhz9kZU9i8n/Hnc kOSA31EwQAC5jm0cp48r4WecyylWvaTUxI6yzvAtbqE0OXPEh0c/XsF9ihQQJfYpM6VD 9XpyYl0OkUYud+g7rgTfjrpDSvw6MB/bH7DmnJ/1WdOLHZwpkDebXsHS6T0PdhlP4RgG HPwNwFRG4MzHnNzXXJl4ojSPrCw//b5u6/edM9uQWLoOSu1jLBEYtkFJsG/prz14aUaD owH1NaAHAgvBK/ykkLchOwm++wsPzyvWiGs28niu3/X4/ixmEyWmUL8BejV+WBvbqtG6 DMqw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="L/8Ljbk/"; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-133573-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-133573-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id m6-20020ae9e706000000b0078a68d1e54bsi2706521qka.123.2024.04.05.14.03.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Apr 2024 14:03:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-133573-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="L/8Ljbk/"; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-133573-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-133573-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 130DA1C21108 for ; Fri, 5 Apr 2024 21:03:19 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 10DA85672; Fri, 5 Apr 2024 21:03:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="L/8Ljbk/" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 01DE7171669; Fri, 5 Apr 2024 21:03:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712350991; cv=none; b=kCkAczSGgoL8DhdMKq7aOxxs+DqNtEFdX5p8iPGXbAMf17hHzkNIn4YaNdKgDGrIdU5X1CLs1sMEDtnd1UzJkEapln6wxT4Ui/8ZKJfQ5g2yGsyFDWoLtMpMHpzBAnbeG7I/MppcQMCVwlRR8mlYKcWEZXg8/8l8QkU0y7jgbm0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712350991; c=relaxed/simple; bh=4+g6js5mEU1pa5ulHJ+C7YQxyZdv41bK8ysv9MJSxyU=; h=MIME-Version:Message-Id:In-Reply-To:References:Date:From:To:Cc: Subject:Content-Type; b=TO0Pe/yuL1CCwGZNzL15LMq2uoMQHrEFT+QXytAYQyqXo7HO/V300qAzy//Fnz/5udyniLeWJzoq/DHIDvC4n/24tade5o56nZ+FueETzFRKH48vIhehQgbMY9eb/C68DcxawQ0NvqYRvRoQY61/Q8iJITedy9wkJVJfq614S+k= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=L/8Ljbk/; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 565DEC43394; Fri, 5 Apr 2024 21:03:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1712350989; bh=4+g6js5mEU1pa5ulHJ+C7YQxyZdv41bK8ysv9MJSxyU=; h=In-Reply-To:References:Date:From:To:Cc:Subject:From; b=L/8Ljbk/5fkA3JZ236dhrHG3f5JgFHRUtN7g1CRRS7g8TMvza7NlCS+/Q9hxjRNml UldX8TzETK1FjtAJUPdr8h2swcYoPx8LIpCvCzi7Z1+whaYsiEtTwSsb50cqN2kPy/ ZSmCTEFaUqLgs2nRqCwyN8rjZSjhCEEoZ2CnIus+o9z7EDPiYVHgnpsY/kIUbgeG4L 7m92y7oEbazVHqlMFifDcVTM4fqnggZL9lAKyCpkVB0CYDkk9xXGll2mh5VjMXImnC BkVzfEgxJicES7tmqlIQkTwYI/4V8m0kJeskaxHrUNLnwOOW/9/YxG8ro67ziPBbDF i9e7LYen/RLlQ== Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailfauth.nyi.internal (Postfix) with ESMTP id 561901200032; Fri, 5 Apr 2024 17:03:08 -0400 (EDT) Received: from imap51 ([10.202.2.101]) by compute5.internal (MEProxy); Fri, 05 Apr 2024 17:03:08 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrudegtddgudehkecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefofgggkfgjfhffhffvvefutgesthdtredtreertdenucfhrhhomhepfdet rhhnugcuuegvrhhgmhgrnhhnfdcuoegrrhhnugeskhgvrhhnvghlrdhorhhgqeenucggtf frrghtthgvrhhnpedvveeigfetudegveeiledvgfevuedvgfetgeefieeijeejffeggeeh udegtdevheenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhroh hmpegrrhhnugdomhgvshhmthhprghuthhhphgvrhhsohhnrghlihhthidquddvkeehudej tddvgedqvdekjedttddvieegqdgrrhhnugeppehkvghrnhgvlhdrohhrghesrghrnhgusg druggv X-ME-Proxy: Feedback-ID: i36794607:Fastmail Received: by mailuser.nyi.internal (Postfix, from userid 501) id 03C77B6008D; Fri, 5 Apr 2024 17:03:08 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.11.0-alpha0-333-gbfea15422e-fm-20240327.001-gbfea1542 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: In-Reply-To: <4d08af651b95744dc6cfa0c2624c596d21d83d09.camel@linux.ibm.com> References: <20240404105840.3396821-1-schnelle@linux.ibm.com> <20240404105840.3396821-2-schnelle@linux.ibm.com> <95a63afe-ccd7-4551-86af-00b7fb0d8ff9@app.fastmail.com> <4cdb6399d803d37a883d1a2fbe119c0a14610106.camel@linux.ibm.com> <9d9fa267-067e-421b-9a39-aa178b913298@app.fastmail.com> <4d08af651b95744dc6cfa0c2624c596d21d83d09.camel@linux.ibm.com> Date: Fri, 05 Apr 2024 23:02:47 +0200 From: "Arnd Bergmann" To: "Niklas Schnelle" , "Peter Huewe" , "Jarkko Sakkinen" Cc: linux-integrity@vger.kernel.org, "Heiko Carstens" , linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/1] char: tpm: handle HAS_IOPORT dependencies Content-Type: text/plain On Fri, Apr 5, 2024, at 11:23, Niklas Schnelle wrote: > > I just confirmed that keeping the define it also compiles but I do > wonder if it's not even cleaner to just add an explicit HAS_IOPORT > dependency and no new #ifdefs in the code. I'm willing to send a patch > for any of these solutions though. It depends a bit on where the driver is used in the end. We currently set HAS_IOPORT on arm64 and riscv, but we could make that dependent on which PCI host drivers are actually being built, as a lot of modern hardware doesn't actually support port I/O. Is this driver still expected to be used on modern PCIe hosts with no port I/O, or would new machines all use the i2c version? If we do need the driver in configurations without CONFIG_HAS_IOPORT, then the patch below wouldn't be awful (on top of the patch that got merged already). Arnd diff --git a/drivers/char/tpm/tpm_infineon.c b/drivers/char/tpm/tpm_infineon.c index 99c6e565ec8d..5b45ad619900 100644 --- a/drivers/char/tpm/tpm_infineon.c +++ b/drivers/char/tpm/tpm_infineon.c @@ -37,7 +37,8 @@ struct tpm_inf_dev { int iotype; - void __iomem *mem_base; /* MMIO ioremap'd addr */ + void __iomem *data_base; /* MMIO ioremap'd addr */ + void __iomem *config_base; /* MMIO ioremap'd config */ unsigned long map_base; /* phys MMIO base */ unsigned long map_size; /* MMIO region size */ unsigned int index_off; /* index register offset */ @@ -53,40 +54,22 @@ static struct tpm_inf_dev tpm_dev; static inline void tpm_data_out(unsigned char data, unsigned char offset) { -#ifdef CONFIG_HAS_IOPORT - if (tpm_dev.iotype == TPM_INF_IO_PORT) - outb(data, tpm_dev.data_regs + offset); - else -#endif - writeb(data, tpm_dev.mem_base + tpm_dev.data_regs + offset); + iowrite8(data, tpm_dev.data_base + offset); } static inline unsigned char tpm_data_in(unsigned char offset) { -#ifdef CONFIG_HAS_IOPORT - if (tpm_dev.iotype == TPM_INF_IO_PORT) - return inb(tpm_dev.data_regs + offset); -#endif - return readb(tpm_dev.mem_base + tpm_dev.data_regs + offset); + return ioread8(tpm_dev.data_base + offset); } static inline void tpm_config_out(unsigned char data, unsigned char offset) { -#ifdef CONFIG_HAS_IOPORT - if (tpm_dev.iotype == TPM_INF_IO_PORT) - outb(data, tpm_dev.config_port + offset); - else -#endif - writeb(data, tpm_dev.mem_base + tpm_dev.index_off + offset); + iowrite8(data, tpm_dev.config_base + offset); } static inline unsigned char tpm_config_in(unsigned char offset) { -#ifdef CONFIG_HAS_IOPORT - if (tpm_dev.iotype == TPM_INF_IO_PORT) - return inb(tpm_dev.config_port + offset); -#endif - return readb(tpm_dev.mem_base + tpm_dev.index_off + offset); + return ioread8(tpm_dev.config_base + offset); } /* TPM header definitions */ @@ -425,16 +408,27 @@ static int tpm_inf_pnp_probe(struct pnp_dev *dev, goto err_last; } /* publish my base address and request region */ + tpm_dev.data_base = ioport_map(tpm_dev.data_regs, tpm_dev.data_size); + if (!tpm_dev.data_base) { + rc = -EINVAL; + goto err_last; + } if (request_region(tpm_dev.data_regs, tpm_dev.data_size, "tpm_infineon0") == NULL) { rc = -EINVAL; + ioport_unmap(tpm_dev.config_base); goto err_last; } + tpm_dev.config_base = ioport_map(tpm_dev.config_port, tpm_dev.config_size); + if (!tpm_dev.config_base) { + rc = -EINVAL; + goto err_release_data_region; + } if (request_region(tpm_dev.config_port, tpm_dev.config_size, "tpm_infineon0") == NULL) { release_region(tpm_dev.data_regs, tpm_dev.data_size); rc = -EINVAL; - goto err_last; + goto err_release_data_region; } } else if (pnp_mem_valid(dev, 0) && !(pnp_mem_flags(dev, 0) & IORESOURCE_DISABLED)) { @@ -454,8 +448,8 @@ static int tpm_inf_pnp_probe(struct pnp_dev *dev, goto err_last; } - tpm_dev.mem_base = ioremap(tpm_dev.map_base, tpm_dev.map_size); - if (tpm_dev.mem_base == NULL) { + tpm_dev.data_base = ioremap(tpm_dev.map_base, tpm_dev.map_size); + if (tpm_dev.data_base == NULL) { release_mem_region(tpm_dev.map_base, tpm_dev.map_size); rc = -EINVAL; goto err_last; @@ -468,8 +462,7 @@ static int tpm_inf_pnp_probe(struct pnp_dev *dev, * seem like they could be placed anywhere within the MMIO * region, but lets just put them at zero offset. */ - tpm_dev.index_off = TPM_ADDR; - tpm_dev.data_regs = 0x0; + tpm_dev.config_base = tpm_dev.data_base + TPM_ADDR; } else { rc = -EINVAL; goto err_last; @@ -568,10 +561,16 @@ static int tpm_inf_pnp_probe(struct pnp_dev *dev, err_release_region: if (tpm_dev.iotype == TPM_INF_IO_PORT) { - release_region(tpm_dev.data_regs, tpm_dev.data_size); + ioport_unmap(tpm_dev.config_base); release_region(tpm_dev.config_port, tpm_dev.config_size); + } + +err_release_data_region: + if (tpm_dev.iotype == TPM_INF_IO_PORT) { + ioport_unmap(tpm_dev.data_base); + release_region(tpm_dev.data_regs, tpm_dev.data_size); } else { - iounmap(tpm_dev.mem_base); + iounmap(tpm_dev.data_base); release_mem_region(tpm_dev.map_base, tpm_dev.map_size); } @@ -586,11 +585,13 @@ static void tpm_inf_pnp_remove(struct pnp_dev *dev) tpm_chip_unregister(chip); if (tpm_dev.iotype == TPM_INF_IO_PORT) { + ioport_unmap(tpm_dev.data_base); release_region(tpm_dev.data_regs, tpm_dev.data_size); + ioport_unmap(tpm_dev.config_base); release_region(tpm_dev.config_port, tpm_dev.config_size); } else { - iounmap(tpm_dev.mem_base); + iounmap(tpm_dev.data_base); release_mem_region(tpm_dev.map_base, tpm_dev.map_size); } }