From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752279AbcE1NAH (ORCPT ); Sat, 28 May 2016 09:00:07 -0400 Received: from mr213139.mail.yeah.net ([223.252.213.139]:54877 "EHLO mr213139.mail.yeah.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751198AbcE1NAF (ORCPT ); Sat, 28 May 2016 09:00:05 -0400 X-Greylist: delayed 595 seconds by postgrey-1.27 at vger.kernel.org; Sat, 28 May 2016 09:00:03 EDT Subject: Re: [Patch v4 3/9] iommu/amd: Detect pre enabled translation To: Baoquan He , joro@8bytes.org References: <1464157735-8865-1-git-send-email-bhe@redhat.com> <1464157735-8865-4-git-send-email-bhe@redhat.com> Cc: linux-kernel@vger.kernel.org, vincent.wan@amd.com, iommu@lists.linux-foundation.org, dyoung@redhat.com, Wan Zongshun From: Wan Zongshun Message-ID: <3371fab6-b3db-6f4a-a1a1-b272c3f8fdbe@iommu.org> Date: Sat, 28 May 2016 20:49:46 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.1.0 MIME-Version: 1.0 In-Reply-To: <1464157735-8865-4-git-send-email-bhe@redhat.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-HM-Spam-Status: e1koWUFPN1dZCBgUCR5ZQUpKVUNKQktLS0lPT0pPS01JTldZCQ4XHghZQV koKz0kNT4uLyk6NyQyNSQzPjo*PilBS1VLQDYjJCI#KCQyNSQzPjo*PilBS1VLQCsvKSQiPigkMj UkMz46Pz4pQUtVS0A4NC41LykiJDg1QUtVS0ApPjwyNDUkOigyOkFLVUtAKyk0LTI1OD4kKDM6NT wzOjJBS1VLQD8iNTo2MjgkMiskNTQkMjUkMz46Pz4pQUtVS0ApPjo3JDIrJDI1JCk5NyQyNSQzPj o*PilBSklVS0A2LjcvMiQpOCsvJD8yPT0#KT41LyQyNSQzPjo*PilBSVVLQDIrJEhLJDYyNS4vPi Q4NS8kSyROS0FLVUtAMiskSiQ2MjUuLz4kODUvJEskSktBS1VLQDIrJC80PzoiJDg1LyRLJEpLS0 FLVUtAMiskTiQ2MjUuLz4kODUvJEskSktBS1VLQDIrJEokMzQuKSQ4NS8kSyRKS0tBS1VLQCguOT E#OC8kLzQ*OiIkODUvJEskSktLQUtVS0AoLjkxPjgvJE4kNjI1Li8#JDg1LyRLJEpLQUtVS0AoLj kxPjgvJEokMzQuKSQ4NS8kSyRKS0tBS1VLQCg5MSQ3PjUkT0skI0FLVUtLSktALz4jLyQ3PjUkSk lDSyQjQUtVS0tKS0A4NS8kMy82NyQ3PjUkSjAkTjBBS1VLS0pLQC8#Iy8uKTckPiMyKC9BS1VLS0 pLQC8#Iy8uKTckKCs6OD5BS1VLS0pLQCk#OD4yLT4pJDg1LyROJCNBS1VLS0pLQCM2OjI3PikkNS 43N0FLVUtLSktAPz43Mi0#KSQ3PjUkS0FLVUtLSktANzo1PCQ#NUFLVUtLSktAPTUkNjoiJE9KQi QzNzEkSiRLQ0tIS09BS1VISEA9KyQpPiQ9LCQzNzEkS0NLSEtNQVZMVU5APTUkKC45JD41LDQpPy gkMzcxJEpLS0lLSkFLVUlDQCguOSQ#QUpVTk5APTUkOTIvTCQzNzEkS0xKSUtJQUhVSk5APTUkNj oiJE9KQiQzNzEkSSRLQ0tIS09BS1VLWQY+ X-HM-Sender-Digest: e1kSHx4VD1lBWUc6PxQ6CRw4PTo5M0MeDgo5KSpLPhxPCT1VSlVKT01P T0hCTENCSEhNVTMWGhIXVQ0MOxIUFhYOVRQJHEVZV1kMHhlZQR0aFwgeV1kIAVlBT0lISTdXWRIL WUFZSUpDVUNJVUJOVUlPTVkG X-HM-Tid: 0a54f769d6cf7d8b287a41c15e7 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org -------- Original Message -------- > Add functions to check whether translation is already enabled in IOMMU. > > Signed-off-by: Baoquan He > --- > drivers/iommu/amd_iommu_init.c | 25 +++++++++++++++++++++++++ > drivers/iommu/amd_iommu_types.h | 4 ++++ > 2 files changed, 29 insertions(+) > > diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c > index 8361367d..9e1dfcb 100644 > --- a/drivers/iommu/amd_iommu_init.c > +++ b/drivers/iommu/amd_iommu_init.c > @@ -229,6 +229,26 @@ static int amd_iommu_enable_interrupts(void); > static int __init iommu_go_to_state(enum iommu_init_state state); > static void init_device_table_dma(void); > > + > +static bool translation_pre_enabled(struct amd_iommu *iommu) > +{ > + return (iommu->flags & AMD_IOMMU_FLAG_TRANS_PRE_ENABLED); > +} > + > +static void clear_translation_pre_enabled(struct amd_iommu *iommu) > +{ > + iommu->flags &= ~AMD_IOMMU_FLAG_TRANS_PRE_ENABLED; > +} > + > +static void init_translation_status(struct amd_iommu *iommu) > +{ > + u32 ctrl; > + > + ctrl = readl(iommu->mmio_base + MMIO_CONTROL_OFFSET); > + if (ctrl & (1< + iommu->flags |= AMD_IOMMU_FLAG_TRANS_PRE_ENABLED; > +} > + > static int iommu_pc_get_set_reg_val(struct amd_iommu *iommu, > u8 bank, u8 cntr, u8 fxn, > u64 *value, bool is_write); > @@ -1101,6 +1121,11 @@ static int __init init_iommu_one(struct amd_iommu *iommu, struct ivhd_header *h) > > iommu->int_enabled = false; > > + init_translation_status(iommu); > + > + if (translation_pre_enabled()) > + pr_warn("Translation is already enabled - trying to copy translation structures\n"); > + You missed this 'iommu' parameter here, even I saw you fixed it in another patch, but please keep each patch to be meaningful. > ret = init_iommu_from_acpi(iommu, h); > if (ret) > return ret; > diff --git a/drivers/iommu/amd_iommu_types.h b/drivers/iommu/amd_iommu_types.h > index 9d32b20..01783cc 100644 > --- a/drivers/iommu/amd_iommu_types.h > +++ b/drivers/iommu/amd_iommu_types.h > @@ -384,6 +384,7 @@ extern struct kmem_cache *amd_iommu_irq_cache; > #define APERTURE_PAGE_INDEX(a) (((a) >> 21) & 0x3fULL) > > > + > /* > * This struct is used to pass information about > * incoming PPR faults around. > @@ -401,6 +402,8 @@ struct amd_iommu_fault { > struct iommu_domain; > struct irq_domain; > > +#define AMD_IOMMU_FLAG_TRANS_PRE_ENABLED (1 << 0) > + > /* > * This structure contains generic data for IOMMU protection domains > * independent of their use. > @@ -525,6 +528,7 @@ struct amd_iommu { > struct irq_domain *ir_domain; > struct irq_domain *msi_domain; > #endif > + u32 flags; > }; > > struct devid_map { >