From: Vladimir 'phcoder' Serbinenko Date: Mon, 5 Apr 2010 15:35:03 +0000 (+0200) Subject: Merge mainline into yeeloongfw X-Git-Tag: 1.99~780^2~33 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a6132b9f3f4770896cc030162af61e84f520a00e;p=thirdparty%2Fgrub.git Merge mainline into yeeloongfw --- a6132b9f3f4770896cc030162af61e84f520a00e diff --cc conf/mips-yeeloong.rmk index 001bae966,35cd01b4b..288b36ea5 --- a/conf/mips-yeeloong.rmk +++ b/conf/mips-yeeloong.rmk @@@ -4,8 -4,7 +4,8 @@@ target_machine=yeeloon COMMON_CFLAGS += -march=mips3 COMMON_ASFLAGS += -march=mips3 - kernel_img_HEADERS += bitmap.h video.h gfxterm.h font.h bitmap_scale.h bufio.h \ - cs5536.h -kernel_img_HEADERS += pci.h bitmap.h video.h gfxterm.h font.h bitmap_scale.h bufio.h ++kernel_img_HEADERS += pci.h bitmap.h video.h gfxterm.h font.h \ ++ bitmap_scale.h bufio.h cs5536.h include $(srcdir)/conf/mips.mk @@@ -74,42 -64,11 +74,23 @@@ datetime_mod_SOURCES = lib/cmos_datetim datetime_mod_CFLAGS = $(COMMON_CFLAGS) datetime_mod_LDFLAGS = $(COMMON_LDFLAGS) - # For date.mod - pkglib_MODULES += date.mod - date_mod_SOURCES = commands/date.c - date_mod_CFLAGS = $(COMMON_CFLAGS) - date_mod_LDFLAGS = $(COMMON_LDFLAGS) - - # For datehook.mod - pkglib_MODULES += datehook.mod - datehook_mod_SOURCES = hook/datehook.c - datehook_mod_CFLAGS = $(COMMON_CFLAGS) - datehook_mod_LDFLAGS = $(COMMON_LDFLAGS) - +# For lsspd.mod +pkglib_MODULES += lsspd.mod +lsspd_mod_SOURCES = commands/mips/yeeloong/lsspd.c +lsspd_mod_CFLAGS = $(COMMON_CFLAGS) +lsspd_mod_LDFLAGS = $(COMMON_LDFLAGS) + pkglib_MODULES += linux.mod linux_mod_SOURCES = loader/$(target_cpu)/linux.c linux_mod_CFLAGS = $(COMMON_CFLAGS) linux_mod_ASFLAGS = $(COMMON_ASFLAGS) linux_mod_LDFLAGS = $(COMMON_LDFLAGS) +# For halt.mod. +pkglib_MODULES += halt.mod +halt_mod_SOURCES = commands/halt.c +halt_mod_CFLAGS = $(COMMON_CFLAGS) +halt_mod_LDFLAGS = $(COMMON_LDFLAGS) + - # For reboot.mod. - pkglib_MODULES += reboot.mod - reboot_mod_SOURCES = commands/reboot.c - reboot_mod_CFLAGS = $(COMMON_CFLAGS) - reboot_mod_LDFLAGS = $(COMMON_LDFLAGS) - sbin_SCRIPTS += grub-install grub_install_SOURCES = util/grub-install.in - diff --cc include/grub/pci.h index 17f769f4c,89bd1034a..8a653c43e --- a/include/grub/pci.h +++ b/include/grub/pci.h @@@ -68,10 -66,9 +68,10 @@@ #define GRUB_PCI_REG_MIN_GNT 0x3e #define GRUB_PCI_REG_MAX_LAT 0x3f +#ifndef ASM_FILE typedef grub_uint32_t grub_pci_id_t; - #ifdef GRUB_UTIL + #ifdef GRUB_MACHINE_EMU #include #else typedef grub_uint32_t grub_pci_address_t; diff --cc kern/mips/yeeloong/init.c index 8a29be8eb,6bba27b51..127cf870e --- a/kern/mips/yeeloong/init.c +++ b/kern/mips/yeeloong/init.c @@@ -26,17 -26,13 +26,17 @@@ #include #include #include +#include #include +#include +#include +#include extern void grub_video_sm712_init (void); - extern void grub_video_video_init (void); - extern void grub_video_bitmap_init (void); - extern void grub_font_manager_init (void); - extern void grub_term_gfxterm_init (void); + extern void grub_video_init (void); + extern void grub_bitmap_init (void); + extern void grub_font_init (void); + extern void grub_gfxterm_init (void); extern void grub_at_keyboard_init (void); /* FIXME: use interrupt to count high. */ @@@ -70,93 -66,20 +70,71 @@@ grub_machine_mmap_iterate (int NESTED_F void grub_machine_init (void) { - void *modend; + grub_addr_t modend; + + /* FIXME: measure this. */ + if (grub_arch_busclock == 0) + { + grub_arch_busclock = 66000000; + grub_arch_cpuclock = 797000000; + } + + grub_install_get_time_ms (grub_rtc_get_time_ms); + + if (grub_arch_memsize == 0) + { + grub_port_t smbbase; + grub_err_t err; + grub_pci_device_t dev; + struct grub_smbus_spd spd; + unsigned totalmem; + int i; + + if (!grub_cs5536_find (&dev)) + grub_fatal ("No CS5536 found\n"); + + err = grub_cs5536_init_smbus (dev, 0x7ff, &smbbase); + if (err) + grub_fatal ("Couldn't init SMBus: %s\n", grub_errmsg); + + /* Yeeloong has only one memory slot. */ + err = grub_cs5536_read_spd (smbbase, GRUB_SMB_RAM_START_ADDR, &spd); + if (err) + grub_fatal ("Couldn't read SPD: %s\n", grub_errmsg); + for (i = 5; i < 13; i++) + if (spd.ddr2.rank_capacity & (1 << (i & 7))) + break; + /* Something is wrong. */ + if (i == 13) + totalmem = 256; + else + totalmem = ((spd.ddr2.num_of_ranks + & GRUB_SMBUS_SPD_MEMORY_NUM_OF_RANKS_MASK) + 1) << (i + 2); + + if (totalmem >= 256) + { + grub_arch_memsize = 256; + grub_arch_highmemsize = totalmem - 256; + } + else + { + grub_arch_memsize = (totalmem >> 20); + grub_arch_highmemsize = 0; + } + } + - modend = get_modules_end (); - grub_mm_init_region (modend, (grub_arch_memsize << 20) - - (((grub_addr_t) modend) - GRUB_ARCH_LOWMEMVSTART)); + modend = grub_modules_get_end (); + grub_mm_init_region ((void *) modend, (grub_arch_memsize << 20) + - (modend - GRUB_ARCH_LOWMEMVSTART)); /* FIXME: use upper memory as well. */ - grub_install_get_time_ms (grub_rtc_get_time_ms); /* Initialize output terminal (can't be done earlier, as gfxterm relies on a working heap. */ - grub_video_video_init (); - grub_video_sm712_init (); + grub_video_init (); + grub_video_sm712_init (); - grub_video_bitmap_init (); - grub_font_manager_init (); - grub_term_gfxterm_init (); + grub_bitmap_init (); + grub_font_init (); + grub_gfxterm_init (); grub_at_keyboard_init (); }