Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package palo for openSUSE:Factory checked in at 2026-03-31 15:22:36 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/palo (Old) and /work/SRC/openSUSE:Factory/.palo.new.1999 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "palo" Tue Mar 31 15:22:36 2026 rev:4 rq:1343736 version:2.29 Changes: -------- --- /work/SRC/openSUSE:Factory/palo/palo.changes 2025-09-12 21:11:20.447808328 +0200 +++ /work/SRC/openSUSE:Factory/.palo.new.1999/palo.changes 2026-03-31 15:23:37.891675454 +0200 @@ -1,0 +2,7 @@ +Mon Mar 30 15:37:28 UTC 2026 - Dirk Müller <[email protected]> + +- update to 2.29: + * psc_misc: Add function to get PDC firmware version + * ipl: Fix mfg mode on C8000, rp34x0 and rp44x0 + +------------------------------------------------------------------- Old: ---- palo-2.28.tar.gz New: ---- palo-2.29.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ palo.spec ++++++ --- /var/tmp/diff_new_pack.gusv5m/_old 2026-03-31 15:23:40.523785106 +0200 +++ /var/tmp/diff_new_pack.gusv5m/_new 2026-03-31 15:23:40.547786105 +0200 @@ -1,7 +1,7 @@ # # spec file for package palo # -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # Copyright (c) 2024-2025, Martin Hauke <[email protected]> # # All modifications and additions to the file contributed by third parties @@ -18,7 +18,7 @@ Name: palo -Version: 2.28 +Version: 2.29 Release: 0 Summary: Linux boot loader for HP PA-RISC License: GPL-2.0-only ++++++ palo-2.28.tar.gz -> palo-2.29.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/palo-2.28/debian/changelog new/palo-2.29/debian/changelog --- old/palo-2.28/debian/changelog 2025-09-06 12:48:10.000000000 +0200 +++ new/palo-2.29/debian/changelog 2026-01-11 19:21:35.000000000 +0100 @@ -1,3 +1,11 @@ +palo (2.29) unstable; urgency=medium + + [ Helge Deller ] + * psc_misc: Add function to get PDC firmware version + * ipl: Fix mfg mode on C8000, rp34x0 and rp44x0 + + -- Helge Deller <[email protected]> Sun, 11 Jan 2026 18:02:34 +0000 + palo (2.28) unstable; urgency=medium [ Helge Deller ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/palo-2.28/ipl/bootloader.h new/palo-2.29/ipl/bootloader.h --- old/palo-2.28/ipl/bootloader.h 2025-09-06 12:48:10.000000000 +0200 +++ new/palo-2.29/ipl/bootloader.h 2026-01-11 19:21:35.000000000 +0100 @@ -18,6 +18,7 @@ void die(const char *); void firmware_init(int started_wide); int pdc_default_width(int wide); +int pdc_version(unsigned long *version); int pdc_bootdisk_2GB_limit(void); int pdc_cons_duplex(); int pdc_cons_mux(int *is_mux); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/palo-2.28/ipl/ipl.c new/palo-2.29/ipl/ipl.c --- old/palo-2.28/ipl/ipl.c 2025-09-06 12:48:10.000000000 +0200 +++ new/palo-2.29/ipl/ipl.c 2026-01-11 19:21:35.000000000 +0100 @@ -10,6 +10,7 @@ #include <asm/pdc.h> #include <asm/byteorder.h> #include "load.h" +#include <stdint.h> #undef PAGE0 #define PAGE0 ((struct zeropage *)0x00000000) @@ -356,6 +357,78 @@ * the current one's data structures ... */ } +#define ARRAY_SIZE(_x) (sizeof(_x)/sizeof(_x[0])) +struct nvram_table_map { + const char *model; + uint64_t tables[2]; +} nvram_table_mapping[] = { + { "9000/785/C8000", { 0xfffffff0f0416848, 0xfffffff0f0416860 } }, // PDC 2.13 + { "9000/800/rp34", { 0xfffffff0f04151f8, 0xfffffff0f0415210 } }, // PDC 46.34 and 50.40 + { "9000/800/rp44", { 0xfffffff0f0420498, 0xfffffff0f04204b0 } }, // PDC 46.34 +}; + +struct pdc_table { + uint16_t id; + uint16_t unknown2; + uint32_t unknown4; + uint64_t nvram; + uint64_t defaults; +}; + +static uint64_t get_stable_rp34xx(struct nvram_table_map *map, uint16_t id) +{ + struct pdc_table *table; + + table = (void *) (uintptr_t) map->tables[0]; + if (table->id == id) { + if (Debug) + printf("%04x %016llx %016llx\n", table->id, table->nvram, table->defaults); + return (uint64_t)table->nvram; + } + table = (void *) (uintptr_t) map->tables[1]; + while (table->id) { + if (Debug) + printf("%04x %016llx %016llx\n", table->id, table->nvram, table->defaults); + if (table->id == id) + return (uint64_t)table->nvram; + table++; + } + return 0; +} + +static void enable_mfg_mode(void) +{ + const char *model = get_machine_model(); + struct nvram_table_map *map; + unsigned long pdc_vers; + int i; + + printf("Machine: %s\n", model); + pdc_version(&pdc_vers); + printf("Firmware (PDC) version: %d.%d\n", pdc_vers >> 6, pdc_vers & 0x3f); + + for (i = 0; i < ARRAY_SIZE(nvram_table_mapping); i++) { + map = nvram_table_mapping + i; + if (!strncmp(map->model, model, strlen(map->model))) + break; + } + + if (i == ARRAY_SIZE(nvram_table_mapping)) { + notfound: + printf("Don't know how to enable manufacturing mode.\n\n"); + return; + } + + uint64_t addr = get_stable_rp34xx(map, 0x100); + if (Debug) + printf("got nvram addr %016llx\n", addr); + if (!addr) + goto notfound; + printf("Enabling manufacturing mode and reboot to activate...\n\n", model); + *(uint8_t *)(uintptr_t)(addr + 0x20) = 'M'; + pdc_do_reset(); +} + static void interact(int *ok) { @@ -441,16 +514,11 @@ if (numbuf[0] == 'x') pdc_do_reset(); - /* turn on firmware manufacturing mode on C8000 workstation */ + /* turn on firmware manufacturing mode if possible */ if (numbuf[0] == 'm') { /* hidden option! */ - const char *model = get_machine_model(); - join(commandline, argc, argv, ok); - if (strncmp(model, "9000/785/C8000", 14) == 0) { - *(unsigned char *)0xfffffff0f04300a0 = 0x4d; - pdc_do_reset(); - } - printf("unknown machine - can not enable manufacturing mode\n"); - continue; + join(commandline, argc, argv, ok); + enable_mfg_mode(); + continue; } if (numbuf[0] == 'd') /* hidden option! */ @@ -505,7 +573,6 @@ { char *ttyS1_models[] = { "9000/800/rp3410", - "9000/800/rp3420", "9000/800/rp3440", NULL }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/palo-2.28/ipl/pdc_misc.c new/palo-2.29/ipl/pdc_misc.c --- old/palo-2.28/ipl/pdc_misc.c 2025-09-06 12:48:10.000000000 +0200 +++ new/palo-2.29/ipl/pdc_misc.c 2026-01-11 19:21:35.000000000 +0100 @@ -251,6 +251,28 @@ return r; } +int +pdc_version(unsigned long *version) +{ + int r; + + r = firmware_call(mem_pdc, PDC_MODEL, PDC_MODEL_VERSIONS, pdc_result, 2); + convert_from_wide(pdc_result); + if (r == PDC_OK) { + if ((pdc_result[0] >> 6) == 0) // old C3000? + *version = ((pdc_result[0] >> 4) << 6) | (pdc_result[0] & 0x0f); + else + *version = pdc_result[0]; /* right-shift by 6 to get major version */ + } else { + /* 32-bit old PDC version */ + r = firmware_call(mem_pdc, PDC_MODEL, PDC_MODEL_VERSIONS, pdc_result, 1); + convert_from_wide(pdc_result); + *version = ((pdc_result[0] >> 4) << 6) | (pdc_result[0] & 0x0f); + } + + return r; +} + /* See Pdc11-v0.96-Ch3-IODC.pdf at https://parisc.docs.kernel.org/en/latest/technical_documentation.html The IODC_FEATURES (byte 10) byte specifies which optional IODC feature are Binary files old/palo-2.28/iplboot and new/palo-2.29/iplboot differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/palo-2.28/lib/common.h new/palo-2.29/lib/common.h --- old/palo-2.28/lib/common.h 2025-09-06 12:48:10.000000000 +0200 +++ new/palo-2.29/lib/common.h 2026-01-11 19:21:35.000000000 +0100 @@ -9,7 +9,7 @@ */ #define PALOMAGIC "PALO" -#define PALOVERSION "2.28" +#define PALOVERSION "2.29" #ifndef __ASSEMBLY__ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/palo-2.28/palo.spec new/palo-2.29/palo.spec --- old/palo-2.28/palo.spec 2025-09-06 12:48:10.000000000 +0200 +++ new/palo-2.29/palo.spec 2026-01-11 19:21:35.000000000 +0100 @@ -1,5 +1,5 @@ Name: palo -Version: 2.28 +Version: 2.29 Release: 1%{?dist} Summary: PALO - PA-RISC Boot Loader Packager: Helge Deller <[email protected]>
