--- zzzz-none-000/linux-4.1.38/arch/arm/kernel/setup.c 2017-01-18 18:48:06.000000000 +0000 +++ bcm63-7582-715/linux-4.1.38/arch/arm/kernel/setup.c 2020-11-25 10:06:48.000000000 +0000 @@ -57,9 +57,17 @@ #include #include #include +#if defined(CONFIG_AVM_ENHANCED) +#include +#include +#endif/*--- #if defined(CONFIG_AVM_ENHANCED) ---*/ +#ifdef CONFIG_AVM_ENHANCED +#include +#endif #include "atags.h" +char eva_urlader_env[SZ_16K]; #if defined(CONFIG_FPE_NWFPE) || defined(CONFIG_FPE_FASTFPE) char fpe_type[8]; @@ -227,6 +235,26 @@ "?(17)", }; +/* PROM environment functions */ +char *prom_getenv(char *env_name) { + /* + * Return a pointer to the given environment variable. prom_envp + * points to a null terminated array of pointers to variables. + */ + + char **var = (char **)eva_urlader_env; + int i = strlen(env_name); + + while (*var) { + if (strncmp(env_name, *var, i) == 0) { + return *(var+1); + } + var+=2; + } + return NULL; +} +EXPORT_SYMBOL(prom_getenv); + #ifdef CONFIG_CPU_V7M static int __get_cpu_architecture(void) { @@ -786,6 +814,9 @@ if (kernel_data.start >= res->start && kernel_data.end <= res->end) request_resource(res, &kernel_data); +#if defined(CONFIG_AVM_ENHANCED) + module_alloc_bootmem_init(res, __phys_to_virt(SZ_8M)); +#endif/*--- #if defined(CONFIG_AVM_ENHANCED) ---*/ } if (mdesc->video_start) { @@ -915,9 +946,22 @@ const struct machine_desc *mdesc; setup_processor(); + +#if defined(CONFIG_AVM_ENHANCED) && defined(CONFIG_OF) + init_avm_kernel_config(); + //Erst atags auslesen um da cmdline und memsize rauszuholen + mdesc = setup_machine_tags(__atags_pointer, __machine_arch_type); + strlcpy(cmd_line, boot_command_line, COMMAND_LINE_SIZE); + //danach weitere Werte aus dem eigebetteten Device Tree auslesen + //TODO: HWSubrevision auswerten + mdesc = setup_machine_fdt(virt_to_phys(avm_kernel_config_device_tree[0])); + //printk(KERN_ERR"[%s] %x \n", __func__, (unsigned int)avm_kernel_config_device_tree[0]); + +#else mdesc = setup_machine_fdt(__atags_pointer); if (!mdesc) mdesc = setup_machine_tags(__atags_pointer, __machine_arch_type); +#endif machine_desc = mdesc; machine_name = mdesc->name; dump_stack_set_arch_desc("%s", mdesc->name); @@ -930,8 +974,10 @@ init_mm.end_data = (unsigned long) _edata; init_mm.brk = (unsigned long) _end; +#if !(defined(CONFIG_AVM_ENHANCED) && defined(CONFIG_OF)) /* populate cmd_line too for later use, preserving boot_command_line */ strlcpy(cmd_line, boot_command_line, COMMAND_LINE_SIZE); +#endif *cmdline_p = cmd_line; parse_early_param(); @@ -1136,3 +1182,8 @@ .stop = c_stop, .show = c_show }; + +/*--- Kernel-Schnittstellen-Funktion für das LED-Modul ---*/ +enum _led_event { /* DUMMY DEFINITION */ LastEvent = 0 }; +int (*led_event_action)(int, enum _led_event , unsigned int ) = NULL; +EXPORT_SYMBOL(led_event_action);