Deleted Added
full compact
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 ---