From patchwork Wed Sep 6 10:10:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1830314 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=PduqpR8i; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=patchwork.ozlabs.org) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RgdSX46Vtz1yh5 for ; Wed, 6 Sep 2023 20:11:24 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=PduqpR8i; dkim-atps=neutral Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4RgdSX2k4Xz3cDr for ; Wed, 6 Sep 2023 20:11:24 +1000 (AEST) X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=PduqpR8i; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::102d; helo=mail-pj1-x102d.google.com; envelope-from=npiggin@gmail.com; receiver=lists.ozlabs.org) Received: from mail-pj1-x102d.google.com (mail-pj1-x102d.google.com [IPv6:2607:f8b0:4864:20::102d]) (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 4RgdRm1HF2z3bNm for ; Wed, 6 Sep 2023 20:10:44 +1000 (AEST) Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-26d1a17ce06so2021000a91.0 for ; Wed, 06 Sep 2023 03:10:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693995042; x=1694599842; darn=lists.ozlabs.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=spyi9E6aFM2W3I7YJzo/0GMRGEOlDfO9sxNYaK0k1V0=; b=PduqpR8i4NoWND8fjatIzoz5X2vnHGkyW+LxYhyGO4eerlwtFrIyODaU+yveHXrmuE 7fNAvAWHBdoqu4dvPqanA2fnSFSnM7Mtw+jwhN0fEp08M1RMG2ywsWdCqmsMx2ODmdg8 +rWiXys7BI3PsuhVjjXlL7XRWub9iqwEMa7Kf9psZGKcVs/IpMbMKKnzRvHPK8c3dewO H9GHwSGm82oMsSHiGLVEg8BEehTgLh6uAJ74gmPrqCvQAZoqJcuVSkEyOeNjqrM2lC5G gdzxpPwUl8TpKro24wW23W29h79/6Sxwnxl2qQwcZuyl0M7MVb6E0SzaNalXqINrQ3/W lG3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693995042; x=1694599842; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=spyi9E6aFM2W3I7YJzo/0GMRGEOlDfO9sxNYaK0k1V0=; b=Gy9Drl5JcG52xuteaUfJafnP75NOndGSO1qRTcJ8iq3E+FDT/JUeySN7hYSnfSmUSE ga3rfI+sN9fFfNbVI8MhXJzaO+vbBN5jvQqm6u4I6x7t1iHMzwBjKZH5GgfQ1PM/VrfA tlyW5VERwK01JrVi1BbA1kOh8JMTDrj9IgJNSU+Fc0Jr5fUs+OFRWozxLvEYDw6jmq4l BvYQEonJsqOnRYNOedfuQMHOdvaDBLEmFyjCJvCdbdOcv21XrC09AUHPovfG/LXPcbzb eXx/5j1kfFGcXOs8wsR/yX7PWQmwJVTUOyI9l69hK0mMLs7MgGO2bWk7rIc3xmJQCxSx w/Og== X-Gm-Message-State: AOJu0YzjuN8mPLNiW4cEf5bsMBFmZOt6s8KKoPdRapc3gqF7DGNVORtA Mx4dzzC2DZZtI/lpEx61t/2Wlo4gtSQ= X-Google-Smtp-Source: AGHT+IGJgo8ZXgYGABJ7p85GezirRwdr8FbEmdIjvQU8YB4jBUECLwtnpunBIJSIxnzfYQIeEbeWbg== X-Received: by 2002:a17:90a:bc49:b0:26b:726:118 with SMTP id t9-20020a17090abc4900b0026b07260118mr12078205pjv.19.1693995041780; Wed, 06 Sep 2023 03:10:41 -0700 (PDT) Received: from wheely.local0.net (193-116-105-24.tpgi.com.au. [193.116.105.24]) by smtp.gmail.com with ESMTPSA id m13-20020a17090a7f8d00b002609cadc56esm10639705pjl.11.2023.09.06.03.10.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Sep 2023 03:10:41 -0700 (PDT) From: Nicholas Piggin To: skiboot@lists.ozlabs.org Date: Wed, 6 Sep 2023 20:10:15 +1000 Message-Id: <20230906101017.130276-6-npiggin@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230906101017.130276-1-npiggin@gmail.com> References: <20230906101017.130276-1-npiggin@gmail.com> MIME-Version: 1.0 Subject: [Skiboot] [PATCH 5/7] hdata: Remove legacy SPIRA structure 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" skiboot only supports POWER8 > DD1 now, all supported platforms should use the new SPIRA-S/H structure. Signed-off-by: Nicholas Piggin --- hdata/fsp.c | 12 +-- hdata/iohub.c | 4 +- hdata/memory.c | 8 +- hdata/naca.c | 4 +- hdata/pcia.c | 6 +- hdata/slca.c | 4 +- hdata/spira.c | 149 +++++++------------------------------- hdata/spira.h | 69 ++---------------- hdata/test/Makefile.check | 21 +++--- hdata/test/hdata_to_dt.c | 53 ++++---------- hdata/tpmrel.c | 2 +- hdata/vpd.c | 27 +++---- hw/fsp/fsp-attn.c | 1 - include/mem-map.h | 20 +++-- skiboot.lds.S | 5 -- 15 files changed, 101 insertions(+), 284 deletions(-) diff --git a/hdata/fsp.c b/hdata/fsp.c index 30cda53f6..66b351b42 100644 --- a/hdata/fsp.c +++ b/hdata/fsp.c @@ -282,7 +282,7 @@ static void add_chip_id_to_sensors(struct dt_node *sensor_node, uint32_t slca_in return; } - for_each_ntuple_idx(&spira.ntuples.proc_chip, hdif, i, SPPCRD_HDIF_SIG) { + for_each_ntuple_idx(&spiras->ntuples.proc_chip, hdif, i, SPPCRD_HDIF_SIG) { fru_id = HDIF_get_idata(hdif, SPPCRD_IDATA_FRU_ID, NULL); if (!fru_id) return; @@ -309,7 +309,7 @@ static void add_ipmi_sensors(struct dt_node *bmc_node) const struct ipmi_sensors *ipmi_sensors; struct dt_node *sensors_node, *sensor_node; - hdif_sensor = get_hdif(&spira.ntuples.ipmi_sensor, IPMI_SENSORS_HDIF_SIG); + hdif_sensor = get_hdif(&spiras->ntuples.ipmi_sensor, IPMI_SENSORS_HDIF_SIG); if (!hdif_sensor) { prlog(PR_DEBUG, "SENSORS: Missing IPMI sensors mappings tuple\n"); return; @@ -498,11 +498,11 @@ void bmc_parse(void) const void *sp; int i; - sp = get_hdif(&spira.ntuples.sp_subsys, SPSS_HDIF_SIG); + sp = get_hdif(&spiras->ntuples.sp_subsys, SPSS_HDIF_SIG); if (!sp) return; - for_each_ntuple_idx(&spira.ntuples.sp_subsys, sp, i, SPSS_HDIF_SIG) { + for_each_ntuple_idx(&spiras->ntuples.sp_subsys, sp, i, SPSS_HDIF_SIG) { if (find_service_proc_type(sp, i) == SP_BMC) { bmc_create_node(sp); found = true; @@ -520,13 +520,13 @@ void fsp_parse(void) int index; /* Find SPSS tuple in SPIRA */ - sp = get_hdif(&spira.ntuples.sp_subsys, SPSS_HDIF_SIG); + sp = get_hdif(&spiras->ntuples.sp_subsys, SPSS_HDIF_SIG); if (!sp) { prlog(PR_WARNING, "HDAT: No FSP/BMC found!\n"); return; } - for_each_ntuple_idx(&spira.ntuples.sp_subsys, sp, index, SPSS_HDIF_SIG) { + for_each_ntuple_idx(&spiras->ntuples.sp_subsys, sp, index, SPSS_HDIF_SIG) { switch (find_service_proc_type(sp, index)) { case SP_FSP: if (!fsp_root) { diff --git a/hdata/iohub.c b/hdata/iohub.c index 92655407e..d1074241b 100644 --- a/hdata/iohub.c +++ b/hdata/iohub.c @@ -868,7 +868,7 @@ void io_parse(void) unsigned int i, size; /* Look for IO Hubs */ - if (!get_hdif(&spira.ntuples.cec_iohub_fru, "IO HUB")) { + if (!get_hdif(&spiras->ntuples.cec_iohub_fru, "IO HUB")) { prerror("CEC: Cannot locate IO Hub FRU data !\n"); return; } @@ -881,7 +881,7 @@ void io_parse(void) * increment it for each chip. Works for the machines I have here */ - for_each_ntuple_idx(&spira.ntuples.cec_iohub_fru, sp_iohubs, i, + for_each_ntuple_idx(&spiras->ntuples.cec_iohub_fru, sp_iohubs, i, CECHUB_FRU_HDIF_SIG) { const struct cechub_hub_fru_id *fru_id_data; unsigned int type; diff --git a/hdata/memory.c b/hdata/memory.c index efdb502b1..0b4e78585 100755 --- a/hdata/memory.c +++ b/hdata/memory.c @@ -236,7 +236,7 @@ static void add_bus_freq_to_ram_area(struct dt_node *ram_node, u32 chip_id) u64 freq; u32 size; - pcia = get_hdif(&spira.ntuples.pcia, SPPCIA_HDIF_SIG); + pcia = get_hdif(&spiras->ntuples.pcia, SPPCIA_HDIF_SIG); if (!pcia) { prlog(PR_WARNING, "HDAT: Failed to add memory bus frequency " "as PCIA does not exist\n"); @@ -897,15 +897,15 @@ static bool __memory_parse(struct dt_node *root) const struct msvpd_total_config_ms *tcms; unsigned int size; - ms_vpd = get_hdif(&spira.ntuples.ms_vpd, MSVPD_HDIF_SIG); + ms_vpd = get_hdif(&spiras->ntuples.ms_vpd, MSVPD_HDIF_SIG); if (!ms_vpd) { prerror("MS VPD: invalid\n"); op_display(OP_FATAL, OP_MOD_MEM, 0x0000); return false; } - if (be32_to_cpu(spira.ntuples.ms_vpd.act_len) < sizeof(*ms_vpd)) { + if (be32_to_cpu(spiras->ntuples.ms_vpd.act_len) < sizeof(*ms_vpd)) { prerror("MS VPD: invalid size %u\n", - be32_to_cpu(spira.ntuples.ms_vpd.act_len)); + be32_to_cpu(spiras->ntuples.ms_vpd.act_len)); op_display(OP_FATAL, OP_MOD_MEM, 0x0001); return false; } diff --git a/hdata/naca.c b/hdata/naca.c index 9581bb632..4fc43d861 100644 --- a/hdata/naca.c +++ b/hdata/naca.c @@ -9,9 +9,9 @@ __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), + .spira_addr = 0, .lid_table_addr = CPU_TO_BE64(NACA_OFF + offsetof(struct naca, hv_lid_load_table)), - .spira_size = CPU_TO_BE32(SPIRA_ACTUAL_SIZE), + .spira_size = 0, .hv_load_map_addr = 0, .attn_enabled = 0, .pcia_supported = 1, diff --git a/hdata/pcia.c b/hdata/pcia.c index f10048674..47f40cfec 100644 --- a/hdata/pcia.c +++ b/hdata/pcia.c @@ -15,8 +15,8 @@ static unsigned int pcia_index(const void *pcia) { - return (pcia - (void *)get_hdif(&spira.ntuples.pcia, "SPPCIA")) - / be32_to_cpu(spira.ntuples.pcia.alloc_len); + return (pcia - (void *)get_hdif(&spiras->ntuples.pcia, "SPPCIA")) + / be32_to_cpu(spiras->ntuples.pcia.alloc_len); } static const struct sppcia_cpu_thread *find_tada(const void *pcia, @@ -180,7 +180,7 @@ bool pcia_parse(void) const void *pcia; struct dt_node *cpus; - pcia = get_hdif(&spira.ntuples.pcia, "SPPCIA"); + pcia = get_hdif(&spiras->ntuples.pcia, "SPPCIA"); if (!pcia) return false; diff --git a/hdata/slca.c b/hdata/slca.c index 131e815af..fe8ed61e8 100644 --- a/hdata/slca.c +++ b/hdata/slca.c @@ -13,7 +13,7 @@ const struct slca_entry *slca_get_entry(uint16_t slca_index) struct HDIF_common_hdr *slca_hdr; int count; - slca_hdr = get_hdif(&spira.ntuples.slca, SLCA_HDIF_SIG); + slca_hdr = get_hdif(&spiras->ntuples.slca, SLCA_HDIF_SIG); if (!slca_hdr) { prerror("SLCA Invalid\n"); return NULL; @@ -89,7 +89,7 @@ static const struct slca_entry *slca_get_sai_entry(void) struct HDIF_common_hdr *slca_hdr; uint16_t sai_fru_id = SLCA_SAI_INDICATOR_ID; - slca_hdr = get_hdif(&spira.ntuples.slca, SLCA_HDIF_SIG); + slca_hdr = get_hdif(&spiras->ntuples.slca, SLCA_HDIF_SIG); if (!slca_hdr) { prerror("SLCA Invalid\n"); return NULL; diff --git a/hdata/spira.c b/hdata/spira.c index fbb14b0ec..500d317a1 100644 --- a/hdata/spira.c +++ b/hdata/spira.c @@ -121,48 +121,6 @@ __section(".mdst.data") struct mdst_table init_mdst_table[2] = { }, }; -/* SP Interface Root Array, aka SPIRA */ -__section(".spira.data") struct spira spira = { - .hdr = HDIF_SIMPLE_HDR("SPIRA ", SPIRA_VERSION, struct spira), - .ntuples_ptr = HDIF_IDATA_PTR(offsetof(struct spira, ntuples), - sizeof(struct spira_ntuples)), - .ntuples = { - .array_hdr = { - .offset = CPU_TO_BE32(HDIF_ARRAY_OFFSET), - .ecnt = CPU_TO_BE32(SPIRA_NTUPLES_COUNT), - .esize - = CPU_TO_BE32(sizeof(struct spira_ntuple)), - .eactsz = CPU_TO_BE32(0x18), - }, - /* We only populate some n-tuples */ - .proc_init = { - .addr = CPU_TO_BE64(PROCIN_OFF), - .alloc_cnt = CPU_TO_BE16(1), - .act_cnt = CPU_TO_BE16(1), - .alloc_len - = CPU_TO_BE32(sizeof(struct proc_init_data)), - }, - .heap = { - .addr = CPU_TO_BE64(SPIRA_HEAP_BASE), - .alloc_cnt = CPU_TO_BE16(1), - .alloc_len = CPU_TO_BE32(SPIRA_HEAP_SIZE), - }, - .mdump_src = { - .addr = CPU_TO_BE64(MDST_TABLE_OFF), - .alloc_cnt = CPU_TO_BE16(ARRAY_SIZE(init_mdst_table)), - .act_cnt = CPU_TO_BE16(ARRAY_SIZE(init_mdst_table)), - .alloc_len = - CPU_TO_BE32(sizeof(init_mdst_table)), - }, - .cpu_ctrl = { - .addr = CPU_TO_BE64(CPU_CTL_INIT_DATA_OFF), - .alloc_cnt = CPU_TO_BE16(1), - .act_cnt = CPU_TO_BE16(1), - .alloc_len = CPU_TO_BE32(sizeof(cpu_ctl_init_data)), - }, - }, -}; - /* The Hypervisor SPIRA-H Structure */ __section(".spirah.data") struct spirah spirah = { .hdr = HDIF_SIMPLE_HDR(SPIRAH_HDIF_SIG, SPIRAH_VERSION, struct spirah), @@ -376,7 +334,7 @@ static struct dt_node *add_xscom_node(uint64_t base, #define GET_HDIF_HDR -1 static const void *xscom_to_pcrd(struct dt_node *xscom, int idata_index) { - struct spira_ntuple *t = &spira.ntuples.proc_chip; + struct spira_ntuple *t = &spiras->ntuples.proc_chip; const struct HDIF_common_hdr *hdif; const void *idata; unsigned int size; @@ -567,7 +525,7 @@ static void add_xscom_add_pcia_assoc(struct dt_node *np, uint32_t pcid) * affinity can be different for groups of cores within the * chip, but for now we are going to ignore that */ - hdr = get_hdif(&spira.ntuples.pcia, SPPCIA_HDIF_SIG); + hdr = get_hdif(&spiras->ntuples.pcia, SPPCIA_HDIF_SIG); if (!hdr) return; @@ -605,7 +563,7 @@ static bool add_xscom_sppcrd(uint64_t xscom_base) const void *vpd; struct dt_node *np, *vpd_node; - for_each_ntuple_idx(&spira.ntuples.proc_chip, hdif, i, + for_each_ntuple_idx(&spiras->ntuples.proc_chip, hdif, i, SPPCRD_HDIF_SIG) { const struct sppcrd_chip_info *cinfo; const struct spira_fru_id *fru_id = NULL; @@ -731,7 +689,7 @@ static void add_xscom(void) unsigned int size; uint64_t xscom_base; - ms_vpd = get_hdif(&spira.ntuples.ms_vpd, MSVPD_HDIF_SIG); + ms_vpd = get_hdif(&spiras->ntuples.ms_vpd, MSVPD_HDIF_SIG); if (!ms_vpd) { prerror("XSCOM: Can't find MS VPD\n"); return; @@ -809,35 +767,7 @@ static void add_chiptod_node(unsigned int chip_id, int flags) dt_add_property(node, "secondary", NULL, 0); } -static bool add_chiptod_old(void) -{ - const void *hdif; - unsigned int i; - bool found = false; - - /* - * Locate chiptod ID structures in SPIRA - */ - if (!get_hdif(&spira.ntuples.chip_tod, "TOD ")) - return found; - - for_each_ntuple_idx(&spira.ntuples.chip_tod, hdif, i, "TOD ") { - const struct chiptod_chipid *id; - - id = HDIF_get_idata(hdif, CHIPTOD_IDATA_CHIPID, NULL); - if (!CHECK_SPPTR(id)) { - prerror("CHIPTOD: Bad ChipID data %d\n", i); - continue; - } - - add_chiptod_node(pcid_to_chip_id(be32_to_cpu(id->chip_id)), - be32_to_cpu(id->flags)); - found = true; - } - return found; -} - -static bool add_chiptod_new(void) +static bool add_chiptod(void) { const void *hdif; unsigned int i; @@ -846,10 +776,10 @@ static bool add_chiptod_new(void) /* * Locate Proc Chip ID structures in SPIRA */ - if (!get_hdif(&spira.ntuples.proc_chip, SPPCRD_HDIF_SIG)) + if (!get_hdif(&spiras->ntuples.proc_chip, SPPCRD_HDIF_SIG)) return found; - for_each_ntuple_idx(&spira.ntuples.proc_chip, hdif, i, + for_each_ntuple_idx(&spiras->ntuples.proc_chip, hdif, i, SPPCRD_HDIF_SIG) { const struct sppcrd_chip_info *cinfo; const struct sppcrd_chip_tod *tinfo; @@ -941,7 +871,7 @@ static void add_nx(void) unsigned int i; void *hdif; - for_each_ntuple_idx(&spira.ntuples.proc_chip, hdif, i, + for_each_ntuple_idx(&spiras->ntuples.proc_chip, hdif, i, SPPCRD_HDIF_SIG) { const struct sppcrd_chip_info *cinfo; u32 ve; @@ -1051,7 +981,7 @@ static void dt_init_secureboot_node(const struct iplparams_sysparams *sysparams) static void opal_dump_add_mpipl_boot(const struct iplparams_iplparams *p) { - u32 mdrt_cnt = be16_to_cpu(spira.ntuples.mdump_res.act_cnt); + u32 mdrt_cnt = be16_to_cpu(spirah.ntuples.mdump_res.act_cnt); u32 mdrt_max_cnt = MDRT_TABLE_SIZE / sizeof(struct mdrt_table); struct dt_node *dump_node; @@ -1386,7 +1316,7 @@ static void add_iplparams(void) struct dt_node *iplp_node; const void *ipl_parms; - ipl_parms = get_hdif(&spira.ntuples.ipl_parms, "IPLPMS"); + ipl_parms = get_hdif(&spiras->ntuples.ipl_parms, "IPLPMS"); if (!ipl_parms) { prerror("IPLPARAMS: Cannot find IPL Parms in SPIRA\n"); return; @@ -1415,7 +1345,7 @@ uint32_t pcid_to_chip_id(uint32_t proc_chip_id) const void *hdif; /* First, try the proc_chip ntuples for chip data */ - for_each_ntuple_idx(&spira.ntuples.proc_chip, hdif, i, + for_each_ntuple_idx(&spiras->ntuples.proc_chip, hdif, i, SPPCRD_HDIF_SIG) { const struct sppcrd_chip_info *cinfo; @@ -1441,7 +1371,7 @@ uint32_t pcid_to_topology_idx(uint32_t proc_chip_id) const void *hdif; /* First, try the proc_chip ntuples for chip data */ - for_each_ntuple_idx(&spira.ntuples.proc_chip, hdif, i, + for_each_ntuple_idx(&spiras->ntuples.proc_chip, hdif, i, SPPCRD_HDIF_SIG) { const struct sppcrd_chip_info *cinfo; @@ -1491,15 +1421,15 @@ static void hostservices_parse(void) return; ntuples_size = sizeof(struct HDIF_array_hdr) + - be32_to_cpu(spira.ntuples.array_hdr.ecnt) * + be32_to_cpu(spiras->ntuples.array_hdr.ecnt) * sizeof(struct spira_ntuple); - if (offsetof(struct spira_ntuples, hs_data) >= ntuples_size) { + if (offsetof(struct spiras_ntuples, hs_data) >= ntuples_size) { prerror("SPIRA: No host services data found\n"); return; } - hs_hdr = get_hdif(&spira.ntuples.hs_data, HSERV_HDIF_SIG); + hs_hdr = get_hdif(&spiras->ntuples.hs_data, HSERV_HDIF_SIG); if (!hs_hdr) { prerror("SPIRA: No host services data found\n"); return; @@ -1515,7 +1445,7 @@ static void hostservices_parse(void) static void add_stop_levels(void) { - struct spira_ntuple *t = &spira.ntuples.proc_chip; + struct spira_ntuple *t = &spiras->ntuples.proc_chip; struct HDIF_common_hdr *hdif; u32 stop_levels = ~0; bool valid = false; @@ -1775,13 +1705,10 @@ static void add_npus(void) } /* - * Legacy SPIRA is being deprecated and we have new SPIRA-H/S structures. - * But on older system (p7?) we will continue to get legacy SPIRA. - * - * SPIRA-S is initialized and provided by FSP. We use SPIRA-S signature - * to identify supported format. Also if required adjust spira pointer. + * SPIRA-S is initialized and provided by boot firmware. Check the SPIRA-S + * signature to confirm it was provided. */ -static void fixup_spira(void) +static bool find_spiras(void) { #if !defined(TEST) spiras = (struct spiras *)SPIRA_HEAP_BASE; @@ -1789,35 +1716,12 @@ static void fixup_spira(void) /* Validate SPIRA-S signature */ if (!spiras) - return; + return false; if (!HDIF_check(&spiras->hdr, SPIRAS_HDIF_SIG)) - return; + return false; prlog(PR_DEBUG, "SPIRA-S found.\n"); - - spira.ntuples.sp_subsys = spiras->ntuples.sp_subsys; - spira.ntuples.ipl_parms = spiras->ntuples.ipl_parms; - spira.ntuples.nt_enclosure_vpd = spiras->ntuples.nt_enclosure_vpd; - spira.ntuples.slca = spiras->ntuples.slca; - spira.ntuples.backplane_vpd = spiras->ntuples.backplane_vpd; - spira.ntuples.system_vpd = spiras->ntuples.system_vpd; - spira.ntuples.proc_init = spirah.ntuples.proc_init; - spira.ntuples.clock_vpd = spiras->ntuples.clock_vpd; - spira.ntuples.anchor_vpd = spiras->ntuples.anchor_vpd; - spira.ntuples.op_panel_vpd = spiras->ntuples.op_panel_vpd; - spira.ntuples.misc_cec_fru_vpd = spiras->ntuples.misc_cec_fru_vpd; - spira.ntuples.ms_vpd = spiras->ntuples.ms_vpd; - spira.ntuples.cec_iohub_fru = spiras->ntuples.cec_iohub_fru; - spira.ntuples.cpu_ctrl = spirah.ntuples.cpu_ctrl; - spira.ntuples.mdump_src = spirah.ntuples.mdump_src; - spira.ntuples.mdump_dst = spirah.ntuples.mdump_dst; - spira.ntuples.mdump_res = spirah.ntuples.mdump_res; - spira.ntuples.proc_dump_area = spirah.ntuples.proc_dump_area; - spira.ntuples.pcia = spiras->ntuples.pcia; - spira.ntuples.proc_chip = spiras->ntuples.proc_chip; - spira.ntuples.hs_data = spiras->ntuples.hs_data; - spira.ntuples.ipmi_sensor = spiras->ntuples.ipmi_sensor; - spira.ntuples.node_stb_data = spiras->ntuples.node_stb_data; + return true; } /* @@ -1831,7 +1735,7 @@ static void update_spirah_addr(void) return; naca.spirah_addr = CPU_TO_BE64(SPIRAH_OFF); - naca.spira_addr = CPU_TO_BE64(SPIRA_OFF); + naca.spira_addr = 0; 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 @@ -1843,7 +1747,10 @@ int parse_hdat(bool is_opal) prlog(PR_DEBUG, "Parsing HDAT...\n"); - fixup_spira(); + if (!find_spiras()) { + prlog(PR_ERR, "SPIRA-S not found.\n"); + return -1; + } update_spirah_addr(); @@ -1882,7 +1789,7 @@ int parse_hdat(bool is_opal) fsp_parse(); /* Add ChipTOD's */ - if (!add_chiptod_old() && !add_chiptod_new()) + if (!add_chiptod()) prerror("CHIPTOD: No ChipTOD found !\n"); /* Add NX */ diff --git a/hdata/spira.h b/hdata/spira.h index c0eb2a037..1789de1b5 100644 --- a/hdata/spira.h +++ b/hdata/spira.h @@ -7,16 +7,15 @@ #include "hdif.h" /* - * The SPIRA structure + * The SPIRA-H and SPIRA-S structures * - * NOTE: This is one of the only HDIF structure that we layout entirely - * as a C struct because it's provided by us to the FSP. Almost everything - * else is generated by the FSP, and thus must be "parsed" since the various - * offsets and alignments might change. + * SPIRA-H is built in the primary hypervisor (skiboot) lid, pointed to by + * the NACA and provides details to the boot firmware. + * + * SPIRA-S is built at IPL time by the boot firmware at the host data area + * location specified in SPIRA-H, and thus must be parsed. */ -#define SPIRA_VERSION 0x20 /* Like 730 ? */ - struct spira_ntuple { __be64 addr; __be16 alloc_cnt; @@ -27,59 +26,6 @@ struct spira_ntuple { __be64 padding; } __packed; -#define SPIRA_NTUPLES_COUNT 0x19 - -struct spira_ntuples { - struct HDIF_array_hdr array_hdr; - struct spira_ntuple sp_subsys; /* 0x040 */ - struct spira_ntuple ipl_parms; /* 0x060 */ - struct spira_ntuple nt_enclosure_vpd; /* 0x080 */ - struct spira_ntuple slca; /* 0x0a0 */ - struct spira_ntuple backplane_vpd; /* 0x0c0 */ - struct spira_ntuple system_vpd; /* 0x0e0 */ - struct spira_ntuple chip_tod; /* 0x100 */ - struct spira_ntuple proc_init; /* 0x120 */ - struct spira_ntuple clock_vpd; /* 0x140 */ - struct spira_ntuple anchor_vpd; /* 0x160 */ - struct spira_ntuple op_panel_vpd; /* 0x180 */ - struct spira_ntuple ext_cache_fru_vpd; /* 0x1a0 */ - struct spira_ntuple misc_cec_fru_vpd; /* 0x1c0 */ - struct spira_ntuple paca; /* 0x1e0 */ - struct spira_ntuple ms_vpd; /* 0x200 */ - struct spira_ntuple cec_iohub_fru; /* 0x220 */ - struct spira_ntuple cpu_ctrl; /* 0x240 */ - struct spira_ntuple mdump_src; /* 0x260 */ - struct spira_ntuple mdump_dst; /* 0x280 */ - struct spira_ntuple mdump_res; /* 0x2a0 */ - struct spira_ntuple heap; /* 0x2c0 */ - struct spira_ntuple pcia; /* 0x2e0 */ - struct spira_ntuple proc_chip; /* 0x300 */ - struct spira_ntuple hs_data; /* 0x320 */ - struct spira_ntuple ipmi_sensor; /* 0x360 */ - struct spira_ntuple node_stb_data; /* 0x380 */ - struct spira_ntuple proc_dump_area; /* 0x400 */ -}; - -#define SPIRA_RESERVED_BYTES 0x60 - -struct spira { - struct HDIF_common_hdr hdr; - struct HDIF_idata_ptr ntuples_ptr; - __be64 pad; - struct spira_ntuples ntuples; - /* - * We reserve 0xc0 rather than 0x4c0 so we fit SPIRAH/SPIRAS here - * while preserving compatibility with existing P8 systems. - * - * According to FSP engineers, this is an okay thing to do. - */ - u8 reserved[SPIRA_RESERVED_BYTES]; -} __packed __align(0x100); - -#define SPIRA_ACTUAL_SIZE (sizeof(struct spira) - SPIRA_RESERVED_BYTES) - -extern struct spira spira; - /* SPIRA-H signature */ #define SPIRAH_HDIF_SIG "SPIRAH" @@ -152,7 +98,6 @@ struct spiras { extern struct spiras *skiboot_constant_addr spiras; - /* This macro can be used to check the validity of a pointer returned * by one of the HDIF API functions. It returns true if the pointer * appears valid. If it's not valid and not NULL, it will print some @@ -178,7 +123,7 @@ extern struct HDIF_common_hdr *__get_hdif(struct spira_ntuple *n, be32_to_cpu((_ntuples)->alloc_len)); \ _p = (void *)_p + be32_to_cpu((_ntuples)->alloc_len)) -#define for_each_pcia(p) for_each_ntuple(&spira.ntuples.pcia, p, SPPCIA_HDIF_SIG) +#define for_each_pcia(p) for_each_ntuple(&spiras->ntuples.pcia, p, SPPCIA_HDIF_SIG) /* We override these for testing. */ #ifndef ntuple_addr diff --git a/hdata/test/Makefile.check b/hdata/test/Makefile.check index 7eb5f3f45..81d55614a 100644 --- a/hdata/test/Makefile.check +++ b/hdata/test/Makefile.check @@ -18,24 +18,21 @@ hdata/test/hdata_to_dt-check: hdata/test/hdata_to_dt-check-dt # Add some test ntuples for open source version... hdata/test/hdata_to_dt-check-q: hdata/test/hdata_to_dt - $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -8E -q hdata/test/p81-811.spira hdata/test/p81-811.spira.heap, $<) - $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -8E -s -q hdata/test/p8-840-spira.spirah hdata/test/p8-840-spira.spiras, $<) - $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -9 -s -q hdata/test/p8-840-spira.spirah hdata/test/op920.wsp.heap, $<) - $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -10 -s -q hdata/test/p8-840-spira.spirah hdata/test/p10-rainier.spiras, $<) + $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -8E -q hdata/test/p8-840-spira.spirah hdata/test/p8-840-spira.spiras, $<) + $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -9 -q hdata/test/p8-840-spira.spirah hdata/test/op920.wsp.heap, $<) + $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -10 -q hdata/test/p8-840-spira.spirah hdata/test/p10-rainier.spiras, $<) hdata/test/hdata_to_dt-check-dt: hdata/test/hdata_to_dt - $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -8E hdata/test/p81-811.spira hdata/test/p81-811.spira.heap 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/p81-811.spira.dts, $< device-tree) - $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -8E -s hdata/test/p8-840-spira.spirah hdata/test/p8-840-spira.spiras 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/p8-840-spira.dts, $< device-tree) - $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -9 -s hdata/test/p8-840-spira.spirah hdata/test/op920.wsp.heap 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/op920.wsp.dts, $< device-tree) - $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -10 -s hdata/test/p8-840-spira.spirah hdata/test/p10-rainier.spiras 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/p10-rainier.dts, $< device-tree) + $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -8E hdata/test/p8-840-spira.spirah hdata/test/p8-840-spira.spiras 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/p8-840-spira.dts, $< device-tree) + $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -9 hdata/test/p8-840-spira.spirah hdata/test/op920.wsp.heap 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/op920.wsp.dts, $< device-tree) + $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -10 hdata/test/p8-840-spira.spirah hdata/test/p10-rainier.spiras 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/p10-rainier.dts, $< device-tree) hdata/test/hdata_to_dt-gcov-run: hdata/test/hdata_to_dt-check-dt-gcov-run hdata/test/hdata_to_dt-check-dt-gcov-run: hdata/test/hdata_to_dt-gcov - $(call Q, TEST-COVERAGE , ./hdata/test/hdata_to_dt-gcov -8E hdata/test/p81-811.spira hdata/test/p81-811.spira.heap 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/p81-811.spira.dts, $< device-tree) - $(call Q, TEST-COVERAGE , ./hdata/test/hdata_to_dt-gcov -8E -s hdata/test/p8-840-spira.spirah hdata/test/p8-840-spira.spiras 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/p8-840-spira.dts, $< device-tree) - $(call Q, TEST-COVERAGE , ./hdata/test/hdata_to_dt -9 -s hdata/test/p8-840-spira.spirah hdata/test/op920.wsp.heap 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/op920.wsp.dts, $< device-tree) - $(call Q, TEST-COVERAGE , ./hdata/test/hdata_to_dt -10 -s hdata/test/p8-840-spira.spirah hdata/test/p10-rainier.spiras 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/p10-rainier.dts, $< device-tree) + $(call Q, TEST-COVERAGE , ./hdata/test/hdata_to_dt-gcov -8E hdata/test/p8-840-spira.spirah hdata/test/p8-840-spira.spiras 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/p8-840-spira.dts, $< device-tree) + $(call Q, TEST-COVERAGE , ./hdata/test/hdata_to_dt -9 hdata/test/p8-840-spira.spirah hdata/test/op920.wsp.heap 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/op920.wsp.dts, $< device-tree) + $(call Q, TEST-COVERAGE , ./hdata/test/hdata_to_dt -10 hdata/test/p8-840-spira.spirah hdata/test/p10-rainier.spiras 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/p10-rainier.dts, $< device-tree) hdata/test/stubs.o: hdata/test/stubs.c $(call Q, HOSTCC , $(HOSTCC) $(HOSTCFLAGS) -g -c -o $@ $<, $<) diff --git a/hdata/test/hdata_to_dt.c b/hdata/test/hdata_to_dt.c index ead6e3c98..e088924ef 100644 --- a/hdata/test/hdata_to_dt.c +++ b/hdata/test/hdata_to_dt.c @@ -301,7 +301,7 @@ static void dump_hdata_fdt(struct dt_node *root) int main(int argc, char *argv[]) { int fd, r, i = 0, opt_count = 0; - bool verbose = false, quiet = false, new_spira = false, blobs = false; + bool verbose = false, quiet = false, blobs = false; while (argv[++i]) { if (strcmp(argv[i], "-v") == 0) { @@ -310,9 +310,6 @@ int main(int argc, char *argv[]) } else if (strcmp(argv[i], "-q") == 0) { quiet = true; opt_count++; - } else if (strcmp(argv[i], "-s") == 0) { - new_spira = true; - opt_count++; } else if (strcmp(argv[i], "-b") == 0) { blobs = true; opt_count++; @@ -345,8 +342,7 @@ int main(int argc, char *argv[]) errx(1, "Converts HDAT dumps to DTB.\n" "\n" "Usage:\n" - " hdata \n" - " hdata -s \n" + " hdata \n" "Options: \n" " -v Verbose\n" " -q Quiet mode\n" @@ -368,36 +364,19 @@ int main(int argc, char *argv[]) phys_map_init(fake_pvr); /* Copy in spira dump (assumes little has changed!). */ - if (new_spira) { - fd = open(argv[1], O_RDONLY); - if (fd < 0) - err(1, "opening %s", argv[1]); - r = read(fd, &spirah, sizeof(spirah)); - if (r < sizeof(spirah.hdr)) - err(1, "reading %s gave %i", argv[1], r); - if (verbose) - printf("verbose: read spirah %u bytes\n", r); - close(fd); - - undefined_bytes((void *)&spirah + r, sizeof(spirah) - r); - - base_addr = be64_to_cpu(spirah.ntuples.hs_data_area.addr); - } else { - fd = open(argv[1], O_RDONLY); - if (fd < 0) - err(1, "opening %s", argv[1]); - r = read(fd, &spira, sizeof(spira)); - if (r < sizeof(spira.hdr)) - err(1, "reading %s gave %i", argv[1], r); - if (verbose) - printf("verbose: read spira %u bytes\n", r); - close(fd); - - undefined_bytes((void *)&spira + r, sizeof(spira) - r); - - base_addr = be64_to_cpu(spira.ntuples.heap.addr); - } + fd = open(argv[1], O_RDONLY); + if (fd < 0) + err(1, "opening %s", argv[1]); + r = read(fd, &spirah, sizeof(spirah)); + if (r < sizeof(spirah.hdr)) + err(1, "reading %s gave %i", argv[1], r); + if (verbose) + printf("verbose: read spirah %u bytes\n", r); + close(fd); + + undefined_bytes((void *)&spirah + r, sizeof(spirah) - r); + base_addr = be64_to_cpu(spirah.ntuples.hs_data_area.addr); if (!base_addr) errx(1, "Invalid base addr"); if (verbose) @@ -417,8 +396,8 @@ int main(int argc, char *argv[]) spira_heap_size, spira_heap); close(fd); - if (new_spira) - spiras = (struct spiras *)spira_heap; + /* SPIRA-S defined to be at the start of the SPIRA Host Data Area */ + spiras = (struct spiras *)spira_heap; if (quiet) { fclose(stdout); diff --git a/hdata/tpmrel.c b/hdata/tpmrel.c index 4be3f81c4..c70791839 100644 --- a/hdata/tpmrel.c +++ b/hdata/tpmrel.c @@ -209,7 +209,7 @@ void node_stb_parse(void) { struct HDIF_common_hdr *hdif_hdr; - hdif_hdr = get_hdif(&spira.ntuples.node_stb_data, STB_HDIF_SIG); + hdif_hdr = get_hdif(&spiras->ntuples.node_stb_data, STB_HDIF_SIG); if (!hdif_hdr) { prlog(PR_DEBUG, "TPMREL data not found\n"); return; diff --git a/hdata/vpd.c b/hdata/vpd.c index c778de346..cfc8d22a6 100644 --- a/hdata/vpd.c +++ b/hdata/vpd.c @@ -423,7 +423,7 @@ void dt_init_vpd_node(void) dt_add_property_cells(dt_vpd, "#size-cells", 0); dt_add_property_cells(dt_vpd, "#address-cells", 1); - slca_hdr = get_hdif(&spira.ntuples.slca, SLCA_HDIF_SIG); + slca_hdr = get_hdif(&spiras->ntuples.slca, SLCA_HDIF_SIG); if (!slca_hdr) { prerror("SLCA Invalid\n"); return; @@ -551,7 +551,7 @@ static void dt_add_model_name(void) model = dt_find_property(dt_root, "model"); - iplp = get_hdif(&spira.ntuples.ipl_parms, "IPLPMS"); + iplp = get_hdif(&spiras->ntuples.ipl_parms, "IPLPMS"); if (!iplp) goto def_model; @@ -627,7 +627,7 @@ static void sysvpd_parse(void) const struct spira_fru_id *fru_id; struct HDIF_common_hdr *sysvpd_hdr; - sysvpd_hdr = get_hdif(&spira.ntuples.system_vpd, SYSVPD_HDIF_SIG); + sysvpd_hdr = get_hdif(&spiras->ntuples.system_vpd, SYSVPD_HDIF_SIG); if (!sysvpd_hdr) return; @@ -683,12 +683,12 @@ static void iohub_vpd_parse(void) const struct cechub_hub_fru_id *fru_id_data; unsigned int i, vpd_sz, fru_id_sz; - if (!get_hdif(&spira.ntuples.cec_iohub_fru, CECHUB_FRU_HDIF_SIG)) { + if (!get_hdif(&spiras->ntuples.cec_iohub_fru, CECHUB_FRU_HDIF_SIG)) { prerror("VPD: Could not find IO HUB FRU data\n"); return; } - for_each_ntuple_idx(&spira.ntuples.cec_iohub_fru, iohub_hdr, + for_each_ntuple_idx(&spiras->ntuples.cec_iohub_fru, iohub_hdr, i, CECHUB_FRU_HDIF_SIG) { fru_id_data = HDIF_get_idata(iohub_hdr, @@ -732,25 +732,22 @@ void vpd_parse(void) sysvpd_parse(); /* Enclosure */ - _vpd_parse(spira.ntuples.nt_enclosure_vpd); + _vpd_parse(spiras->ntuples.nt_enclosure_vpd); /* Backplane */ - _vpd_parse(spira.ntuples.backplane_vpd); + _vpd_parse(spiras->ntuples.backplane_vpd); /* clock card -- does this use the FRUVPD sig? */ - _vpd_parse(spira.ntuples.clock_vpd); + _vpd_parse(spiras->ntuples.clock_vpd); /* Anchor card */ - _vpd_parse(spira.ntuples.anchor_vpd); + _vpd_parse(spiras->ntuples.anchor_vpd); /* Op panel -- does this use the FRUVPD sig? */ - _vpd_parse(spira.ntuples.op_panel_vpd); - - /* External cache FRU vpd -- does this use the FRUVPD sig? */ - _vpd_parse(spira.ntuples.ext_cache_fru_vpd); + _vpd_parse(spiras->ntuples.op_panel_vpd); /* Misc CEC FRU */ - _vpd_parse(spira.ntuples.misc_cec_fru_vpd); + _vpd_parse(spiras->ntuples.misc_cec_fru_vpd); /* CEC IO HUB FRU */ iohub_vpd_parse(); @@ -760,7 +757,7 @@ void vpd_parse(void) * different, the FRU ID data and pointer pair to keyword VPD * are the same offset as a FRUVPD entry. So reuse it */ - fruvpd_hdr = get_hdif(&spira.ntuples.sp_subsys, SPSS_HDIF_SIG); + fruvpd_hdr = get_hdif(&spiras->ntuples.sp_subsys, SPSS_HDIF_SIG); if (fruvpd_hdr) dt_add_vpd_node(fruvpd_hdr, FRUVPD_IDATA_FRU_ID, FRUVPD_IDATA_KW_VPD); diff --git a/hw/fsp/fsp-attn.c b/hw/fsp/fsp-attn.c index 6e358e0d4..877390240 100644 --- a/hw/fsp/fsp-attn.c +++ b/hw/fsp/fsp-attn.c @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include diff --git a/include/mem-map.h b/include/mem-map.h index 9250a63d5..9fd8c91c9 100644 --- a/include/mem-map.h +++ b/include/mem-map.h @@ -26,17 +26,13 @@ /* 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. */ -#define SPIRA_OFF 0x00010000 -#define SPIRA_SIZE 0x400 -#define SPIRAH_OFF 0x00010400 +#define SPIRAH_OFF 0x00010000 #define SPIRAH_SIZE 0x300 #define PROC_DUMP_AREA_OFF (SPIRAH_OFF + SPIRAH_SIZE) #define PROC_DUMP_AREA_SIZE 0x100 -/* Actual SPIRA size is lesser than 1K (presently 0x340 bytes). - * Use 1K for legacy SPIRA. - * +/* * SPIRA-H is lesser than 768 bytes (presently we use 288 bytes) * Use 768 bytes for SPIRAH. * @@ -48,21 +44,23 @@ * endian: linker can't endian reverse a pointer for us. Text, data * et. al. follows this. */ -#define PROCIN_OFF (SPIRA_OFF + 0x800) +#define PROCIN_OFF (PROC_DUMP_AREA_OFF + PROC_DUMP_AREA_SIZE) +#define PROCIN_SIZE 0x800 /* Initial MDST and MDDT tables like PROCIN, we need fixed addresses, * we leave a 2k gap for PROCIN */ -#define MDST_TABLE_OFF (SPIRA_OFF + 0x1000) +#define MDST_TABLE_OFF (PROCIN_OFF + PROCIN_SIZE) #define MDST_TABLE_SIZE 0x400 -#define MDDT_TABLE_OFF (SPIRA_OFF + 0x1400) +#define MDDT_TABLE_OFF (MDST_TABLE_OFF + MDST_TABLE_SIZE) #define MDDT_TABLE_SIZE 0x400 /* Like MDST and MDDT, we need fixed address for CPU control header. - * We leave a 2k gap for MDST. CPU_CTL table is of size ~4k + * We leave a 2k gap for MDST. CPU_CTL table is of size ~4k, give it 8k. */ -#define CPU_CTL_OFF (SPIRA_OFF + 0x1800) +#define CPU_CTL_OFF (MDDT_TABLE_OFF + MDDT_TABLE_SIZE) +#define CPU_CTL_SIZE 0x2000 /* We keep a gap of 5M for skiboot text & bss for now. We will * then we have our heap which goes up to base + 14M (so 11M for diff --git a/skiboot.lds.S b/skiboot.lds.S index 058848fa9..f45e90df0 100644 --- a/skiboot.lds.S +++ b/skiboot.lds.S @@ -66,11 +66,6 @@ SECTIONS KEEP(*(.naca.data)) } - . = SPIRA_OFF; - .spira : { - KEEP(*(.spira.data)) - } - . = SPIRAH_OFF; .spirah : { KEEP(*(.spirah.data))