octeon_machdep.c (212842) | octeon_machdep.c (215990) |
---|---|
1/*- 2 * Copyright (c) 2006 Wojciech A. Koszek <wkoszek@FreeBSD.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * | 1/*- 2 * Copyright (c) 2006 Wojciech A. Koszek <wkoszek@FreeBSD.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * |
26 * $FreeBSD: head/sys/mips/cavium/octeon_machdep.c 212842 2010-09-19 09:18:07Z jmallett $ | 26 * $FreeBSD: head/sys/mips/cavium/octeon_machdep.c 215990 2010-11-28 08:18:16Z jmallett $ |
27 */ 28#include <sys/cdefs.h> | 27 */ 28#include <sys/cdefs.h> |
29__FBSDID("$FreeBSD: head/sys/mips/cavium/octeon_machdep.c 212842 2010-09-19 09:18:07Z jmallett $"); | 29__FBSDID("$FreeBSD: head/sys/mips/cavium/octeon_machdep.c 215990 2010-11-28 08:18:16Z jmallett $"); |
30 31#include <sys/param.h> 32#include <sys/conf.h> 33#include <sys/kernel.h> 34#include <sys/systm.h> 35#include <sys/imgact.h> 36#include <sys/bio.h> 37#include <sys/buf.h> --- 363 unchanged lines hidden (view full) --- 401} 402 403static unsigned 404octeon_get_timecount(struct timecounter *tc) 405{ 406 return ((unsigned)octeon_get_ticks()); 407} 408 | 30 31#include <sys/param.h> 32#include <sys/conf.h> 33#include <sys/kernel.h> 34#include <sys/systm.h> 35#include <sys/imgact.h> 36#include <sys/bio.h> 37#include <sys/buf.h> --- 363 unchanged lines hidden (view full) --- 401} 402 403static unsigned 404octeon_get_timecount(struct timecounter *tc) 405{ 406 return ((unsigned)octeon_get_ticks()); 407} 408 |
409/** 410 * version of printf that works better in exception context. 411 * 412 * @param format 413 * 414 * XXX If this function weren't in cvmx-interrupt.c, we'd use the SDK version. 415 */ 416void cvmx_safe_printf(const char *format, ...) 417{ 418 char buffer[256]; 419 char *ptr = buffer; 420 int count; 421 va_list args; 422 423 va_start(args, format); 424#ifndef __U_BOOT__ 425 count = vsnprintf(buffer, sizeof(buffer), format, args); 426#else 427 count = vsprintf(buffer, format, args); 428#endif 429 va_end(args); 430 431 while (count-- > 0) 432 { 433 cvmx_uart_lsr_t lsrval; 434 435 /* Spin until there is room */ 436 do 437 { 438 lsrval.u64 = cvmx_read_csr(CVMX_MIO_UARTX_LSR(0)); 439#if !defined(CONFIG_OCTEON_SIM_SPEED) 440 if (lsrval.s.temt == 0) 441 cvmx_wait(10000); /* Just to reduce the load on the system */ 442#endif 443 } 444 while (lsrval.s.temt == 0); 445 446 if (*ptr == '\n') 447 cvmx_write_csr(CVMX_MIO_UARTX_THR(0), '\r'); 448 cvmx_write_csr(CVMX_MIO_UARTX_THR(0), *ptr++); 449 } 450} 451 |
|
409/* impSTART: This stuff should move back into the Cavium SDK */ 410/* 411 **************************************************************************************** 412 * 413 * APP/BOOT DESCRIPTOR STUFF 414 * 415 **************************************************************************************** 416 */ --- 68 unchanged lines hidden (view full) --- 485 default: 486 return 0; 487 } 488} 489 490static void 491octeon_process_app_desc_ver_6(void) 492{ | 452/* impSTART: This stuff should move back into the Cavium SDK */ 453/* 454 **************************************************************************************** 455 * 456 * APP/BOOT DESCRIPTOR STUFF 457 * 458 **************************************************************************************** 459 */ --- 68 unchanged lines hidden (view full) --- 528 default: 529 return 0; 530 } 531} 532 533static void 534octeon_process_app_desc_ver_6(void) 535{ |
493 void *phy_mem_desc_ptr; 494 | |
495 /* XXX Why is 0x00000000ffffffffULL a bad value? */ 496 if (app_desc_ptr->cvmx_desc_vaddr == 0 || 497 app_desc_ptr->cvmx_desc_vaddr == 0xfffffffful) 498 panic("Bad octeon_bootinfo %p", octeon_bootinfo); 499 500 octeon_bootinfo = 501 (cvmx_bootinfo_t *)(intptr_t)app_desc_ptr->cvmx_desc_vaddr; 502 octeon_bootinfo = 503 (cvmx_bootinfo_t *) ((intptr_t)octeon_bootinfo | MIPS_KSEG0_START); 504 if (octeon_bootinfo->major_version != 1) 505 panic("Incompatible CVMX descriptor from bootloader: %d.%d %p", 506 (int) octeon_bootinfo->major_version, 507 (int) octeon_bootinfo->minor_version, octeon_bootinfo); 508 | 536 /* XXX Why is 0x00000000ffffffffULL a bad value? */ 537 if (app_desc_ptr->cvmx_desc_vaddr == 0 || 538 app_desc_ptr->cvmx_desc_vaddr == 0xfffffffful) 539 panic("Bad octeon_bootinfo %p", octeon_bootinfo); 540 541 octeon_bootinfo = 542 (cvmx_bootinfo_t *)(intptr_t)app_desc_ptr->cvmx_desc_vaddr; 543 octeon_bootinfo = 544 (cvmx_bootinfo_t *) ((intptr_t)octeon_bootinfo | MIPS_KSEG0_START); 545 if (octeon_bootinfo->major_version != 1) 546 panic("Incompatible CVMX descriptor from bootloader: %d.%d %p", 547 (int) octeon_bootinfo->major_version, 548 (int) octeon_bootinfo->minor_version, octeon_bootinfo); 549 |
509 phy_mem_desc_ptr = 510 (void *)MIPS_PHYS_TO_KSEG0(octeon_bootinfo->phy_mem_desc_addr); 511 cvmx_sysinfo_minimal_initialize(phy_mem_desc_ptr, | 550 cvmx_sysinfo_minimal_initialize(octeon_bootinfo->phy_mem_desc_addr, |
512 octeon_bootinfo->board_type, 513 octeon_bootinfo->board_rev_major, 514 octeon_bootinfo->board_rev_minor, 515 octeon_bootinfo->eclock_hz); 516} 517 518static void 519octeon_boot_params_init(register_t ptr) --- 4 unchanged lines hidden (view full) --- 524 525 app_desc_ptr = (octeon_boot_descriptor_t *)(intptr_t)ptr; 526 if (app_desc_ptr->desc_version < 6) 527 panic("Your boot code is too old to be supported."); 528 octeon_process_app_desc_ver_6(); 529 530 KASSERT(octeon_bootinfo != NULL, ("octeon_bootinfo should be set")); 531 | 551 octeon_bootinfo->board_type, 552 octeon_bootinfo->board_rev_major, 553 octeon_bootinfo->board_rev_minor, 554 octeon_bootinfo->eclock_hz); 555} 556 557static void 558octeon_boot_params_init(register_t ptr) --- 4 unchanged lines hidden (view full) --- 563 564 app_desc_ptr = (octeon_boot_descriptor_t *)(intptr_t)ptr; 565 if (app_desc_ptr->desc_version < 6) 566 panic("Your boot code is too old to be supported."); 567 octeon_process_app_desc_ver_6(); 568 569 KASSERT(octeon_bootinfo != NULL, ("octeon_bootinfo should be set")); 570 |
532 if (cvmx_sysinfo_get()->phy_mem_desc_ptr == NULL) | 571 if (cvmx_sysinfo_get()->phy_mem_desc_addr == (uint64_t)0) |
533 panic("Your boot loader did not supply a memory descriptor."); | 572 panic("Your boot loader did not supply a memory descriptor."); |
534 cvmx_bootmem_init(cvmx_sysinfo_get()->phy_mem_desc_ptr); | 573 cvmx_bootmem_init(cvmx_sysinfo_get()->phy_mem_desc_addr); |
535 536 printf("Boot Descriptor Ver: %u -> %u/%u", 537 app_desc_ptr->desc_version, octeon_bootinfo->major_version, 538 octeon_bootinfo->minor_version); 539 printf(" CPU clock: %uMHz Core Mask: %#x\n", 540 cvmx_sysinfo_get()->cpu_clock_hz / 1000000, 541 cvmx_sysinfo_get()->core_mask); 542 printf(" Board Type: %u Revision: %u/%u\n", --- 24 unchanged lines hidden --- | 574 575 printf("Boot Descriptor Ver: %u -> %u/%u", 576 app_desc_ptr->desc_version, octeon_bootinfo->major_version, 577 octeon_bootinfo->minor_version); 578 printf(" CPU clock: %uMHz Core Mask: %#x\n", 579 cvmx_sysinfo_get()->cpu_clock_hz / 1000000, 580 cvmx_sysinfo_get()->core_mask); 581 printf(" Board Type: %u Revision: %u/%u\n", --- 24 unchanged lines hidden --- |