496 lines
24 KiB
C
496 lines
24 KiB
C
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
|
|
/*
|
|
* Physical memory map
|
|
*
|
|
* Copyright 2017-2019 IBM Corp.
|
|
*/
|
|
|
|
#include <phys-map.h>
|
|
#include <chip.h>
|
|
#include <skiboot.h>
|
|
#include <opal-api.h>
|
|
#include <stack.h>
|
|
#include <inttypes.h>
|
|
|
|
struct phys_map_entry {
|
|
enum phys_map_type type;
|
|
int index;
|
|
uint64_t addr;
|
|
uint64_t size;
|
|
};
|
|
|
|
struct phys_map_info {
|
|
int chip_select_shift;
|
|
const struct phys_map_entry *table;
|
|
};
|
|
|
|
static const struct phys_map_info *phys_map;
|
|
|
|
static const struct phys_map_entry phys_map_table_p10[] = {
|
|
/* System memory upto 4TB minus GPU memory */
|
|
{ SYSTEM_MEM, 0, 0x0000000000000000ull, 0x0000034000000000ull },
|
|
|
|
/* Configure OpenCapi memory as before with the old chips.
|
|
* Keep in mind that we would need to rework this by allocating
|
|
* a new topology id.
|
|
*/
|
|
{ OCAPI_MEM, 0, 0x0002000000000000ull, 0x0000040000000000ull },
|
|
{ OCAPI_MEM, 1, 0x0002040000000000ull, 0x0000040000000000ull },
|
|
|
|
/* 0 TB offset @ MMIO 0x0006000000000000ull */
|
|
{ PHB5_64BIT_MMIO, 0, 0x0006000000000000ull, 0x0000004000000000ull },
|
|
{ PHB5_64BIT_MMIO, 1, 0x0006004000000000ull, 0x0000004000000000ull },
|
|
{ PHB5_64BIT_MMIO, 2, 0x0006008000000000ull, 0x0000004000000000ull },
|
|
{ PHB5_32BIT_MMIO, 0, 0x000600c000000000ull, 0x0000000080000000ull },
|
|
{ PHB5_32BIT_MMIO, 1, 0x000600c080000000ull, 0x0000000080000000ull },
|
|
{ PHB5_32BIT_MMIO, 2, 0x000600c100000000ull, 0x0000000080000000ull },
|
|
{ PHB5_32BIT_MMIO, 3, 0x000600c180000000ull, 0x0000000080000000ull },
|
|
{ PHB5_32BIT_MMIO, 4, 0x000600c200000000ull, 0x0000000080000000ull },
|
|
{ PHB5_32BIT_MMIO, 5, 0x000600c280000000ull, 0x0000000080000000ull },
|
|
{ PHB5_XIVE_ESB , 0, 0x000600c300000000ull, 0x0000000020000000ull },
|
|
{ PHB5_XIVE_ESB , 1, 0x000600c320000000ull, 0x0000000020000000ull },
|
|
{ PHB5_XIVE_ESB , 2, 0x000600c340000000ull, 0x0000000020000000ull },
|
|
{ PHB5_XIVE_ESB , 3, 0x000600c360000000ull, 0x0000000020000000ull },
|
|
{ PHB5_XIVE_ESB , 4, 0x000600c380000000ull, 0x0000000020000000ull },
|
|
{ PHB5_XIVE_ESB , 5, 0x000600c3a0000000ull, 0x0000000020000000ull },
|
|
{ PHB5_REG_SPC , 0, 0x000600c3c0000000ull, 0x0000000000100000ull },
|
|
{ PHB5_REG_SPC , 1, 0x000600c3c0100000ull, 0x0000000000100000ull },
|
|
{ PHB5_REG_SPC , 2, 0x000600c3c0200000ull, 0x0000000000100000ull },
|
|
{ PHB5_REG_SPC , 3, 0x000600c3c0300000ull, 0x0000000000100000ull },
|
|
{ PHB5_REG_SPC , 4, 0x000600c3c0400000ull, 0x0000000000100000ull },
|
|
{ PHB5_REG_SPC , 5, 0x000600c3c0500000ull, 0x0000000000100000ull },
|
|
{ RESV , 0, 0x000600c3c0600000ull, 0x0000003c3fa00000ull },
|
|
|
|
/* 1 TB offset */
|
|
{ RESV , 1, 0x0006010000000000ull, 0x0000010000000000ull },
|
|
|
|
/* 2 TB offset */
|
|
{ PHB5_64BIT_MMIO, 3, 0x0006020000000000ull, 0x0000004000000000ull },
|
|
{ PHB5_64BIT_MMIO, 4, 0x0006024000000000ull, 0x0000004000000000ull },
|
|
{ PHB5_64BIT_MMIO, 5, 0x0006028000000000ull, 0x0000004000000000ull },
|
|
{ RESV , 2, 0x000602c000000000ull, 0x0000004000000000ull },
|
|
|
|
/* 3 TB offset */
|
|
{ LPC_BUS , 0, 0x0006030000000000ull, 0x0000000100000000ull },
|
|
{ FSP_MMIO , 0, 0x0006030100000000ull, 0x0000000100000000ull },
|
|
{ XIVE_IC , 0, 0x0006030200000000ull, 0x0000000002000000ull },
|
|
{ PSIHB_ESB , 0, 0x0006030202000000ull, 0x0000000000100000ull },
|
|
{ RESV , 3, 0x0006030202100000ull, 0x0000000000f00000ull },
|
|
{ PSIHB_REG , 0, 0x0006030203000000ull, 0x0000000000100000ull },
|
|
{ RESV , 4, 0x0006030203100000ull, 0x0000000000080000ull },
|
|
{ XIVE_TM , 0, 0x0006030203180000ull, 0x0000000000040000ull },
|
|
{ RESV , 5, 0x00060302031c0000ull, 0x0000000000010000ull },
|
|
{ NX_RNG , 0, 0x00060302031d0000ull, 0x0000000000010000ull },
|
|
{ RESV , 6, 0x00060302031e0000ull, 0x0000000004e20000ull },
|
|
{ XIVE_NVC , 0, 0x0006030208000000ull, 0x0000000008000000ull },
|
|
{ RESV , 7, 0x0006030210000000ull, 0x00000000ee000000ull },
|
|
{ VAS_HYP_WIN , 0, 0x00060302fe000000ull, 0x0000000002000000ull },
|
|
{ VAS_USER_WIN , 0, 0x0006030300000000ull, 0x0000000100000000ull },
|
|
|
|
/* TODO: MC, OCMB */
|
|
{ RESV , 8, 0x0006030400000000ull, 0x0000008400000000ull },
|
|
{ PAU_OCAPI_MMIO , 0, 0x0006038800000000ull, 0x0000000800000000ull },
|
|
{ PAU_OCAPI_MMIO , 1, 0x0006039000000000ull, 0x0000000800000000ull },
|
|
{ PAU_OCAPI_MMIO , 2, 0x0006039800000000ull, 0x0000000800000000ull },
|
|
{ PAU_OCAPI_MMIO , 3, 0x000603a000000000ull, 0x0000000800000000ull },
|
|
{ PAU_OCAPI_MMIO , 4, 0x000603a800000000ull, 0x0000000800000000ull },
|
|
{ PAU_OCAPI_MMIO , 5, 0x000603b000000000ull, 0x0000000800000000ull },
|
|
{ PAU_OCAPI_MMIO , 6, 0x000603b800000000ull, 0x0000000800000000ull },
|
|
{ PAU_OCAPI_MMIO , 7, 0x000603c000000000ull, 0x0000000800000000ull },
|
|
{ PAU_OCAPI_MMIO , 8, 0x000603c800000000ull, 0x0000000800000000ull },
|
|
{ PAU_OCAPI_MMIO , 9, 0x000603d000000000ull, 0x0000000800000000ull },
|
|
{ PAU_OCAPI_MMIO ,10, 0x000603d800000000ull, 0x0000000800000000ull },
|
|
{ PAU_OCAPI_MMIO ,11, 0x000603e000000000ull, 0x0000000800000000ull },
|
|
{ PAU_REGS , 0, 0x000603e800000000ull, 0x0000000001000000ull },
|
|
{ PAU_REGS , 1, 0x000603e801000000ull, 0x0000000001000000ull },
|
|
{ PAU_REGS , 2, 0x000603e802000000ull, 0x0000000001000000ull },
|
|
{ PAU_REGS , 3, 0x000603e803000000ull, 0x0000000001000000ull },
|
|
{ PAU_REGS , 4, 0x000603e804000000ull, 0x0000000001000000ull },
|
|
{ PAU_REGS , 5, 0x000603e805000000ull, 0x0000000001000000ull },
|
|
{ RESV , 9, 0x000603e806000000ull, 0x0000000000040000ull },
|
|
{ PAU_NTL , 0, 0x000603e806040000ull, 0x0000000000020000ull },
|
|
{ PAU_NTL , 1, 0x000603e806060000ull, 0x0000000000020000ull },
|
|
{ PAU_GENID , 0, 0x000603e806080000ull, 0x0000000000080000ull },
|
|
{ RESV ,10, 0x000603e806100000ull, 0x0000000000040000ull },
|
|
{ PAU_NTL , 2, 0x000603e806140000ull, 0x0000000000020000ull },
|
|
{ PAU_NTL , 3, 0x000603e806160000ull, 0x0000000000020000ull },
|
|
{ PAU_GENID , 1, 0x000603e806180000ull, 0x0000000000080000ull },
|
|
{ RESV ,11, 0x000603e806200000ull, 0x0000000000040000ull },
|
|
{ PAU_NTL , 4, 0x000603e806240000ull, 0x0000000000020000ull },
|
|
{ PAU_NTL , 5, 0x000603e806260000ull, 0x0000000000020000ull },
|
|
{ PAU_GENID , 2, 0x000603e806280000ull, 0x0000000000080000ull },
|
|
{ RESV ,12, 0x000603e806300000ull, 0x0000000000040000ull },
|
|
{ PAU_NTL , 6, 0x000603e806340000ull, 0x0000000000020000ull },
|
|
{ PAU_NTL , 7, 0x000603e806360000ull, 0x0000000000020000ull },
|
|
{ PAU_GENID , 3, 0x000603e806380000ull, 0x0000000000080000ull },
|
|
{ RESV ,13, 0x000603e806400000ull, 0x0000000000040000ull },
|
|
{ PAU_NTL , 8, 0x000603e806440000ull, 0x0000000000020000ull },
|
|
{ PAU_NTL , 9, 0x000603e806460000ull, 0x0000000000020000ull },
|
|
{ PAU_GENID , 4, 0x000603e806480000ull, 0x0000000000080000ull },
|
|
{ RESV ,14, 0x000603e806500000ull, 0x0000000000040000ull },
|
|
{ PAU_NTL ,10, 0x000603e806540000ull, 0x0000000000020000ull },
|
|
{ PAU_NTL ,11, 0x000603e806560000ull, 0x0000000000020000ull },
|
|
{ PAU_GENID , 5, 0x000603e806580000ull, 0x0000000000080000ull },
|
|
{ RESV ,15, 0x000603e806600000ull, 0x00000013F9A00000ull },
|
|
{ XSCOM , 0, 0x000603fc00000000ull, 0x0000000400000000ull },
|
|
|
|
/* 4 TB offset */
|
|
{ XIVE_NVPG , 0, 0x0006040000000000ull, 0x0000010000000000ull },
|
|
|
|
/* 5 - 7 TB offset */
|
|
/* for P10 the END and ESB regions are separate in the MMIO
|
|
* table */
|
|
{ XIVE_ESB , 0, 0x0006050000000000ull, 0x0000010000000000ull },
|
|
{ XIVE_END , 0, 0x0006060000000000ull, 0x0000020000000000ull },
|
|
|
|
/* 8 - 13 TB offset */
|
|
{ RESV ,16, 0x0006080000000000ull, 0x0000060000000000ull },
|
|
|
|
/* 14 TB offset */
|
|
{ RESV ,17, 0x00060e0000000000ull, 0x0000008000000000ull },
|
|
|
|
{ NULL_MAP, 0, 0, 0 },
|
|
};
|
|
|
|
static const struct phys_map_entry phys_map_table_nimbus[] = {
|
|
|
|
/* System memory upto 4TB minus GPU memory */
|
|
{ SYSTEM_MEM, 0, 0x0000000000000000ull, 0x0000034000000000ull },
|
|
/* GPU memory from 4TB - 128GB*GPU */
|
|
{ GPU_MEM_4T_DOWN, 5, 0x0000034000000000ull, 0x0000002000000000ull },
|
|
{ GPU_MEM_4T_DOWN, 4, 0x0000036000000000ull, 0x0000002000000000ull },
|
|
{ GPU_MEM_4T_DOWN, 3, 0x0000038000000000ull, 0x0000002000000000ull },
|
|
{ GPU_MEM_4T_DOWN, 2, 0x000003a000000000ull, 0x0000002000000000ull },
|
|
{ GPU_MEM_4T_DOWN, 1, 0x000003c000000000ull, 0x0000002000000000ull },
|
|
{ GPU_MEM_4T_DOWN, 0, 0x000003e000000000ull, 0x0000002000000000ull },
|
|
/* GPU memory from 4TB + 128GB*GPU. 4 GPUs only */
|
|
{ GPU_MEM_4T_UP, 0, 0x0000040000000000ull, 0x0000002000000000ull },
|
|
{ GPU_MEM_4T_UP, 1, 0x0000042000000000ull, 0x0000002000000000ull },
|
|
{ GPU_MEM_4T_UP, 2, 0x0000044000000000ull, 0x0000002000000000ull },
|
|
{ GPU_MEM_4T_UP, 3, 0x0000046000000000ull, 0x0000002000000000ull },
|
|
|
|
/*
|
|
* OpenCAPI LPC Memory
|
|
*
|
|
* With chip address extension enabled, we allocate 4TB ranges
|
|
* (in the second non-mirrored region) for each OpenCAPI link
|
|
* by varying the upper 2 bits of the group ID.
|
|
*
|
|
* We don't currently support >4TB ranges.
|
|
*/
|
|
{ OCAPI_MEM, 0, 0x0002000000000000ull, 0x0000040000000000ull },
|
|
{ OCAPI_MEM, 1, 0x0002800000000000ull, 0x0000040000000000ull },
|
|
{ OCAPI_MEM, 2, 0x0003000000000000ull, 0x0000040000000000ull },
|
|
{ OCAPI_MEM, 3, 0x0003800000000000ull, 0x0000040000000000ull },
|
|
|
|
/* 0 TB offset @ MMIO 0x0006000000000000ull */
|
|
{ PHB4_64BIT_MMIO, 0, 0x0006000000000000ull, 0x0000004000000000ull },
|
|
{ PHB4_64BIT_MMIO, 1, 0x0006004000000000ull, 0x0000004000000000ull },
|
|
{ PHB4_64BIT_MMIO, 2, 0x0006008000000000ull, 0x0000004000000000ull },
|
|
{ PHB4_32BIT_MMIO, 0, 0x000600c000000000ull, 0x0000000080000000ull },
|
|
{ PHB4_32BIT_MMIO, 1, 0x000600c080000000ull, 0x0000000080000000ull },
|
|
{ PHB4_32BIT_MMIO, 2, 0x000600c100000000ull, 0x0000000080000000ull },
|
|
{ PHB4_32BIT_MMIO, 3, 0x000600c180000000ull, 0x0000000080000000ull },
|
|
{ PHB4_32BIT_MMIO, 4, 0x000600c200000000ull, 0x0000000080000000ull },
|
|
{ PHB4_32BIT_MMIO, 5, 0x000600c280000000ull, 0x0000000080000000ull },
|
|
{ PHB4_XIVE_ESB , 0, 0x000600c300000000ull, 0x0000000020000000ull },
|
|
{ PHB4_XIVE_ESB , 1, 0x000600c320000000ull, 0x0000000020000000ull },
|
|
{ PHB4_XIVE_ESB , 2, 0x000600c340000000ull, 0x0000000020000000ull },
|
|
{ PHB4_XIVE_ESB , 3, 0x000600c360000000ull, 0x0000000020000000ull },
|
|
{ PHB4_XIVE_ESB , 4, 0x000600c380000000ull, 0x0000000020000000ull },
|
|
{ PHB4_XIVE_ESB , 5, 0x000600c3a0000000ull, 0x0000000020000000ull },
|
|
{ PHB4_REG_SPC , 0, 0x000600c3c0000000ull, 0x0000000000100000ull },
|
|
{ PHB4_REG_SPC , 1, 0x000600c3c0100000ull, 0x0000000000100000ull },
|
|
{ PHB4_REG_SPC , 2, 0x000600c3c0200000ull, 0x0000000000100000ull },
|
|
{ PHB4_REG_SPC , 3, 0x000600c3c0300000ull, 0x0000000000100000ull },
|
|
{ PHB4_REG_SPC , 4, 0x000600c3c0400000ull, 0x0000000000100000ull },
|
|
{ PHB4_REG_SPC , 5, 0x000600c3c0500000ull, 0x0000000000100000ull },
|
|
{ RESV , 0, 0x000600c3c0600000ull, 0x0000000c3fa00000ull },
|
|
{ NPU_OCAPI_MMIO , 0, 0x000600d000000000ull, 0x0000000800000000ull },
|
|
{ NPU_OCAPI_MMIO , 1, 0x000600d800000000ull, 0x0000000800000000ull },
|
|
{ NPU_OCAPI_MMIO , 2, 0x000600e000000000ull, 0x0000000800000000ull },
|
|
{ NPU_OCAPI_MMIO , 3, 0x000600e800000000ull, 0x0000000800000000ull },
|
|
{ NPU_OCAPI_MMIO , 4, 0x000600f000000000ull, 0x0000000800000000ull },
|
|
{ NPU_OCAPI_MMIO , 5, 0x000600f800000000ull, 0x0000000800000000ull },
|
|
|
|
/* 1 TB offset @ MMIO 0x0006000000000000ull */
|
|
{ XIVE_VC , 0, 0x0006010000000000ull, 0x0000008000000000ull },
|
|
{ XIVE_PC , 0, 0x0006018000000000ull, 0x0000001000000000ull },
|
|
{ VAS_USER_WIN , 0, 0x0006019000000000ull, 0x0000000100000000ull },
|
|
{ VAS_HYP_WIN , 0, 0x0006019100000000ull, 0x0000000002000000ull },
|
|
{ RESV , 1, 0x0006019102000000ull, 0x000000001e000000ull },
|
|
{ OCAB_XIVE_ESB , 0, 0x0006019120000000ull, 0x0000000020000000ull },
|
|
{ RESV , 3, 0x0006019140000000ull, 0x0000006ec0000000ull },
|
|
|
|
/* 2 TB offset @ MMIO 0x0006000000000000ull */
|
|
{ PHB4_64BIT_MMIO, 3, 0x0006020000000000ull, 0x0000004000000000ull },
|
|
{ PHB4_64BIT_MMIO, 4, 0x0006024000000000ull, 0x0000004000000000ull },
|
|
{ PHB4_64BIT_MMIO, 5, 0x0006028000000000ull, 0x0000004000000000ull },
|
|
{ RESV , 4, 0x000602c000000000ull, 0x0000004000000000ull },
|
|
|
|
/* 3 TB offset @ MMIO 0x0006000000000000ull */
|
|
{ LPC_BUS , 0, 0x0006030000000000ull, 0x0000000100000000ull },
|
|
{ FSP_MMIO , 0, 0x0006030100000000ull, 0x0000000100000000ull },
|
|
{ NPU_REGS , 0, 0x0006030200000000ull, 0x0000000001000000ull },
|
|
{ NPU_USR , 0, 0x0006030201000000ull, 0x0000000000200000ull },
|
|
{ NPU_PHY , 0, 0x0006030201200000ull, 0x0000000000200000ull },
|
|
{ NPU_PHY , 1, 0x0006030201400000ull, 0x0000000000200000ull },
|
|
{ NPU_NTL , 0, 0x0006030201600000ull, 0x0000000000020000ull },
|
|
{ NPU_NTL , 1, 0x0006030201620000ull, 0x0000000000020000ull },
|
|
{ NPU_NTL , 2, 0x0006030201640000ull, 0x0000000000020000ull },
|
|
{ NPU_NTL , 3, 0x0006030201660000ull, 0x0000000000020000ull },
|
|
{ NPU_NTL , 4, 0x0006030201680000ull, 0x0000000000020000ull },
|
|
{ NPU_NTL , 5, 0x00060302016a0000ull, 0x0000000000020000ull },
|
|
{ NPU_GENID , 0, 0x00060302016c0000ull, 0x0000000000020000ull },
|
|
{ NPU_GENID , 1, 0x00060302016e0000ull, 0x0000000000020000ull },
|
|
{ NPU_GENID , 2, 0x0006030201700000ull, 0x0000000000020000ull },
|
|
{ RESV , 5, 0x0006030201720000ull, 0x00000000018e0000ull },
|
|
{ PSIHB_REG , 0, 0x0006030203000000ull, 0x0000000000100000ull },
|
|
{ XIVE_IC , 0, 0x0006030203100000ull, 0x0000000000080000ull },
|
|
{ XIVE_TM , 0, 0x0006030203180000ull, 0x0000000000040000ull },
|
|
{ PSIHB_ESB , 0, 0x00060302031c0000ull, 0x0000000000010000ull },
|
|
{ NX_RNG , 0, 0x00060302031d0000ull, 0x0000000000010000ull },
|
|
{ RESV , 6, 0x00060302031e0000ull, 0x000000001ce20000ull },
|
|
{ CENTAUR_SCOM , 0, 0x0006030220000000ull, 0x0000000020000000ull },
|
|
{ RESV , 7, 0x0006030240000000ull, 0x000000f9c0000000ull },
|
|
{ XSCOM , 0, 0x000603fc00000000ull, 0x0000000400000000ull },
|
|
|
|
/* NULL entry at end */
|
|
{ NULL_MAP, 0, 0, 0 },
|
|
};
|
|
|
|
static const struct phys_map_info phys_map_nimbus = {
|
|
.chip_select_shift = 42,
|
|
.table = phys_map_table_nimbus,
|
|
};
|
|
|
|
static const struct phys_map_entry phys_map_table_axone[] = {
|
|
|
|
/* System memory up to 4TB minus GPU memory */
|
|
{ SYSTEM_MEM, 0, 0x0000000000000000ull, 0x0000034000000000ull },
|
|
/* GPU memory from 4TB - 128GB*GPU */
|
|
{ GPU_MEM_4T_DOWN, 5, 0x0000034000000000ull, 0x0000002000000000ull },
|
|
{ GPU_MEM_4T_DOWN, 4, 0x0000036000000000ull, 0x0000002000000000ull },
|
|
{ GPU_MEM_4T_DOWN, 3, 0x0000038000000000ull, 0x0000002000000000ull },
|
|
{ GPU_MEM_4T_DOWN, 2, 0x000003a000000000ull, 0x0000002000000000ull },
|
|
{ GPU_MEM_4T_DOWN, 1, 0x000003c000000000ull, 0x0000002000000000ull },
|
|
{ GPU_MEM_4T_DOWN, 0, 0x000003e000000000ull, 0x0000002000000000ull },
|
|
|
|
/* 0 TB offset @ MMIO 0x0006000000000000ull */
|
|
{ PHB4_64BIT_MMIO, 0, 0x0006000000000000ull, 0x0000004000000000ull },
|
|
{ PHB4_64BIT_MMIO, 1, 0x0006004000000000ull, 0x0000004000000000ull },
|
|
{ PHB4_64BIT_MMIO, 2, 0x0006008000000000ull, 0x0000004000000000ull },
|
|
{ PHB4_32BIT_MMIO, 0, 0x000600c000000000ull, 0x0000000080000000ull },
|
|
{ PHB4_32BIT_MMIO, 1, 0x000600c080000000ull, 0x0000000080000000ull },
|
|
{ PHB4_32BIT_MMIO, 2, 0x000600c100000000ull, 0x0000000080000000ull },
|
|
{ PHB4_32BIT_MMIO, 3, 0x000600c180000000ull, 0x0000000080000000ull },
|
|
{ PHB4_32BIT_MMIO, 4, 0x000600c200000000ull, 0x0000000080000000ull },
|
|
{ PHB4_32BIT_MMIO, 5, 0x000600c280000000ull, 0x0000000080000000ull },
|
|
{ PHB4_XIVE_ESB, 0, 0x000600c300000000ull, 0x0000000020000000ull },
|
|
{ PHB4_XIVE_ESB, 1, 0x000600c320000000ull, 0x0000000020000000ull },
|
|
{ PHB4_XIVE_ESB, 2, 0x000600c340000000ull, 0x0000000020000000ull },
|
|
{ PHB4_XIVE_ESB, 3, 0x000600c360000000ull, 0x0000000020000000ull },
|
|
{ PHB4_XIVE_ESB, 4, 0x000600c380000000ull, 0x0000000020000000ull },
|
|
{ PHB4_XIVE_ESB, 5, 0x000600c3a0000000ull, 0x0000000020000000ull },
|
|
{ PHB4_REG_SPC, 0, 0x000600c3c0000000ull, 0x0000000000100000ull },
|
|
{ PHB4_REG_SPC, 1, 0x000600c3c0100000ull, 0x0000000000100000ull },
|
|
{ PHB4_REG_SPC, 2, 0x000600c3c0200000ull, 0x0000000000100000ull },
|
|
{ PHB4_REG_SPC, 3, 0x000600c3c0300000ull, 0x0000000000100000ull },
|
|
{ PHB4_REG_SPC, 4, 0x000600c3c0400000ull, 0x0000000000100000ull },
|
|
{ PHB4_REG_SPC, 5, 0x000600c3c0500000ull, 0x0000000000100000ull },
|
|
{ RESV, 0, 0x000600c3c0600000ull, 0x0000000c3fa00000ull },
|
|
{ NPU_OCAPI_MMIO, 0, 0x000600d000000000ull, 0x0000000800000000ull },
|
|
{ NPU_OCAPI_MMIO, 1, 0x000600d800000000ull, 0x0000000800000000ull },
|
|
{ NPU_OCAPI_MMIO, 2, 0x000600e000000000ull, 0x0000000800000000ull },
|
|
{ NPU_OCAPI_MMIO, 3, 0x000600e800000000ull, 0x0000000800000000ull },
|
|
{ NPU_OCAPI_MMIO, 4, 0x000600f000000000ull, 0x0000000800000000ull },
|
|
{ NPU_OCAPI_MMIO, 5, 0x000600f800000000ull, 0x0000000800000000ull },
|
|
|
|
/* 1 TB offset @ MMIO 0x0006000000000000ull */
|
|
{ XIVE_VC, 0, 0x0006010000000000ull, 0x0000008000000000ull },
|
|
{ XIVE_PC, 0, 0x0006018000000000ull, 0x0000004000000000ull },
|
|
{ VAS_USER_WIN, 0, 0x000601c000000000ull, 0x0000000100000000ull },
|
|
{ VAS_HYP_WIN, 0, 0x000601c100000000ull, 0x0000000002000000ull },
|
|
{ RESV, 1, 0x000601c102000000ull, 0x0000003efe000000ull },
|
|
|
|
/* 2 TB offset @ MMIO 0x0006000000000000ull */
|
|
{ PHB4_64BIT_MMIO, 3, 0x0006020000000000ull, 0x0000004000000000ull },
|
|
{ PHB4_64BIT_MMIO, 4, 0x0006024000000000ull, 0x0000004000000000ull },
|
|
{ PHB4_64BIT_MMIO, 5, 0x0006028000000000ull, 0x0000004000000000ull },
|
|
{ RESV, 2, 0x000602c000000000ull, 0x0000004000000000ull },
|
|
|
|
/* 3 TB offset @ MMIO 0x0006000000000000ull */
|
|
{ LPC_BUS, 0, 0x0006030000000000ull, 0x0000000100000000ull },
|
|
{ FSP_MMIO, 0, 0x0006030100000000ull, 0x0000000100000000ull },
|
|
{ RESV, 3, 0x0006030200000000ull, 0x0000000003000000ull },
|
|
{ PSIHB_REG, 0, 0x0006030203000000ull, 0x0000000000100000ull },
|
|
{ XIVE_IC, 0, 0x0006030203100000ull, 0x0000000000080000ull },
|
|
{ XIVE_TM, 0, 0x0006030203180000ull, 0x0000000000040000ull },
|
|
{ PSIHB_ESB, 0, 0x00060302031c0000ull, 0x0000000000010000ull },
|
|
{ NX_RNG, 0, 0x00060302031d0000ull, 0x0000000000010000ull },
|
|
{ RESV, 4, 0x00060302031e0000ull, 0x00000001fce20000ull },
|
|
{ MC_OCMB_CFG, 0, 0x0006030400000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_CFG, 1, 0x0006030480000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_MMIO, 0, 0x0006030500000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_MMIO, 1, 0x0006030580000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_CFG, 2, 0x0006030600000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_CFG, 3, 0x0006030680000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_MMIO, 2, 0x0006030700000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_MMIO, 3, 0x0006030780000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_CFG, 4, 0x0006030800000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_CFG, 5, 0x0006030880000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_MMIO, 4, 0x0006030900000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_MMIO, 5, 0x0006030980000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_CFG, 6, 0x0006030a00000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_CFG, 7, 0x0006030a80000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_MMIO, 6, 0x0006030b00000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_MMIO, 7, 0x0006030b80000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_CFG, 8, 0x0006030c00000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_CFG, 9, 0x0006030c80000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_MMIO, 8, 0x0006030d00000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_MMIO, 9, 0x0006030d80000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_CFG, 10, 0x0006030e00000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_CFG, 11, 0x0006030e80000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_MMIO, 10, 0x0006030f00000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_MMIO, 11, 0x0006030f80000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_CFG, 12, 0x0006031000000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_CFG, 13, 0x0006031080000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_MMIO, 12, 0x0006031100000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_MMIO, 13, 0x0006031180000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_CFG, 14, 0x0006031200000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_CFG, 15, 0x0006031280000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_MMIO, 14, 0x0006031300000000ull, 0x0000000080000000ull },
|
|
{ MC_OCMB_MMIO, 15, 0x0006031380000000ull, 0x0000000080000000ull },
|
|
{ RESV, 5, 0x0006031400000000ull, 0x000000d800000000ull },
|
|
{ NPU_REGS, 0, 0x000603ec00000000ull, 0x0000000001000000ull },
|
|
{ NPU_REGS, 1, 0x000603ec01000000ull, 0x0000000001000000ull },
|
|
{ NPU_REGS, 2, 0x000603ec02000000ull, 0x0000000001000000ull },
|
|
{ NPU_NTL, 0, 0x000603ec03000000ull, 0x0000000000020000ull },
|
|
{ NPU_NTL, 1, 0x000603ec03020000ull, 0x0000000000020000ull },
|
|
{ NPU_NTL, 2, 0x000603ec03040000ull, 0x0000000000020000ull },
|
|
{ NPU_NTL, 3, 0x000603ec03060000ull, 0x0000000000020000ull },
|
|
{ NPU_GENID, 0, 0x000603ec03080000ull, 0x0000000000080000ull },
|
|
{ NPU_NTL, 4, 0x000603ec03100000ull, 0x0000000000020000ull },
|
|
{ NPU_NTL, 5, 0x000603ec03120000ull, 0x0000000000020000ull },
|
|
{ NPU_NTL, 6, 0x000603ec03140000ull, 0x0000000000020000ull },
|
|
{ NPU_NTL, 7, 0x000603ec03160000ull, 0x0000000000020000ull },
|
|
{ NPU_GENID, 1, 0x000603ec03180000ull, 0x0000000000080000ull },
|
|
{ NPU_NTL, 8, 0x000603ec03200000ull, 0x0000000000020000ull },
|
|
{ NPU_NTL, 9, 0x000603ec03220000ull, 0x0000000000020000ull },
|
|
{ NPU_NTL, 10, 0x000603ec03240000ull, 0x0000000000020000ull },
|
|
{ NPU_NTL, 11, 0x000603ec03260000ull, 0x0000000000020000ull },
|
|
{ NPU_GENID, 2, 0x000603ec03280000ull, 0x0000000000080000ull },
|
|
{ RESV, 6, 0x000603ec03300000ull, 0x0000000ffcd00000ull },
|
|
{ XSCOM, 0, 0x000603fc00000000ull, 0x0000000400000000ull },
|
|
|
|
/* NULL entry at end */
|
|
{ NULL_MAP, 0, 0, 0 },
|
|
};
|
|
|
|
static const struct phys_map_info phys_map_axone = {
|
|
.chip_select_shift = 42,
|
|
.table = phys_map_table_axone,
|
|
};
|
|
|
|
static const struct phys_map_info phys_map_p10 = {
|
|
.chip_select_shift = 44,
|
|
.table = phys_map_table_p10,
|
|
};
|
|
|
|
static inline bool phys_map_entry_null(const struct phys_map_entry *e)
|
|
{
|
|
if (e->type == NULL_MAP)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
|
|
/* This crashes skiboot on error as any bad calls here are almost
|
|
* certainly a developer error
|
|
*/
|
|
void __phys_map_get(uint64_t topology_idx, uint64_t gcid, enum phys_map_type type,
|
|
int index, uint64_t *addr, uint64_t *size) {
|
|
const struct phys_map_entry *e;
|
|
uint64_t a;
|
|
|
|
if (!phys_map)
|
|
goto error;
|
|
|
|
/* Find entry in table */
|
|
for (e = phys_map->table; ; e++) {
|
|
|
|
/* End of table */
|
|
if (phys_map_entry_null(e))
|
|
goto error;
|
|
|
|
/* Is this our entry? */
|
|
if (e->type != type)
|
|
continue;
|
|
if (e->index != index)
|
|
continue;
|
|
|
|
/* Found entry! */
|
|
break;
|
|
}
|
|
a = e->addr;
|
|
a += topology_idx << (phys_map->chip_select_shift);
|
|
|
|
if (addr)
|
|
*addr = a;
|
|
if (size)
|
|
*size = e->size;
|
|
|
|
prlog(PR_TRACE, "Assigning BAR [%"PRIx64"] type:%02i index:%x "
|
|
"0x%016"PRIx64" for 0x%016"PRIx64"\n",
|
|
gcid, type, index, a, e->size);
|
|
|
|
return;
|
|
|
|
error:
|
|
/* Something has gone really wrong */
|
|
prlog(PR_EMERG, "ERROR: Failed to lookup BAR type:%i index:%i\n",
|
|
type, index);
|
|
assert(0);
|
|
}
|
|
|
|
void phys_map_get(uint64_t gcid, enum phys_map_type type,
|
|
int index, uint64_t *addr, uint64_t *size)
|
|
{
|
|
struct proc_chip *chip;
|
|
uint64_t topology_idx = gcid;
|
|
|
|
if (proc_gen >= proc_gen_p10) {
|
|
chip = get_chip(gcid);
|
|
topology_idx = chip->primary_topology;
|
|
}
|
|
|
|
return __phys_map_get(topology_idx, gcid, type, index, addr, size);
|
|
}
|
|
|
|
void phys_map_init(unsigned long pvr)
|
|
{
|
|
const char *name = "unused";
|
|
|
|
phys_map = NULL;
|
|
|
|
if (proc_gen == proc_gen_p9) {
|
|
switch(PVR_TYPE(pvr)) {
|
|
case PVR_TYPE_P9P:
|
|
name = "axone";
|
|
phys_map = &phys_map_axone;
|
|
break;
|
|
default:
|
|
name = "nimbus";
|
|
phys_map = &phys_map_nimbus;
|
|
}
|
|
} else if (proc_gen == proc_gen_p10) {
|
|
name = "p10";
|
|
phys_map = &phys_map_p10;
|
|
} else if (proc_gen == proc_gen_p11) {
|
|
name = "p11";
|
|
phys_map = &phys_map_p10;
|
|
}
|
|
|
|
prlog(PR_DEBUG, "Assigning physical memory map table for %s\n", name);
|
|
|
|
}
|