niagara.c revision 70f54ead78cbbb40e97bd3ff9f175c5c71783c3c
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * CDDL HEADER START
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * The contents of this file are subject to the terms of the
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * Common Development and Distribution License, Version 1.0 only
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * (the "License"). You may not use this file except in compliance
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * with the License.
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * See the License for the specific language governing permissions
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * and limitations under the License.
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * When distributing Covered Code, include this CDDL HEADER in each
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * If applicable, add the following below this CDDL HEADER, with the
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * fields enclosed by brackets "[]" replaced with your own identifying
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * information: Portions Copyright [yyyy] [name of copyright owner]
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * CDDL HEADER END
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * Use is subject to license terms.
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami#pragma ident "%Z%%M% %I% %E% SMI"
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * Maximum number of contexts
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahramistatic uint64_t cpu_ver; /* Niagara CPU version reg */
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami/* Niagara CPU version register */
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahramiextern uint64_t ni_getver(); /* HV code to get %hver */
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahramiextern uint64_t niagara_getver(uint64_t ni_getver_ra, uint64_t *cpu_version);
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami#endif /* NIAGARA_ERRATUM_39 */
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami extern int disable_delay_tlb_flush, delay_tlb_flush;
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami extern int get_cpu_pagesizes(void);
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * Get CPU version and enable Niagara erratum 39 workaround only
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * on Niagara 1.x part. This workaround can also be enabled via
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami if (niagara_getver(va_to_pa((void *)ni_getver), &cpu_ver) == H_EOK &&
8276d7915abc7c44934b5701e6ae35ec26eba740Jonathan Adams ((cpu_ver >> VER_MASK_MAJOR_SHIFT) & VER_MASK_MAJOR_MASK) <= 1)
8276d7915abc7c44934b5701e6ae35ec26eba740Jonathan Adams at_flags = EF_SPARC_SUN_US3 | EF_SPARC_32PLUS | EF_SPARC_SUN_US1;
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * Use the maximum number of contexts available for Spitfire unless
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * it has been tuned for debugging.
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * We are checking against 0 here since this value can be patched
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * while booting. It can not be patched via /etc/system since it
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * will be patched too late and thus cause the system to panic.
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * Initalize supported page sizes information before the PD.
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * If no information is available, then initialize the
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * mmu_exported_pagesize_mask to a reasonable value for that processor.
8276d7915abc7c44934b5701e6ae35ec26eba740Jonathan Adams mmu_exported_pagesize_mask = get_cpu_pagesizes();
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami mmu_exported_pagesize_mask = (1 << TTE8K) | (1 << TTE64K) |
isa_list =
if (!disable_delay_tlb_flush)
if (ecache_setsize == 0)
if (ecache_alignsize == 0)
i = 0; a = vac_size;
vac_shift = i;
vac = 0;
static int niagara_cpucnt;
extern int niagara_kstat_init(void);
if (niagara_cpucnt++ == 0) {
(void) niagara_kstat_init();
extern int niagara_kstat_fini(void);
if (--niagara_cpucnt == 0) {
(void) niagara_kstat_fini();
doflush(0);
char *badaddr;
int instr;
case SIMU_RETRY:
case SIMU_SUCCESS:
case SIMU_FAULT:
case SIMU_DZERO:
case SIMU_UNALIGN:
case SIMU_ILLEGAL: