From patchwork Tue Oct 15 03:06:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1176738 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 46sgYJ6KyLz9sPF for ; Tue, 15 Oct 2019 14:15:48 +1100 (AEDT) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="BHjQeqr7"; dkim-atps=neutral Received: from bilbo.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 46sgYJ57WRzDqxX for ; Tue, 15 Oct 2019 14:15:48 +1100 (AEDT) X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::542; helo=mail-pg1-x542.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="BHjQeqr7"; dkim-atps=neutral Received: from mail-pg1-x542.google.com (mail-pg1-x542.google.com [IPv6:2607:f8b0:4864:20::542]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 46sgTP3HVwzDqPC for ; Tue, 15 Oct 2019 14:12:25 +1100 (AEDT) Received: by mail-pg1-x542.google.com with SMTP id i32so11202927pgl.10 for ; Mon, 14 Oct 2019 20:12:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=fb8Qcq1ZMgDw4XwswkjlrO7dfrfS34RbRxaLvO1y5i0=; b=BHjQeqr7f4qIOIkGq8k43bvYKLFOMzJrlQuLz02A/TGFTeMxFQaQ/KVMt5v2l49OKM 7Yerzbb5K41ca43V0Lh6H4nra32Hf//xuv7MkNRJJmVDysyK/ckom0mtjka1A66P1/jt C5fIb/jVMaU7TXicBeIOw8rMOhrhP1wP12aBC4BcKhElLCqAzMJJeEQyY+CcN6dMkSuE LfcRV9b3g/RGuxMWCAQYeW7yeJ2jmXDSZZi7BcGZPailmDs8lrDmuR7EZyJi3AIN5523 Yposqb3K7wR5wyGUTpCQa9VsjBR403MFYja0vIzIPxHLIQPnhglJ/+5+8QmztzTEh3xM QuqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fb8Qcq1ZMgDw4XwswkjlrO7dfrfS34RbRxaLvO1y5i0=; b=h17Gsmwl/0ks65a3CSRIcR+orIHxq60gY0fE2q6xs6jFhe+BPIxH0rhHUlcqNPPEPB HWMTX7UB+8cf1X6H5H6i/uWRFAXv+Z6Y6kn1hPUXr3sNlrD1+DS+kvRgnOHYquYG/CqH CZh1MPr4hVxjeU0k2BkycWUAtQzoOqbBFOYgg2dHrjIS8uy5hRnxLrVm0NaP12i8J0gV opPrKGpOkk2inO9a0QpdKmTL0Q/rMY/+nBWjUPOrR0LuUzJAPgbrDRztH538/cJ1Ry8p iTuGMYDvMi4De7iRKmuhR4jEdh20+audbG22V7zRnphR7ed5AyvDAtCkSCRu8xpzgo66 IcFw== X-Gm-Message-State: APjAAAUk15Sl00PMUZ7z6Y54JgYm8/JNjIvPgHrQymGKE35iTBqNJ61R FbJbFlgPi0qWct6IbgVvp/4VbXmn9Ho= X-Google-Smtp-Source: APXvYqxpZ4wtdj07nra746b86xKXkHlvpbQmf3VFiGra5v34XN4kXpUwpPpgHflv20ONfbjmftG4Cg== X-Received: by 2002:a17:90a:6283:: with SMTP id d3mr40597933pjj.27.1571109143292; Mon, 14 Oct 2019 20:12:23 -0700 (PDT) Received: from bobo.local0.net (60-240-111-58.tpgi.com.au. [60.240.111.58]) by smtp.gmail.com with ESMTPSA id w6sm23089828pfw.84.2019.10.14.20.12.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Oct 2019 20:12:21 -0700 (PDT) From: Nicholas Piggin To: skiboot@lists.ozlabs.org Date: Tue, 15 Oct 2019 13:06:59 +1000 Message-Id: <20191015030717.15637-10-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191015030717.15637-1-npiggin@gmail.com> References: <20191015030717.15637-1-npiggin@gmail.com> MIME-Version: 1.0 Subject: [Skiboot] [PATCH v5 09/27] naca: move naca definition from asm to C X-BeenThere: skiboot@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list for skiboot development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Skiboot" This results in the same layout and location of the naca and hv data structures. Signed-off-by: Nicholas Piggin --- asm/asm-offsets.c | 2 -- asm/head.S | 50 ------------------------------------------ hdata/Makefile.inc | 2 +- hdata/hdata.h | 2 ++ hdata/naca.c | 26 ++++++++++++++++++++++ hdata/naca.h | 54 ++++++++++++++++++++++++++++++++++++++++++++++ hdata/spira.c | 11 ++++------ hdata/spira.h | 2 ++ include/mem-map.h | 2 ++ skiboot.lds.S | 5 +++++ 10 files changed, 96 insertions(+), 60 deletions(-) create mode 100644 hdata/naca.c create mode 100644 hdata/naca.h diff --git a/asm/asm-offsets.c b/asm/asm-offsets.c index e4584059c..61a25cab3 100644 --- a/asm/asm-offsets.c +++ b/asm/asm-offsets.c @@ -25,8 +25,6 @@ int main(void); int main(void) { - OFFSET(SPIRA_ACTUAL_SIZE, spira, reserved); - OFFSET(CPUTHREAD_PIR, cpu_thread, pir); OFFSET(CPUTHREAD_SAVE_R1, cpu_thread, save_r1); OFFSET(CPUTHREAD_STATE, cpu_thread, state); diff --git a/asm/head.S b/asm/head.S index 97f74d2b9..e70462299 100644 --- a/asm/head.S +++ b/asm/head.S @@ -806,56 +806,6 @@ enter_nap: bne 1b nap b . -/* - * - * NACA structure, accessed by the FPS to find the SPIRA - * - */ - . = 0x4000 -.global naca -naca: - .llong spirah /* 0x0000 : SPIRA-H */ - .llong 0 /* 0x0008 : Reserved */ - .llong 0 /* 0x0010 : Reserved */ - .llong hv_release_data /* 0x0018 : HV release data */ - .llong 0 /* 0x0020 : Reserved */ - .llong 0 /* 0x0028 : Reserved */ - .llong spira /* 0x0030 : SP Interface Root */ - .llong hv_lid_load_table /* 0x0038 : LID load table */ - .llong 0 /* 0x0040 : Reserved */ - .space 68 - .long 0 /* 0x008c : Reserved */ - .space 16 - .long SPIRA_ACTUAL_SIZE /* 0x00a0 : Actual size of SPIRA */ - .space 28 - .llong 0 /* 0x00c0 : resident module loadmap */ - .space 136 - .llong 0 /* 0x0150 : reserved */ - .space 40 - .llong 0 /* 0x0180 : reserved */ - .space 36 - .long 0 /* 0x01ac : control flags */ - .byte 0 /* 0x01b0 : reserved */ - .space 4 - .byte 0 /* 0x01b5 : default state for SW attn */ - .space 1 - .byte 0x01 /* 0x01b7 : PCIA format */ - .llong hdat_entry /* 0x01b8 : Primary thread entry */ - .llong hdat_entry /* 0x01c0 : Secondary thread entry */ - .space 0xe38 - - .balign 0x10 -hv_release_data: - .space 58 - .llong 0x666 /* VRM ? */ - - .balign 0x10 -hv_lid_load_table: - .long 0x10 - .long 0x10 - .long 0 - .long 0 - /* * diff --git a/hdata/Makefile.inc b/hdata/Makefile.inc index 6f47314d4..67f809bc1 100644 --- a/hdata/Makefile.inc +++ b/hdata/Makefile.inc @@ -1,7 +1,7 @@ # -*-Makefile-*- SUBDIRS += hdata -HDATA_OBJS = spira.o paca.o pcia.o hdif.o memory.o fsp.o iohub.o vpd.o slca.o +HDATA_OBJS = naca.o spira.o paca.o pcia.o hdif.o memory.o fsp.o iohub.o vpd.o slca.o HDATA_OBJS += cpu-common.o vpd-common.o hostservices.o i2c.o tpmrel.o DEVSRC_OBJ = hdata/built-in.a diff --git a/hdata/hdata.h b/hdata/hdata.h index f77847172..da5146e7a 100644 --- a/hdata/hdata.h +++ b/hdata/hdata.h @@ -5,6 +5,8 @@ #define __HDATA_H #include +#include "hdif.h" +#include "spira.h" struct dt_node; diff --git a/hdata/naca.c b/hdata/naca.c new file mode 100644 index 000000000..b215c39eb --- /dev/null +++ b/hdata/naca.c @@ -0,0 +1,26 @@ +#include +#include +#include + +#include "naca.h" +#include "spira.h" + +__section(".naca.data") struct naca naca = { + .spirah_addr = CPU_TO_BE64(SPIRAH_OFF), + .hv_release_data_addr = CPU_TO_BE64(NACA_OFF + offsetof(struct naca, hv_release_data)), + .spira_addr = CPU_TO_BE64(SPIRA_OFF), + .lid_table_addr = CPU_TO_BE64(NACA_OFF + offsetof(struct naca, hv_lid_load_table)), + .spira_size = CPU_TO_BE32(SPIRA_ACTUAL_SIZE), + .hv_load_map_addr = 0, + .attn_enabled = 0, + .pcia_supported = 1, + .__primary_thread_entry = CPU_TO_BE64(0x180), + .__secondary_thread_entry = CPU_TO_BE64(0x180), + .hv_release_data = { + .vrm = CPU_TO_BE64(0x666), /* ? */ + }, + .hv_lid_load_table = { + .w0 = CPU_TO_BE32(0x10), + .w1 = CPU_TO_BE32(0x10), + }, +}; diff --git a/hdata/naca.h b/hdata/naca.h new file mode 100644 index 000000000..1271b59a5 --- /dev/null +++ b/hdata/naca.h @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: Apache-2.0 +/* Copyright 2019 IBM Corp. */ + +#ifndef __NACA_H +#define __NACA_H + +#include +#include +#include + +struct hv_release_data { + uint8_t reserved_0x0[58]; + __be64 vrm; +} __packed __attribute__((aligned(0x10))); + +struct hv_lid_load_table { + __be32 w0; + __be32 w1; + __be32 w2; + __be32 w3; +} __packed __attribute__((aligned(0x10))); + +/* + * NACA structure, accessed by the FSP to find the SPIRA + */ +struct naca { + __be64 spirah_addr; /* 0x0000 */ + uint8_t reserved_0x8[0x10]; + __be64 hv_release_data_addr; /* 0x0018 */ + uint8_t reserved_0x20[0x10]; + __be64 spira_addr; /* 0x0030 */ + __be64 lid_table_addr; /* 0x0038 */ + uint8_t reserved_0x40[0x60]; + __be32 spira_size; /* 0x00a0 */ + uint8_t reserved_0xa4[0x1c]; + __be64 hv_load_map_addr; /* 0x00c0 */ + uint8_t reserved_0xc8[0xe4]; + uint8_t flags[4]; /* 0x01ac */ + uint8_t reserved_0x1b0[0x5]; + uint8_t attn_enabled; /* 0x01b5 */ + uint8_t reserved_0x1b6[0x1]; + uint8_t pcia_supported; /* 0x01b7 */ + __be64 __primary_thread_entry; /* 0x01b8 */ + __be64 __secondary_thread_entry; /* 0x01c0 */ + uint8_t reserved_0x1d0[0xe38]; + + /* Not part of the naca but it's convenient to put them here */ + struct hv_release_data hv_release_data; + struct hv_lid_load_table hv_lid_load_table; +} __packed __attribute((aligned(0x10))); + +extern struct naca naca; + +#endif diff --git a/hdata/spira.c b/hdata/spira.c index 661349fed..6900b71e8 100644 --- a/hdata/spira.c +++ b/hdata/spira.c @@ -3,7 +3,6 @@ #include #include -#include "spira.h" #include #include #include @@ -15,6 +14,8 @@ #include "hdata.h" #include "hostservices.h" +#include "naca.h" +#include "spira.h" /* Processor Initialization structure, contains * the initial NIA and MSR values for the entry @@ -1706,15 +1707,11 @@ static void fixup_spira(void) static void update_spirah_addr(void) { #if !defined(TEST) - extern uint32_t naca; - uint64_t *spirah_offset = (uint64_t *)&naca; - uint64_t *spira_offset = (uint64_t *)((u64)(&naca) + 0x30); - if (proc_gen < proc_gen_p9) return; - *spirah_offset = SPIRAH_OFF; - *spira_offset = SPIRA_OFF; + naca.spirah_addr = CPU_TO_BE64(SPIRAH_OFF); + naca.spira_addr = CPU_TO_BE64(SPIRA_OFF); spirah.ntuples.hs_data_area.addr = CPU_TO_BE64(SPIRA_HEAP_BASE - SKIBOOT_BASE); spirah.ntuples.mdump_res.addr = CPU_TO_BE64(MDRT_TABLE_BASE - SKIBOOT_BASE); #endif diff --git a/hdata/spira.h b/hdata/spira.h index eb5d1ea1b..14fbc5f59 100644 --- a/hdata/spira.h +++ b/hdata/spira.h @@ -80,6 +80,8 @@ struct spira { u8 reserved[0x60]; } __packed __align(0x100); +#define SPIRA_ACTUAL_SIZE (sizeof(struct spira) - 0x60) + extern struct spira spira; /* SPIRA-H signature */ diff --git a/include/mem-map.h b/include/mem-map.h index 991465190..90529df22 100644 --- a/include/mem-map.h +++ b/include/mem-map.h @@ -21,6 +21,8 @@ */ #define EXCEPTION_VECTORS_END 0x2000 +#define NACA_OFF 0x4000 + /* The NACA and other stuff in head.S need to be at the start: we * give it 64k before placing the SPIRA and related data. */ diff --git a/skiboot.lds.S b/skiboot.lds.S index 8890d69aa..3f90c25eb 100644 --- a/skiboot.lds.S +++ b/skiboot.lds.S @@ -59,6 +59,11 @@ SECTIONS KEEP(*(.head)) } + . = NACA_OFF; + .naca : { + KEEP(*(.naca.data)) + } + . = SPIRA_OFF; .spira : { KEEP(*(.spira.data))