diff --git a/hdata/fsp.c b/hdata/fsp.c
index 30cda53..66b351b 100644
--- a/hdata/fsp.c
+++ b/hdata/fsp.c
@@ -282,7 +282,7 @@
 		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 @@
 	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 @@
 	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 @@
 	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 9265540..d107424 100644
--- a/hdata/iohub.c
+++ b/hdata/iohub.c
@@ -868,7 +868,7 @@
 	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 @@
 	 * 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 efdb502..0b4e785 100755
--- a/hdata/memory.c
+++ b/hdata/memory.c
@@ -236,7 +236,7 @@
 	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 @@
 	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 9581bb6..4fc43d8 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 f100486..47f40cf 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 @@
 	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 131e815..fe8ed61 100644
--- a/hdata/slca.c
+++ b/hdata/slca.c
@@ -13,7 +13,7 @@
 	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 @@
 	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 fbb14b0..500d317 100644
--- a/hdata/spira.c
+++ b/hdata/spira.c
@@ -121,48 +121,6 @@
 	},
 };
 
-/* 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 @@
 #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 @@
 	 * 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 @@
 	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 @@
 	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 @@
 		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 @@
 	/*
 	 * 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 @@
 	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 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 @@
 	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 @@
 	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 @@
 	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 @@
 		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 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 @@
 }
 
 /*
- * 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 @@
 
 	/* 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 @@
 		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 @@
 
 	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 @@
 	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 c0eb2a0..1789de1 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 @@
 	__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 @@
 
 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 @@
 			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 7eb5f3f..81d5561 100644
--- a/hdata/test/Makefile.check
+++ b/hdata/test/Makefile.check
@@ -18,24 +18,21 @@
 
 # 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 ead6e3c..e088924 100644
--- a/hdata/test/hdata_to_dt.c
+++ b/hdata/test/hdata_to_dt.c
@@ -301,7 +301,7 @@
 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 @@
 		} 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 @@
 		errx(1, "Converts HDAT dumps to DTB.\n"
 		     "\n"
 		     "Usage:\n"
-		     "	hdata <opts> <spira-dump> <heap-dump>\n"
-		     "	hdata <opts> -s <spirah-dump> <spiras-dump>\n"
+		     "	hdata <opts> <spirah-dump> <spiras-dump>\n"
 		     "Options: \n"
 		     "	-v Verbose\n"
 		     "	-q Quiet mode\n"
@@ -368,36 +364,19 @@
 		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);
+	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);
+	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);
-	}
-
+	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 @@
 		       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 4be3f81..c707918 100644
--- a/hdata/tpmrel.c
+++ b/hdata/tpmrel.c
@@ -209,7 +209,7 @@
 {
 	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 c778de3..cfc8d22 100644
--- a/hdata/vpd.c
+++ b/hdata/vpd.c
@@ -423,7 +423,7 @@
 	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 @@
 
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	 * 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 6e358e0..8773902 100644
--- a/hw/fsp/fsp-attn.c
+++ b/hw/fsp/fsp-attn.c
@@ -11,7 +11,6 @@
 #include <skiboot.h>
 #include <fsp-elog.h>
 #include <fsp-attn.h>
-#include <hdata/spira.h>
 #include <stack.h>
 #include <processor.h>
 #include <opal-dump.h>
diff --git a/include/mem-map.h b/include/mem-map.h
index 9250a63..9fd8c91 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 058848f..f45e90d 100644
--- a/skiboot.lds.S
+++ b/skiboot.lds.S
@@ -66,11 +66,6 @@
 		KEEP(*(.naca.data))
 	}
 
-	. = SPIRA_OFF;
-	.spira : {
-		KEEP(*(.spira.data))
-	}
-
 	. = SPIRAH_OFF;
 	.spirah : {
 		KEEP(*(.spirah.data))
