Received: by 2002:a05:6358:a55:b0:ec:fcf4:3ecf with SMTP id 21csp2889130rwb; Fri, 20 Jan 2023 08:32:09 -0800 (PST) X-Google-Smtp-Source: AMrXdXvucO4ktWzXOzmQcHNAo/+cUur71ZHZaYv+zD+iAoGfgVYeYw+Q2ZprZCWf1K1btxUlnz3+ X-Received: by 2002:a17:906:7116:b0:78d:f454:ba46 with SMTP id x22-20020a170906711600b0078df454ba46mr11183028ejj.69.1674232328991; Fri, 20 Jan 2023 08:32:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674232328; cv=none; d=google.com; s=arc-20160816; b=zqWDi38iyZxgynh4ZNhLMOGi9mH67uQUAyv0NI2mIGNJnkLxruQzYxxBnzjqNR2E3O DQURRonUNbkEEXJ1UyuxdVro+ELwn9/7BAqJt3ZqsfP5fKb8ml0qNzW0ldScxRhnYX0z XbVaLwcyfAGF9z7Lbe26Hg7mZShMEanQqAS7WG3Mo8Nigx5mfIVhtj38YVPZe6ZBLfpD NPlpqPn8XW1/Lgt8Ey6pzMPkso/S66vpFnArR014IhjraWWL4IetybZgw5Ec8L9102Ll hh+vW67tPG7/TpkNcWawvxh6iuNtD6CmsWwnpOWsOCnXNxYFMCKrq/Q3Q8/hi3AtsTkj e39Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=aH/yLMKUkVdbA09VtWH6ArnHzXVFLcS9k4T5s9Untyo=; b=USZfUUEwtl5b2EbG5uXRK3osswQjc9T3dXdEP3ySYuHxw9zGmfRGlLKcFvCw9z3oE4 ApGSyLxOeBpbUIC2aro4DymYCu068ANMYCyt0sO/f8FEazclXVQ8PAtkRkiGY9lP3g/4 ezyGVr/Oz4aEkxU7+EhriTmJ1GjbUpKoambPhykD48fI2sBPZ+Clz5RCpCJ84kVk8jyn piMsgXhjW45wNFpAaxjjx91tJl2m5MAM5DiS2EiuNmaTHEAChiEP4X1Knm6QvnKkRkJa XPLAd5/fSTPw8Nub0WvYLSM4krPyrBCMNrPI87qxkv28xMT2/05G9WyU4kw/DkBvL6rR 0H/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="kDE/UU29"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h20-20020a05640250d400b0049e5fecfe87si7995729edb.503.2023.01.20.08.31.56; Fri, 20 Jan 2023 08:32:08 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="kDE/UU29"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229921AbjATQT5 (ORCPT + 50 others); Fri, 20 Jan 2023 11:19:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53992 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229905AbjATQTo (ORCPT ); Fri, 20 Jan 2023 11:19:44 -0500 Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8BAB180B87 for ; Fri, 20 Jan 2023 08:19:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1674231583; x=1705767583; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=RmFvrxtGvudD8BSky4Jryf7VIRfahN5fZ4oy4yAxnsg=; b=kDE/UU29btbBxTiGzPbRTZLoPKyvtbKLIIE/JfoEOnCUTEGkBIVqaGn9 thW2cz6vsSu55SBjreCyrLGWFa5cHbkahox+Wko5HwYTcdnKKkFuO33wu N2glBBojIMMJ4RQ7euxCuEWZi69AlyYzsCKHlsYKq6jtMiDhm0+3H7H/O aweUWNjx2z5HDLXPfrEyvFxCp4w1DTJtNB6dRDLrmKBPBcjDZU9os2oWG jZROOh7czVA1GRm7A7s0OSKYnLLUZ/V4a0QYappxx4pbg8GR5RPUSLtcH BPuJu+hVKOZBEot+OgWZNwvVPmH+fIL9cTwvoXtw40JNpZHyVmegalypS g==; X-IronPort-AV: E=McAfee;i="6500,9779,10596"; a="411846591" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="411846591" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Jan 2023 08:19:39 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10596"; a="653836377" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="653836377" Received: from araj-ucode.jf.intel.com ([10.23.0.19]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Jan 2023 08:19:37 -0800 From: Ashok Raj To: Boris Petkov , Thomas Gleixner Cc: Ashok Raj , LKML , x86 , Ingo Molnar , Tony Luck , Dave Hansen , Alison Schofield , Reinette Chatre , Tom Lendacky , Stefan Talpalaru , David Woodhouse , Benjamin Herrenschmidt , Jonathan Corbet , "Rafael J . Wysocki" , Peter Zilstra , Andy Lutomirski , Andrew Cooper , Boris Ostrovsky Subject: [Patch v5 5/5] x86/microcode/intel: Print old and new rev during early boot Date: Fri, 20 Jan 2023 08:19:23 -0800 Message-Id: <20230120161923.118882-6-ashok.raj@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230120161923.118882-1-ashok.raj@intel.com> References: <20230120161923.118882-1-ashok.raj@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Make early loading message to match late loading messages. Print both old and new revisions. This is helpful to know what the BIOS loaded revision is before an early update. New dmesg log is shown below. microcode: early update: 0x2b000041 -> 0x2b000070 date = 2000-01-01 Cache the early BIOS revision before the microcode update and change the print_ucode_info() so it prints both the old and new revision in the same format as microcode_reload_late(). Signed-off-by: Ashok Raj Reviewed-by: Thomas Gleixner Cc: LKML Cc: x86 Cc: Ingo Molnar Cc: Tony Luck Cc: Dave Hansen Cc: Alison Schofield Cc: Reinette Chatre Cc: Thomas Gleixner (Intel) Cc: Tom Lendacky Cc: Stefan Talpalaru Cc: David Woodhouse Cc: Benjamin Herrenschmidt Cc: Jonathan Corbet Cc: Rafael J. Wysocki Cc: Peter Zilstra (Intel) Cc: Andy Lutomirski Cc: Andrew Cooper Cc: Boris Ostrovsky --- Updates since V1: Thomas: Commit log updates as suggested. --- arch/x86/kernel/cpu/microcode/intel.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c index 146a60a9449a..4471d418f28a 100644 --- a/arch/x86/kernel/cpu/microcode/intel.c +++ b/arch/x86/kernel/cpu/microcode/intel.c @@ -310,10 +310,10 @@ static bool load_builtin_intel_microcode(struct cpio_data *cp) /* * Print ucode update info. */ -static void print_ucode_info(unsigned int new_rev, unsigned int date) +static void print_ucode_info(int old_rev, int new_rev, unsigned int date) { - pr_info_once("microcode updated early to revision 0x%x, date = %04x-%02x-%02x\n", - new_rev, date & 0xffff, date >> 24, + pr_info_once("early update: 0x%x -> 0x%x, date = %04x-%02x-%02x\n", + old_rev, new_rev, date & 0xffff, date >> 24, (date >> 16) & 0xff); } @@ -321,6 +321,7 @@ static void print_ucode_info(unsigned int new_rev, unsigned int date) static int delay_ucode_info; static int current_mc_date; +static int early_old_rev; /* * Print early updated ucode info after printk works. This is delayed info dump. @@ -331,7 +332,7 @@ void show_ucode_info_early(void) if (delay_ucode_info) { intel_cpu_collect_info(&uci); - print_ucode_info(uci.cpu_sig.rev, current_mc_date); + print_ucode_info(early_old_rev, uci.cpu_sig.rev, current_mc_date); delay_ucode_info = 0; } } @@ -340,29 +341,32 @@ void show_ucode_info_early(void) * At this point, we can not call printk() yet. Delay printing microcode info in * show_ucode_info_early() until printk() works. */ -static void print_ucode(int new_rev, int date) +static void print_ucode(int old_rev, int new_rev, int date) { int *delay_ucode_info_p; int *current_mc_date_p; + int *early_old_rev_p; delay_ucode_info_p = (int *)__pa_nodebug(&delay_ucode_info); current_mc_date_p = (int *)__pa_nodebug(¤t_mc_date); + early_old_rev_p = (int *)__pa_nodebug(&early_old_rev); *delay_ucode_info_p = 1; *current_mc_date_p = date; + *early_old_rev_p = old_rev; } #else -static inline void print_ucode(int new_rev, int date) +static inline void print_ucode(int old_rev, int new_rev, int date) { - print_ucode_info(new_rev, date); + print_ucode_info(old_rev, new_rev, date); } #endif static int apply_microcode_early(struct ucode_cpu_info *uci, bool early) { struct microcode_intel *mc; - u32 rev; + u32 rev, old_rev; mc = uci->mc; if (!mc) @@ -388,6 +392,7 @@ static int apply_microcode_early(struct ucode_cpu_info *uci, bool early) /* write microcode via MSR 0x79 */ native_wrmsrl(MSR_IA32_UCODE_WRITE, (unsigned long)mc->bits); + old_rev = rev; rev = intel_get_microcode_revision(); if (rev != mc->hdr.rev) return -1; @@ -395,9 +400,9 @@ static int apply_microcode_early(struct ucode_cpu_info *uci, bool early) uci->cpu_sig.rev = rev; if (early) - print_ucode(uci->cpu_sig.rev, mc->hdr.date); + print_ucode(old_rev, uci->cpu_sig.rev, mc->hdr.date); else - print_ucode_info(uci->cpu_sig.rev, mc->hdr.date); + print_ucode_info(old_rev, uci->cpu_sig.rev, mc->hdr.date); return 0; } -- 2.34.1