03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER START
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * The contents of this file are subject to the terms of the
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Common Development and Distribution License (the "License").
03831d35f7499c87d51205817c93e9a8d42c4baestevel * You may not use this file except in compliance with the License.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
03831d35f7499c87d51205817c93e9a8d42c4baestevel * or http://www.opensolaris.org/os/licensing.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * See the License for the specific language governing permissions
03831d35f7499c87d51205817c93e9a8d42c4baestevel * and limitations under the License.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * When distributing Covered Code, include this CDDL HEADER in each
03831d35f7499c87d51205817c93e9a8d42c4baestevel * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * If applicable, add the following below this CDDL HEADER, with the
03831d35f7499c87d51205817c93e9a8d42c4baestevel * fields enclosed by brackets "[]" replaced with your own identifying
03831d35f7499c87d51205817c93e9a8d42c4baestevel * information: Portions Copyright [yyyy] [name of copyright owner]
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER END
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Use is subject to license terms.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifndef _SBDP_MEM_H
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define _SBDP_MEM_H
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#pragma ident "%Z%%M% %I% %E% SMI"
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifdef __cplusplus
03831d35f7499c87d51205817c93e9a8d42c4baestevelextern "C" {
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/sbd.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/sbdp_priv.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SBDP_MAX_MCS_PER_NODE 4
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SBDP_MAX_MEM_NODES_PER_BOARD 4
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define SBDP_MAX_CORES_PER_CMP 2
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baesteveltypedef uint64_t mc_dc_regs_t[SBDP_MAX_MCS_PER_NODE];
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baesteveltypedef struct {
03831d35f7499c87d51205817c93e9a8d42c4baestevel int board;
03831d35f7499c87d51205817c93e9a8d42c4baestevel pnode_t *nodes;
03831d35f7499c87d51205817c93e9a8d42c4baestevel int nmem;
03831d35f7499c87d51205817c93e9a8d42c4baestevel} mem_op_t;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baesteveltypedef struct {
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t regspec_addr_hi;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t regspec_addr_lo;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t regspec_size_hi;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t regspec_size_lo;
03831d35f7499c87d51205817c93e9a8d42c4baestevel} mc_regspace;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baesteveltypedef struct {
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint64_t mc_decode[SBDP_MAX_MCS_PER_NODE];
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint64_t mc_memctl;
03831d35f7499c87d51205817c93e9a8d42c4baestevel} mc_regs_t;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Memory controller register offsets
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MEM_TIMING1_CTL 0x400000
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MEM_TIMING2_CTL 0x400008
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MEM_TIMING3_CTL 0x400038
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MEM_TIMING4_CTL 0x400040
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MEM_DECODE0_ADR 0x400028
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MEM_DECODE1_ADR 0x400010
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MEM_DECODE2_ADR 0x400018
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MEM_DECODE3_ADR 0x400020
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MEM_CONTROL_ADR 0x400030
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_EMU_ACTIVITY_STATUS 0x400050
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Bit fields for the decode registers
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_DECODE_VALID 0x8000000000000000ull
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_DECODE_UK 0x001ffe0000000000ull
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_DECODE_UM 0x000001fffff00000ull
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_DECODE_LK 0x00000000000fc000ull
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_DECODE_LM 0x0000000000003f00ull
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_INVAL_UM 0x0000000ffff00000ull
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_SLICE_INFO 0x000001fc00000000ull
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_ALIGNMENT 0x800000000ULL
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Memory Macros
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_MEMDEC0(mc_addr) \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (mc_addr) | SG_MEM_DECODE0_ADR
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_MEMDEC1(mc_addr) \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (mc_addr) | SG_MEM_DECODE1_ADR
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_MEMDEC2(mc_addr) \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (mc_addr) | SG_MEM_DECODE2_ADR
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_MEMDEC3(mc_addr) \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (mc_addr) | SG_MEM_DECODE3_ADR
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_ACTIVITY_STATUS(mc_addr) \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (mc_addr) | SG_EMU_ACTIVITY_STATUS
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Mappings to the array for the decode registers only
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MC_DECODE_I 0
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MC_DECODE_II 1
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MC_DECODE_III 2
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MC_DECODE_IV 3
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Memory Macros
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_REG_2_OFFSET(num) \
03831d35f7499c87d51205817c93e9a8d42c4baestevel ((num) == SG_MC_DECODE_I ? (uint64_t)SG_MEM_DECODE0_ADR : \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (num) == SG_MC_DECODE_II ? (uint64_t)SG_MEM_DECODE1_ADR : \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (num) == SG_MC_DECODE_III ? (uint64_t)SG_MEM_DECODE2_ADR : \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (num) == SG_MC_DECODE_IV ? (uint64_t)SG_MEM_DECODE3_ADR : \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (uint64_t)-1)
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_VALID_SHIFT 63
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_UK_SHIFT 41
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_UM_SHIFT 20
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_LK_SHIFT 14
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_LM_SHIFT 8
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define PHYS2UM_SHIFT 26
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_UK(memdec) (((memdec) >> MC_UK_SHIFT) & 0xfffu)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_LK(memdec) (((memdec) >> MC_LK_SHIFT)& 0x3fu)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_INTLV(memdec) ((~(MC_LK(memdec)) & 0xfu) + 1)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_UK2SPAN(memdec) ((MC_UK(memdec) + 1) << PHYS2UM_SHIFT)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_SPANMB(memdec) (MC_UK2SPAN(memdec) >> 20)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_UM(memdec) (((memdec) >> MC_UM_SHIFT) & 0x1fffffu)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_LM(memdec) (((memdec) >> MC_LM_SHIFT) & 0x3f)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_BASE(memdec) (MC_UM(memdec) & ~(MC_UK(memdec)))
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_BASE2UM(base) (((base) & 0x1fffffu) << MC_UM_SHIFT)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SAF_MASK 0x000007ffff800000ull
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MC_OFFSET_MASK 0xffu
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Memory Slice information
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_SLICE_16G_SIZE 0x400000000ULL
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_SLICE_32G_SIZE 0x800000000ULL
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_SLICE_64G_SIZE 0x1000000000ULL
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Copy-rename info
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SBDP_RENAME_MAXOP (PAGESIZE / sizeof (sbdp_rename_script_t))
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Must be same size as sbdp_rename_script_t.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baesteveltypedef struct {
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint64_t addr;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t bd_id;
03831d35f7499c87d51205817c93e9a8d42c4baestevel pnode_t node;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t asi;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t _filler;
03831d35f7499c87d51205817c93e9a8d42c4baestevel} sbdp_mc_idle_script_t;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baesteveltypedef struct {
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint64_t masr_addr;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint64_t masr;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t asi;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t _filler;
03831d35f7499c87d51205817c93e9a8d42c4baestevel} sbdp_rename_script_t;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baesteveltypedef struct {
03831d35f7499c87d51205817c93e9a8d42c4baestevel sbdp_bd_t *s_bdp; /* pointer to src bd info */
03831d35f7499c87d51205817c93e9a8d42c4baestevel sbdp_bd_t *t_bdp; /* pointer to tgt bd info */
03831d35f7499c87d51205817c93e9a8d42c4baestevel sbdp_rename_script_t *script; /* points to the actual script */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint64_t ret;
03831d35f7499c87d51205817c93e9a8d42c4baestevel sbdp_mc_idle_script_t *busy_mc;
03831d35f7499c87d51205817c93e9a8d42c4baestevel} sbdp_cr_handle_t;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelextern uint64_t lddsafaddr(uint64_t physaddr);
03831d35f7499c87d51205817c93e9a8d42c4baestevelextern uint64_t lddmcdecode(uint64_t physaddr);
03831d35f7499c87d51205817c93e9a8d42c4baestevelextern void stdmcdecode(uint64_t, uint64_t);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelint sbdp_is_mem(pnode_t node, void *arg);
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifdef DEBUG
03831d35f7499c87d51205817c93e9a8d42c4baestevelint sbdp_passthru_readmem(sbdp_handle_t *hp, void *);
03831d35f7499c87d51205817c93e9a8d42c4baestevelint sbdp_passthru_prep_script(sbdp_handle_t *hp, void *);
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifdef __cplusplus
03831d35f7499c87d51205817c93e9a8d42c4baestevel}
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif /* _SBDP_MEM_H */