/* Right now, the offsets for the MRC cache area are hard-coded in the * northbridge Kconfig if CONFIG_CHROMEOS is not set. In order to make * this more flexible, there are two of options: * - Have each mainboard Kconfig supply a hard-coded offset * - Use CBFS */ static u32 get_mrc_cache_region(struct mrc_data_container **mrc_region_ptr) { u32 region_size; #if CONFIG_CHROMEOS region_size = find_fmap_entry("RW_MRC_CACHE", (void **)mrc_region_ptr); #else region_size = CONFIG_MRC_CACHE_SIZE; *mrc_region_ptr = (struct mrc_data_container *) (CONFIG_MRC_CACHE_BASE + CONFIG_MRC_CACHE_LOCATION); #endif return region_size; }
/* common code */ static int mrc_cache_get_region(struct mrc_data_region *region) { #if CONFIG_CHROMEOS int ret; ret = find_fmap_entry("RW_MRC_CACHE", ®ion->base); if (ret >= 0) { region->size = ret; return 0; } #endif region->base = (void *)CONFIG_MRC_SETTINGS_CACHE_BASE; region->size = CONFIG_MRC_SETTINGS_CACHE_SIZE; return 0; }
static void mainboard_init(device_t dev) { char **vpd_region_ptr = NULL; u32 search_length = find_fmap_entry("RO_VPD", (void **)vpd_region_ptr); u32 search_address = (unsigned long)(*vpd_region_ptr); u16 io_base = 0; struct device *ethernet_dev = NULL; /* Initialize the Embedded Controller */ butterfly_ec_init(); /* Program EC Keyboard locale based on VPD data */ program_keyboard_type(search_address, search_length); /* Get NIC's IO base address */ ethernet_dev = dev_find_device(BUTTERFLY_NIC_VENDOR_ID, BUTTERFLY_NIC_DEVICE_ID, dev); if (ethernet_dev != NULL) { io_base = pci_read_config16(ethernet_dev, 0x10) & 0xfffe; /* * Battery life time - LAN PCIe should enter ASPM L1 to save * power when LAN connection is idle. * enable CLKREQ: LAN pci config space 0x81h=01 */ pci_write_config8(ethernet_dev, 0x81, 0x01); } if (io_base) { /* Program MAC address based on VPD data */ program_mac_address(io_base, search_address, search_length); /* * Program NIC LEDS * * RTL8105E Series EEPROM-Less Application Note, * Section 5.6 LED Mode Configuration * * Step1: Write C0h to I/O register 0x50 via byte access to * disable 'register protection' * Step2: Write xx001111b to I/O register 0x52 via byte access * (bit7 is LEDS1 and bit6 is LEDS0) * Step3: Write 0x00 to I/O register 0x50 via byte access to * enable 'register protection' */ outb(0xc0, io_base + 0x50); /* Disable protection */ outb((BUTTERFLY_NIC_LED_MODE << 6) | 0x0f, io_base + 0x52); outb(0x00, io_base + 0x50); /* Enable register protection */ } }
static void vboot_invoke_wrapper(struct vboot_handoff *vboot_handoff) { VbCommonParams cparams; VbSelectFirmwareParams fparams; struct vboot_context context; uint32_t *iflags; vboot_handoff->selected_firmware = VB_SELECT_FIRMWARE_READONLY; memset(&cparams, 0, sizeof(cparams)); memset(&fparams, 0, sizeof(fparams)); memset(&context, 0, sizeof(context)); iflags = &vboot_handoff->init_params.flags; if (get_developer_mode_switch()) *iflags |= VB_INIT_FLAG_DEV_SWITCH_ON; if (get_recovery_mode_switch()) *iflags |= VB_INIT_FLAG_REC_BUTTON_PRESSED; if (get_write_protect_state()) *iflags |= VB_INIT_FLAG_WP_ENABLED; if (CONFIG_VIRTUAL_DEV_SWITCH) *iflags |= VB_INIT_FLAG_VIRTUAL_DEV_SWITCH; if (CONFIG_EC_SOFTWARE_SYNC) { *iflags |= VB_INIT_FLAG_EC_SOFTWARE_SYNC; *iflags |= VB_INIT_FLAG_VIRTUAL_REC_SWITCH; } context.handoff = vboot_handoff; context.cparams = &cparams; context.fparams = &fparams; cparams.gbb_size = find_fmap_entry("GBB", &cparams.gbb_data); cparams.shared_data_blob = &vboot_handoff->shared_data[0]; cparams.shared_data_size = VB_SHARED_DATA_MIN_SIZE; cparams.caller_context = &context; fparams.verification_size_A = find_fmap_entry("VBLOCK_A", &fparams.verification_block_A); fparams.verification_size_B = find_fmap_entry("VBLOCK_B", &fparams.verification_block_B); context.fw_a_size = find_fmap_entry("FW_MAIN_A", (void **)&context.fw_a); context.fw_b_size = find_fmap_entry("FW_MAIN_B", (void **)&context.fw_b); /* Check all fmap entries. */ if (context.fw_a == NULL || context.fw_b == NULL || fparams.verification_block_A == NULL || fparams.verification_block_B == NULL || cparams.gbb_data == NULL) { printk(BIOS_DEBUG, "Not all fmap entries found for vboot.\n"); return; } /* Initialize callbacks. */ context.read_vbnv = &read_vbnv; context.save_vbnv = &save_vbnv; context.tis_init = &tis_init; context.tis_open = &tis_open; context.tis_close = &tis_close; context.tis_sendrecv = &tis_sendrecv; context.log_msg = &log_msg; context.fatal_error = &fatal_error; vboot_run_stub(&context); }