Lines Matching full:oct
48 static void lio_get_uboot_version(struct octeon_device *oct);
51 static uint64_t cvmx_bootmem_phy_named_block_find(struct octeon_device *oct,
54 static int lio_console_read(struct octeon_device *oct,
152 * @param oct Pointer to current octeon device
161 __cvmx_bootmem_desc_get(struct octeon_device *oct, uint64_t base, in __cvmx_bootmem_desc_get() argument
168 return (lio_read_device_mem32(oct, base)); in __cvmx_bootmem_desc_get()
170 return (lio_read_device_mem64(oct, base)); in __cvmx_bootmem_desc_get()
181 * @param oct Pointer to current octeon device
188 lio_bootmem_named_get_name(struct octeon_device *oct, uint64_t addr, char *str, in lio_bootmem_named_get_name() argument
193 lio_pci_read_core_mem(oct, addr, (uint8_t *) str, len); in lio_bootmem_named_get_name()
202 * @param oct Pointer to current octeon device
211 __cvmx_bootmem_check_version(struct octeon_device *oct, uint32_t exact_match) in __cvmx_bootmem_check_version() argument
216 if (!oct->bootmem_desc_addr) in __cvmx_bootmem_check_version()
217 oct->bootmem_desc_addr = in __cvmx_bootmem_check_version()
218 lio_read_device_mem64(oct, in __cvmx_bootmem_check_version()
221 major_version = (uint32_t) __cvmx_bootmem_desc_get(oct, in __cvmx_bootmem_check_version()
222 oct->bootmem_desc_addr, in __cvmx_bootmem_check_version()
225 minor_version = (uint32_t) __cvmx_bootmem_desc_get(oct, in __cvmx_bootmem_check_version()
226 oct->bootmem_desc_addr, in __cvmx_bootmem_check_version()
230 lio_dev_dbg(oct, "%s: major_version=%d\n", __func__, major_version); in __cvmx_bootmem_check_version()
233 lio_dev_err(oct, "bootmem ver mismatch %d.%d addr:0x%llx\n", in __cvmx_bootmem_check_version()
235 CAST_ULL(oct->bootmem_desc_addr)); in __cvmx_bootmem_check_version()
243 __cvmx_bootmem_find_named_block_flags(struct octeon_device *oct, in __cvmx_bootmem_find_named_block_flags() argument
247 &oct->bootmem_named_block_desc; in __cvmx_bootmem_find_named_block_flags()
250 named_addr = cvmx_bootmem_phy_named_block_find(oct, name, in __cvmx_bootmem_find_named_block_flags()
253 desc->base_addr = __cvmx_bootmem_desc_get(oct, named_addr, in __cvmx_bootmem_find_named_block_flags()
259 desc->size = __cvmx_bootmem_desc_get(oct, named_addr, in __cvmx_bootmem_find_named_block_flags()
267 return (&oct->bootmem_named_block_desc); in __cvmx_bootmem_find_named_block_flags()
274 cvmx_bootmem_phy_named_block_find(struct octeon_device *oct, const char *name, in cvmx_bootmem_phy_named_block_find() argument
279 if (!__cvmx_bootmem_check_version(oct, 3)) { in cvmx_bootmem_phy_named_block_find()
283 __cvmx_bootmem_desc_get(oct, oct->bootmem_desc_addr, in cvmx_bootmem_phy_named_block_find()
289 (uint32_t) __cvmx_bootmem_desc_get(oct, in cvmx_bootmem_phy_named_block_find()
290 oct->bootmem_desc_addr, in cvmx_bootmem_phy_named_block_find()
297 (uint32_t) __cvmx_bootmem_desc_get(oct, in cvmx_bootmem_phy_named_block_find()
298 oct->bootmem_desc_addr, in cvmx_bootmem_phy_named_block_find()
308 __cvmx_bootmem_desc_get(oct, named_addr, in cvmx_bootmem_phy_named_block_find()
321 lio_bootmem_named_get_name(oct, named_addr, in cvmx_bootmem_phy_named_block_find()
348 * @param oct Pointer to current octeon device
356 lio_named_block_find(struct octeon_device *oct, const char *name, in lio_named_block_find() argument
362 named_block = __cvmx_bootmem_find_named_block_flags(oct, name, 0); in lio_named_block_find()
389 lio_console_send_cmd(struct octeon_device *oct, char *cmd_str, in lio_console_send_cmd() argument
394 lio_dev_dbg(oct, "sending \"%s\" to bootloader\n", cmd_str); in lio_console_send_cmd()
397 lio_dev_err(oct, "Command string too long, max length is: %d\n", in lio_console_send_cmd()
402 if (lio_wait_for_bootloader(oct, wait_hundredths)) { in lio_console_send_cmd()
403 lio_dev_err(oct, "Bootloader not ready for command.\n"); in lio_console_send_cmd()
409 lio_pci_write_core_mem(oct, LIO_BOOTLOADER_PCI_READ_BUFFER_DATA_ADDR, in lio_console_send_cmd()
411 lio_write_device_mem32(oct, LIO_BOOTLOADER_PCI_READ_BUFFER_LEN_ADDR, in lio_console_send_cmd()
413 lio_write_device_mem32(oct, LIO_BOOTLOADER_PCI_READ_BUFFER_OWNER_ADDR, in lio_console_send_cmd()
420 if (lio_wait_for_bootloader(oct, 200)) { in lio_console_send_cmd()
422 lio_dev_err(oct, "Bootloader did not accept command.\n"); in lio_console_send_cmd()
431 lio_wait_for_bootloader(struct octeon_device *oct, in lio_wait_for_bootloader() argument
434 lio_dev_dbg(oct, "waiting %d0 ms for bootloader\n", in lio_wait_for_bootloader()
437 if (lio_mem_access_ok(oct)) in lio_wait_for_bootloader()
441 lio_read_device_mem32(oct, in lio_wait_for_bootloader()
454 lio_console_handle_result(struct octeon_device *oct, size_t console_num) in lio_console_handle_result() argument
458 console = &oct->console[console_num]; in lio_console_handle_result()
466 lio_output_console_line(struct octeon_device *oct, struct lio_console *console, in lio_output_console_line() argument
489 (*console->print)(oct, in lio_output_console_line()
495 (*console->print)(oct, in lio_output_console_line()
518 struct octeon_device *oct = in lio_check_console() local
524 console = &oct->console[console_num]; in lio_check_console()
537 bytes_read = lio_console_read(oct, console_num, console_buffer, in lio_check_console()
542 lio_console_handle_result(oct, console_num); in lio_check_console()
545 lio_output_console_line(oct, console, in lio_check_console()
552 lio_dev_err(oct, "Error reading console %u, ret=%d\n", in lio_check_console()
567 lio_output_console_line(oct, console, console_num, in lio_check_console()
571 callout_schedule(&oct->console_timer[console_num].timer, in lio_check_console()
577 lio_init_consoles(struct octeon_device *oct) in lio_init_consoles() argument
582 ret = lio_mem_access_ok(oct); in lio_init_consoles()
584 lio_dev_err(oct, "Memory access not okay'\n"); in lio_init_consoles()
587 ret = lio_named_block_find(oct, LIO_PCI_CONSOLE_BLOCK_NAME, &addr, in lio_init_consoles()
590 lio_dev_err(oct, "Could not find console '%s'\n", in lio_init_consoles()
599 oct->console_nb_info.bar1_index = 15; in lio_init_consoles()
600 oct->fn_list.bar1_idx_setup(oct, addr, oct->console_nb_info.bar1_index, in lio_init_consoles()
602 oct->console_nb_info.dram_region_base = addr & 0xFFFFFFFFFFC00000ULL; in lio_init_consoles()
608 oct->num_consoles = lio_read_device_mem32(oct, in lio_init_consoles()
611 oct->console_desc_addr = addr; in lio_init_consoles()
613 lio_dev_dbg(oct, "Initialized consoles. %d available\n", in lio_init_consoles()
614 oct->num_consoles); in lio_init_consoles()
620 lio_add_console(struct octeon_device *oct, uint32_t console_num, char *dbg_enb) in lio_add_console() argument
627 if (console_num >= oct->num_consoles) { in lio_add_console()
628 lio_dev_err(oct, "trying to read from console number %d when only 0 to %d exist\n", in lio_add_console()
629 console_num, oct->num_consoles); in lio_add_console()
631 console = &oct->console[console_num]; in lio_add_console()
635 coreaddr = oct->console_desc_addr + console_num * 8 + in lio_add_console()
638 console->addr = lio_read_device_mem64(oct, coreaddr); in lio_add_console()
641 console->buffer_size = lio_read_device_mem32(oct, coreaddr); in lio_add_console()
644 console->input_base_addr = lio_read_device_mem64(oct, coreaddr); in lio_add_console()
648 lio_read_device_mem64(oct, coreaddr); in lio_add_console()
651 timer = &oct->console_timer[console_num].timer; in lio_add_console()
653 if (oct->uboot_len == 0) in lio_add_console()
654 lio_get_uboot_version(oct); in lio_add_console()
657 oct->console_timer[console_num].ctxptr = (void *)oct; in lio_add_console()
658 oct->console_timer[console_num].ctxul = console_num; in lio_add_console()
667 ret = lio_console_send_cmd(oct, dbg_enb, 2000); in lio_add_console()
678 * @param oct octeon device
681 lio_remove_consoles(struct octeon_device *oct) in lio_remove_consoles() argument
686 for (i = 0; i < oct->num_consoles; i++) { in lio_remove_consoles()
687 console = &oct->console[i]; in lio_remove_consoles()
692 callout_stop(&oct->console_timer[i].timer); in lio_remove_consoles()
699 oct->num_consoles = 0; in lio_remove_consoles()
724 lio_console_read(struct octeon_device *oct, uint32_t console_num, char *buffer, in lio_console_read() argument
731 if (console_num >= oct->num_consoles) { in lio_console_read()
732 lio_dev_err(oct, "Attempted to read from disabled console %d\n", in lio_console_read()
737 console = &oct->console[console_num]; in lio_console_read()
743 rd_idx = lio_read_device_mem32(oct, console->addr + in lio_console_read()
745 wr_idx = lio_read_device_mem32(oct, console->addr + in lio_console_read()
762 lio_pci_read_core_mem(oct, console->output_base_addr + rd_idx, in lio_console_read()
764 lio_write_device_mem32(oct, console->addr + in lio_console_read()
773 lio_get_uboot_version(struct octeon_device *oct) in lio_get_uboot_version() argument
780 ret = lio_console_send_cmd(oct, "setenv stdout pci", 50); in lio_get_uboot_version()
782 console = &oct->console[console_num]; in lio_get_uboot_version()
786 ret = lio_console_send_cmd(oct, "version", 1); in lio_get_uboot_version()
793 bytes_read = lio_console_read(oct, in lio_get_uboot_version()
794 console_num, oct->uboot_version + in lio_get_uboot_version()
799 oct->uboot_version[bytes_read] = 0x0; in lio_get_uboot_version()
803 lio_console_handle_result(oct, console_num); in lio_get_uboot_version()
806 lio_dev_err(oct, "Error reading console %u, ret=%d\n", in lio_get_uboot_version()
818 lio_dev_dbg(oct, "%u: %s\n", console_num, console->leftover); in lio_get_uboot_version()
822 ret = lio_console_send_cmd(oct, "setenv stdout serial", 50); in lio_get_uboot_version()
826 if (oct->uboot_version[i] == 'U' && in lio_get_uboot_version()
827 oct->uboot_version[i + 2] == 'B' && in lio_get_uboot_version()
828 oct->uboot_version[i + 3] == 'o' && in lio_get_uboot_version()
829 oct->uboot_version[i + 4] == 'o' && in lio_get_uboot_version()
830 oct->uboot_version[i + 5] == 't') { in lio_get_uboot_version()
831 oct->uboot_sidx = i; in lio_get_uboot_version()
833 for (; oct->uboot_version[i] != 0x0; i++) { in lio_get_uboot_version()
834 if (oct->uboot_version[i] == 'm' && in lio_get_uboot_version()
835 oct->uboot_version[i + 1] == 'i' && in lio_get_uboot_version()
836 oct->uboot_version[i + 2] == 'p' && in lio_get_uboot_version()
837 oct->uboot_version[i + 3] == 's') { in lio_get_uboot_version()
838 oct->uboot_eidx = i - 1; in lio_get_uboot_version()
839 oct->uboot_version[i - 1] = 0x0; in lio_get_uboot_version()
840 oct->uboot_len = oct->uboot_eidx - in lio_get_uboot_version()
841 oct->uboot_sidx + 1; in lio_get_uboot_version()
842 lio_dev_info(oct, "%s\n", in lio_get_uboot_version()
843 &oct->uboot_version in lio_get_uboot_version()
844 [oct->uboot_sidx]); in lio_get_uboot_version()
856 lio_download_firmware(struct octeon_device *oct, const uint8_t * data, in lio_download_firmware() argument
864 lio_dev_err(oct, "Firmware file too small (%d < %d).\n", in lio_download_firmware()
873 lio_dev_err(oct, "Unrecognized firmware file.\n"); in lio_download_firmware()
880 lio_dev_err(oct, "Firmware CRC mismatch (0x%08x != 0x%08x).\n", in lio_download_firmware()
887 lio_dev_err(oct, "Unmatched firmware version. Expected %s.x, got %s.\n", in lio_download_firmware()
893 lio_dev_err(oct, "Too many images in firmware file (%d).\n", in lio_download_firmware()
898 lio_dev_info(oct, "Firmware version: %s\n", h->version); in lio_download_firmware()
899 snprintf(oct->fw_info.lio_firmware_version, 32, "LIQUIDIO: %s", in lio_download_firmware()
904 lio_dev_info(oct, "Loading %d image(s)\n", be32toh(h->num_images)); in lio_download_firmware()
911 lio_dev_info(oct, "Loading firmware %d at %llx\n", image_len, in lio_download_firmware()
924 lio_pci_write_core_mem(oct, load_addr, in lio_download_firmware()
934 lio_dev_info(oct, "Writing boot command: %s\n", h->bootcmd); in lio_download_firmware()
937 lio_console_send_cmd(oct, h->bootcmd, 50); in lio_download_firmware()