Lines Matching +full:display +full:- +full:width +full:- +full:chars
1 // SPDX-License-Identifier: GPL-2.0-or-later
6 * Copyright (C) 1996-2005 Paul Mackerras.
46 #include <asm/asm-prototypes.h>
47 #include <asm/ultravisor-api.h>
72 * On ppc32 we compile with -mrelocatable, which means that references
83 * arguments to call_prom should be 32-bit values.
216 * Error results ... some OF calls will return "-1" on error, some
222 #define PROM_ERROR (-1u)
236 return c1 < c2 ? -1 : 1; in prom_strcmp()
249 return -E2BIG; in prom_strscpy_pad()
260 i--; in prom_strscpy_pad()
261 rc = -E2BIG; in prom_strscpy_pad()
278 return c1 < c2 ? -1 : 1; in prom_strncmp()
281 count--; in prom_strncmp()
292 return sc - s; in prom_strlen()
300 for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--) in prom_memcmp()
301 if ((res = *su1 - *su2) != 0) in prom_memcmp()
315 l1--; in prom_strstr()
334 count -= dsize; in prom_strlcat()
336 len = count-1; in prom_strlcat()
347 return -EINVAL; in prom_strtobool()
379 return -EINVAL; in prom_strtobool()
435 rets[i-1] = be32_to_cpu(args.args[nargs+i]); in call_prom_ret()
452 call_prom("write", 3, 1, prom.stdout, p, q - p); in prom_print()
470 for (i = nibbles-1; i >= 0; i--) { in prom_print_hex()
473 buf[i] += ('a'-'0'-10); in prom_print_hex()
487 for (i = UL_DIGITS-1; i >= 0; i--) { in prom_print_dec()
494 size = UL_DIGITS - i; in prom_print_dec()
512 call_prom("write", 3, 1, prom.stdout, p, q - p); in prom_printf()
581 prom_print("-"); in prom_printf()
582 vs = -vs; in prom_printf()
604 ret = call_prom_ret("call-method", 5, 2, &result, in prom_claim()
607 if (ret != 0 || result == -1) in prom_claim()
608 return -1; in prom_claim()
609 ret = call_prom_ret("call-method", 5, 2, &result, in prom_claim()
613 call_prom("call-method", 4, 1, ADDR("release"), in prom_claim()
615 return -1; in prom_claim()
618 call_prom("call-method", 6, 1, in prom_claim()
630 * it also causes some sort of double-fault on early pmacs */ in prom_panic()
690 --i; in tohex()
725 #define prom_toupper(c) (prom_islower(c) ? ((c) - 'a' + 'A') : (c))
741 (value = prom_isdigit(*cp) ? *cp - '0' : prom_toupper(*cp) - 'A' + 10) < base) { in prom_strtoul()
794 l = prom_getprop(prom.chosen, "bootargs", p, COMMAND_LINE_SIZE-1); in early_cmdline_parse()
861 opt += sizeof("svm=") - 1; in early_cmdline_parse()
871 * followed by # option vectors - 1, followed by the option vectors.
877 /* Firmware expects the value to be n - 1, where n is the # of vectors */
878 #define NUM_VECTORS(n) ((n) - 1)
881 * Firmware expects 1 + n - 2, where n is the length of the option vector in
882 * bytes. The 1 accounts for the length byte itself, the - 2 .. ?
884 #define VECTOR_LENGTH(n) (1 + (n) - 2)
1011 .mask = cpu_to_be32(0xffffffff), /* all 3.1-compliant */
1015 .mask = cpu_to_be32(0xffffffff), /* all 3.00-compliant */
1019 .mask = cpu_to_be32(0xffffffff), /* all 2.07-compliant */
1023 .mask = cpu_to_be32(0xffffffff), /* all 2.06-compliant */
1027 .mask = cpu_to_be32(0xffffffff), /* all 2.05-compliant */
1031 .mask = cpu_to_be32(0xfffffffe), /* all 2.04-compliant and earlier */
1128 /* Old method - ELF header with PT_NOTE sections only works on BE */
1151 char name[24]; /* "IBM,RPA-Client-Config" */
1200 .namesz = sizeof("IBM,RPA-Client-Config"),
1203 .name = "IBM,RPA-Client-Config",
1235 plen = prom_getproplen(node, "ibm,ppc-interrupt-server#s"); in prom_count_smt_threads()
1261 prom_debug("MMU - either supported\n"); in prom_parse_mmu_model()
1262 support->radix_mmu = !prom_radix_disable; in prom_parse_mmu_model()
1263 support->hash_mmu = true; in prom_parse_mmu_model()
1266 prom_debug("MMU - radix only\n"); in prom_parse_mmu_model()
1274 support->radix_mmu = true; in prom_parse_mmu_model()
1277 prom_debug("MMU - hash only\n"); in prom_parse_mmu_model()
1278 support->hash_mmu = true; in prom_parse_mmu_model()
1291 prom_debug("XIVE - either mode supported\n"); in prom_parse_xive_model()
1292 support->xive = !prom_xive_disable; in prom_parse_xive_model()
1295 prom_debug("XIVE - exploitation mode supported\n"); in prom_parse_xive_model()
1303 support->xive = true; in prom_parse_xive_model()
1306 prom_debug("XIVE - legacy mode supported\n"); in prom_parse_xive_model()
1323 support->radix_gtse = !prom_radix_gtse_disable; in prom_parse_platform_support()
1341 "ibm,arch-vec-5-platform-support"); in prom_check_platform_support()
1357 prom_debug("Found ibm,arch-vec-5-platform-support, len: %d\n", in prom_check_platform_support()
1360 prom_printf("WARNING: ibm,arch-vec-5-platform-support longer than expected (len: %d)\n", in prom_check_platform_support()
1362 prom_getprop(prom.chosen, "ibm,arch-vec-5-platform-support", &vec, sizeof(vec)); in prom_check_platform_support()
1370 /* Radix preferred - Check if GTSE is also supported */ in prom_check_platform_support()
1399 /* Check ibm,arch-vec-5-platform-support and fixup vec5 if required */ in prom_send_capabilities()
1417 /* try calling the ibm,client-architecture-support method */ in prom_send_capabilities()
1418 prom_printf("Calling ibm,client-architecture-support..."); in prom_send_capabilities()
1419 if (call_prom_ret("call-method", 3, 2, &ret, in prom_send_capabilities()
1420 ADDR("ibm,client-architecture-support"), in prom_send_capabilities()
1425 prom_printf("\nWARNING: ibm,client-architecture" in prom_send_capabilities()
1426 "-support call FAILED!\n"); in prom_send_capabilities()
1439 /* no ibm,client-architecture-support call, try the old way */ in prom_send_capabilities()
1441 ADDR("/packages/elf-loader")); in prom_send_capabilities()
1443 prom_printf("couldn't open /packages/elf-loader\n"); in prom_send_capabilities()
1446 call_prom("call-method", 3, 1, ADDR("process-elf-header"), in prom_send_capabilities()
1469 * topmost, and the device-tree is allocated from the bottom. We try
1470 * to grow the device-tree allocation as we progress. If we can't,
1485 * extending the previous allocation). Used for the device-tree flattening
1517 prom_debug(" -> %lx\n", addr); in alloc_up()
1544 addr = ALIGN_DOWN(alloc_top_high - size, align); in alloc_down()
1562 base = ALIGN_DOWN(alloc_top - size, align); in alloc_down()
1564 base = ALIGN_DOWN(base - 0x100000, align)) { in alloc_down()
1576 prom_debug(" -> %lx\n", addr); in alloc_down()
1597 s--; in prom_next_cell()
1632 size = top - base; in reserve_mem()
1634 if (cnt >= (MEM_RESERVE_MAP_SIZE - 1)) in reserve_mem()
1660 prom_getprop(prom.root, "#address-cells", &val, sizeof(val)); in prom_init_mem()
1663 prom_getprop(prom.root, "#size-cells", &val, sizeof(rsc)); in prom_init_mem()
1694 call_prom("package-to-path", 3, 1, node, prom_scratch, in prom_init_mem()
1695 sizeof(prom_scratch) - 1); in prom_init_mem()
1699 while ((endp - p) >= (rac + rsc)) { in prom_init_mem()
1742 * segment 0 when running non-LPAR. in prom_init_mem()
1746 * reasonable on 32-bit, cap at 768MB on all machines. in prom_init_mem()
1813 prom_getprop(rtas_node, "ibm,os-term", &val, sizeof(val)); in prom_rtas_os_term()
1815 prom_debug("ibm,os-term: %x\n", token); in prom_rtas_os_term()
1817 prom_panic("Could not get token for ibm,os-term\n"); in prom_rtas_os_term()
1845 prom_getprop(rtas_node, "rtas-size", &val, sizeof(size)); in prom_instantiate_rtas()
1862 if (call_prom_ret("call-method", 3, 2, &entry, in prom_instantiate_rtas()
1863 ADDR("instantiate-rtas"), in prom_instantiate_rtas()
1874 prom_setprop(rtas_node, "/rtas", "linux,rtas-base", in prom_instantiate_rtas()
1877 prom_setprop(rtas_node, "/rtas", "linux,rtas-entry", in prom_instantiate_rtas()
1880 /* Check if it supports "query-cpu-stopped-state" */ in prom_instantiate_rtas()
1881 if (prom_getprop(rtas_node, "query-cpu-stopped-state", in prom_instantiate_rtas()
1917 if (prom_getprop(ibmvtpm_node, "ibm,sml-efi-reformat-supported", in prom_instantiate_sml()
1919 if (call_prom_ret("call-method", 2, 2, &succ, in prom_instantiate_sml()
1920 ADDR("reformat-sml-to-efi-alignment"), in prom_instantiate_sml()
1926 if (call_prom_ret("call-method", 2, 2, &size, in prom_instantiate_sml()
1927 ADDR("sml-get-allocated-size"), in prom_instantiate_sml()
1933 if (call_prom_ret("call-method", 2, 2, &size, in prom_instantiate_sml()
1934 ADDR("sml-get-handover-size"), in prom_instantiate_sml()
1949 if (call_prom_ret("call-method", 4, 2, &entry, in prom_instantiate_sml()
1950 ADDR("sml-handover"), in prom_instantiate_sml()
1959 prom_setprop(ibmvtpm_node, "/vdevice/vtpm", "linux,sml-base", in prom_instantiate_sml()
1961 prom_setprop(ibmvtpm_node, "/vdevice/vtpm", "linux,sml-size", in prom_instantiate_sml()
2021 if (prom_getprop(node, "tce-table-minalign", &minalign, in prom_initialize_tce_table()
2024 if (prom_getprop(node, "tce-table-minsize", &minsize, in prom_initialize_tce_table()
2044 /* It seems OF doesn't null-terminate the path :-( */ in prom_initialize_tce_table()
2047 if (call_prom("package-to-path", 3, 1, node, in prom_initialize_tce_table()
2048 path, sizeof(prom_scratch) - 1) == PROM_ERROR) { in prom_initialize_tce_table()
2049 prom_printf("package-to-path failed\n"); in prom_initialize_tce_table()
2053 prom_setprop(node, path, "linux,tce-base", &base, sizeof(base)); in prom_initialize_tce_table()
2054 prom_setprop(node, path, "linux,tce-size", &minsize, sizeof(minsize)); in prom_initialize_tce_table()
2061 /* Initialize the table to have a one-to-one mapping in prom_initialize_tce_table()
2078 call_prom("call-method", 6, 0, ADDR("set-64-bit-addressing"), in prom_initialize_tce_table()
2079 phb_node, -1, minsize, in prom_initialize_tce_table()
2084 reserve_mem(local_alloc_bottom, local_alloc_top - local_alloc_bottom); in prom_initialize_tce_table()
2113 * -- Cort
2117 * 0 - 0x100 address range
2133 * On pseries, if RTAS supports "query-cpu-stopped-state", in prom_hold_cpus()
2169 /* Skip non-configured cpus. */ in prom_hold_cpus()
2174 reg = cpu_to_be32(-1); /* make sparse happy */ in prom_hold_cpus()
2184 *acknowledge = (unsigned long)-1; in prom_hold_cpus()
2187 /* Primary Thread of non-boot cpu or any thread */ in prom_hold_cpus()
2189 call_prom("start-cpu", 3, 0, node, in prom_hold_cpus()
2193 (*acknowledge == ((unsigned long)-1)); i++ ) in prom_hold_cpus()
2245 version[sizeof(version) - 1] = 0; in prom_find_mmu()
2251 call_prom("interpret", 1, 1, "dev /memory 0 to allow-reclaim"); in prom_find_mmu()
2279 call_prom("instance-to-path", 3, 1, prom.stdout, path, 255); in prom_init_stdout()
2281 prom_setprop(prom.chosen, "/chosen", "linux,stdout-path", in prom_init_stdout()
2284 /* instance-to-package fails on PA-Semi */ in prom_init_stdout()
2285 stdout_node = call_prom("instance-to-package", 1, 1, prom.stdout); in prom_init_stdout()
2289 /* If it's a display, note it */ in prom_init_stdout()
2292 if (prom_strcmp(type, "display") == 0) in prom_init_stdout()
2293 prom_setprop(stdout_node, path, "linux,boot-display", NULL, 0); in prom_init_stdout()
2308 compat, sizeof(compat)-1); in prom_find_machine_type()
2325 prom_strstr(p, "IBM,CPBW-1.0")) in prom_find_machine_type()
2334 * - /device_type is "chrp" (please, do NOT use that for future in prom_find_machine_type()
2335 * non-IBM designs ! in prom_find_machine_type()
2336 * - it has /rtas in prom_find_machine_type()
2339 compat, sizeof(compat)-1); in prom_find_machine_type()
2349 x = prom_getproplen(rtas, "ibm,hypertas-functions"); in prom_find_machine_type()
2362 return call_prom("call-method", 6, 1, ADDR("color!"), ih, i, b, g, r); in prom_set_color()
2366 * If we have a display that we don't know how to drive,
2370 * So we check whether we will need to open the display,
2404 if (prom_strcmp(type, "display") != 0) in prom_check_displays()
2407 /* It seems OF doesn't null-terminate the path :-( */ in prom_check_displays()
2415 if (call_prom("package-to-path", 3, 1, node, path, in prom_check_displays()
2416 sizeof(prom_scratch) - 10) == PROM_ERROR) in prom_check_displays()
2418 prom_printf("found display : %s, opening... ", path); in prom_check_displays()
2431 * method is available. Should update this to set-colors */ in prom_check_displays()
2447 if (prom_getprop(node, "linux,boot-display", NULL, 0) != in prom_check_displays()
2449 u32 width, height, pitch, addr; in prom_check_displays() local
2453 if (prom_getprop(node, "width", &width, 4) == PROM_ERROR) in prom_check_displays()
2466 width, height, pitch, addr); in prom_check_displays()
2467 btext_setup_display(width, height, 8, pitch, addr); in prom_check_displays()
2487 room = alloc_top - alloc_bottom; in make_room()
2519 return s - os; in dt_find_string()
2593 room = *mem_end - *mem_start; in scan_dt_build_struct()
2596 l = call_prom("package-to-path", 3, 1, node, namep, room); in scan_dt_build_struct()
2600 if (l >= *mem_end - *mem_start) in scan_dt_build_struct()
2602 call_prom("package-to-path", 3, 1, node, namep, l); in scan_dt_build_struct()
2606 /* Fixup an Apple bug where they have bogus \0 chars in the in scan_dt_build_struct()
2623 call_prom("package-to-path", 3, 1, node, path, sizeof(prom_scratch) - 1); in scan_dt_build_struct()
2702 * Check how much room we have between alloc top & bottom (+/- a in flatten_device_tree()
2705 room = alloc_top - alloc_bottom - 0x4000; in flatten_device_tree()
2713 prom_panic("Can't allocate initial device-tree chunk\n"); in flatten_device_tree()
2752 hdr->boot_cpuid_phys = cpu_to_be32(prom.cpu); in flatten_device_tree()
2753 hdr->magic = cpu_to_be32(OF_DT_HEADER); in flatten_device_tree()
2754 hdr->totalsize = cpu_to_be32(dt_struct_end - dt_header_start); in flatten_device_tree()
2755 hdr->off_dt_struct = cpu_to_be32(dt_struct_start - dt_header_start); in flatten_device_tree()
2756 hdr->off_dt_strings = cpu_to_be32(dt_string_start - dt_header_start); in flatten_device_tree()
2757 hdr->dt_strings_size = cpu_to_be32(dt_string_end - dt_string_start); in flatten_device_tree()
2758 hdr->off_mem_rsvmap = cpu_to_be32(((unsigned long)rsvmap) - dt_header_start); in flatten_device_tree()
2759 hdr->version = cpu_to_be32(OF_DT_VERSION); in flatten_device_tree()
2761 hdr->last_comp_version = cpu_to_be32(0x10); in flatten_device_tree()
2771 prom_printf(" %llx - %llx\n", in flatten_device_tree()
2781 prom_printf("Device tree strings 0x%lx -> 0x%lx\n", in flatten_device_tree()
2783 prom_printf("Device tree struct 0x%lx -> 0x%lx\n", in flatten_device_tree()
2832 /* The values for memory-controller don't have right number of cells */
2847 prom_getprop(prom.root, "#address-cells", &ac, sizeof(ac)); in fixup_device_tree_maple_memory_controller()
2848 prom_getprop(prom.root, "#size-cells", &sc, sizeof(sc)); in fixup_device_tree_maple_memory_controller()
2914 prom_printf("Fixing up IDE class-code on Pegasos...\n"); in fixup_device_tree_chrp()
2915 rc = prom_getprop(ph, "class-code", prop, sizeof(u32)); in fixup_device_tree_chrp()
2918 prom_setprop(ph, name, "class-code", prop, sizeof(u32)); in fixup_device_tree_chrp()
2946 if (prom_getprop(u3, "device-rev", &u3_rev, sizeof(u3_rev)) in fixup_device_tree_pmac()
2963 prom_setprop(i2c, "/u3@0,f8000000/i2c@f8001000", "interrupt-parent", in fixup_device_tree_pmac()
2972 * The MPC5200 FEC driver requires an phy-handle property to tell it how
2973 * to talk to the phy. If the phy-handle property is missing, then this
2983 /* Check if /builtin/ethernet exists - bail if it doesn't */ in fixup_device_tree_efika_add_phy()
2988 /* Check if the phy-handle property exists - bail if it does */ in fixup_device_tree_efika_add_phy()
2989 rv = prom_getprop(node, "phy-handle", prop, sizeof(prop)); in fixup_device_tree_efika_add_phy()
2998 /* Check for an MDIO bus node - if missing then create one */ in fixup_device_tree_efika_add_phy()
3003 " s\" /builtin\" find-device" in fixup_device_tree_efika_add_phy()
3004 " new-device" in fixup_device_tree_efika_add_phy()
3005 " 1 encode-int s\" #address-cells\" property" in fixup_device_tree_efika_add_phy()
3006 " 0 encode-int s\" #size-cells\" property" in fixup_device_tree_efika_add_phy()
3007 " s\" mdio\" device-name" in fixup_device_tree_efika_add_phy()
3008 " s\" fsl,mpc5200b-mdio\" encode-string" in fixup_device_tree_efika_add_phy()
3011 " 0x2 encode-int" in fixup_device_tree_efika_add_phy()
3012 " 0x5 encode-int encode+" in fixup_device_tree_efika_add_phy()
3013 " 0x3 encode-int encode+" in fixup_device_tree_efika_add_phy()
3015 " finish-device"); in fixup_device_tree_efika_add_phy()
3018 /* Check for a PHY device node - if missing then create one and in fixup_device_tree_efika_add_phy()
3021 ADDR("/builtin/mdio/ethernet-phy")); in fixup_device_tree_efika_add_phy()
3025 " s\" /builtin/mdio\" find-device" in fixup_device_tree_efika_add_phy()
3026 " new-device" in fixup_device_tree_efika_add_phy()
3027 " s\" ethernet-phy\" device-name" in fixup_device_tree_efika_add_phy()
3028 " 0x10 encode-int s\" reg\" property" in fixup_device_tree_efika_add_phy()
3029 " my-self" in fixup_device_tree_efika_add_phy()
3031 " finish-device" in fixup_device_tree_efika_add_phy()
3032 " s\" /builtin/ethernet\" find-device" in fixup_device_tree_efika_add_phy()
3033 " encode-int" in fixup_device_tree_efika_add_phy()
3034 " s\" phy-handle\" property" in fixup_device_tree_efika_add_phy()
3035 " device-end"); in fixup_device_tree_efika_add_phy()
3099 /* Make sure ethernet phy-handle property exists */ in fixup_device_tree_efika()
3110 * Add an interrupt-controller property for the io-bridge to use
3125 /* check if interrupt-controller node set yet */ in fixup_device_tree_pasemi()
3126 if (prom_getproplen(iob, "interrupt-controller") !=PROM_ERROR) in fixup_device_tree_pasemi()
3129 prom_printf("adding interrupt-controller property for SB600...\n"); in fixup_device_tree_pasemi()
3131 prom_setprop(iob, name, "interrupt-controller", &val, 0); in fixup_device_tree_pasemi()
3150 /* found a node, update both interrupts and interrupt-parent */ in fixup_device_tree_pasemi()
3152 interrupts[0] -= 203; in fixup_device_tree_pasemi()
3154 interrupts[0] -= 213; in fixup_device_tree_pasemi()
3162 prom_setprop(node, pci_name, "interrupt-parent", &parent, in fixup_device_tree_pasemi()
3167 * The io-bridge has device_type set to 'io-bridge' change it to 'isa' in fixup_device_tree_pasemi()
3168 * so that generic isa-bridge code can add the SB600 and its on-board in fixup_device_tree_pasemi()
3171 name = "/pxp@0,e0000000/io-bridge@0"; in fixup_device_tree_pasemi()
3207 cpu_pkg = call_prom("instance-to-package", 1, 1, prom_cpu); in prom_find_boot_cpu()
3228 prom_setprop(prom.chosen, "/chosen", "linux,initrd-start", in prom_check_initrd()
3231 prom_setprop(prom.chosen, "/chosen", "linux,initrd-end", in prom_check_initrd()
3235 prom_initrd_end - prom_initrd_start); in prom_check_initrd()
3314 memset(&__bss_start, 0, __bss_stop - __bss_start); in prom_init()
3384 * Initialize display devices in prom_init()
3399 * On non-powermacs, try to instantiate RTAS. PowerMacs don't in prom_init()
3411 * On non-powermacs, put all CPUs in spin-loops. in prom_init()
3425 prom_setprop(prom.chosen, "/chosen", "linux,memory-limit", in prom_init()
3430 prom_setprop(prom.chosen, "/chosen", "linux,iommu-off", in prom_init()
3434 prom_setprop(prom.chosen, "/chosen", "linux,iommu-force-on", in prom_init()
3438 prom_setprop(prom.chosen, "/chosen", "linux,tce-alloc-start", in prom_init()
3441 prom_setprop(prom.chosen, "/chosen", "linux,tce-alloc-end", in prom_init()
3448 * Fixup any known bugs in the device-tree in prom_init()
3453 * Now finally create the flattened device-tree in prom_init()
3481 prom_debug("->dt_header_start=0x%lx\n", hdr); in prom_init()
3484 reloc_got2(-offset); in prom_init()