coreboot-kgpe-d16/src/include/payload_loader.h
Aaron Durbin c34713d33e x86: add MIRROR_PAYLOAD_TO_RAM_BEFORE_LOADING option
Boot speeds can be sped up by mirroring the payload into
main memory before doing the actual loading. Systems that
would benefit from this are typically Intel ones whose SPI
are memory mapped. Without the SPI being cached all accesses
to the payload in SPI while being loaded result in uncacheable
accesses. Instead take advantage of the on-board SPI controller
which has an internal cache and prefetcher by copying 64-byte
cachelines using 32-bit word copies.

Change-Id: I4aac856b1b5130fa2d68a6c45a96cfeead472a52
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/5305
Tested-by: build bot (Jenkins)
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
2014-03-07 15:30:27 +01:00

66 lines
1.8 KiB
C

/*
* This file is part of the coreboot project.
*
* Copyright (C) 2014 Google Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef PAYLOAD_LOADER_H
#define PAYLOAD_LOADER_H
#include <stdint.h>
#include <stddef.h>
struct buffer_area {
void *data;
size_t size;
};
struct payload {
const char *name;
struct buffer_area backing_store;
/* Used when payload wants memory coreboot ramstage is running at. */
struct buffer_area bounce;
void *entry;
};
/*
* Load payload into memory and return pointer to payload structure. Returns
* NULL on error.
*/
struct payload *payload_load(void);
/* Run the loaded payload. */
void payload_run(const struct payload *payload);
/* Mirror the payload to be loaded. */
void mirror_payload(struct payload *payload);
/* architecture specific function to run payload. */
void arch_payload_run(const struct payload *payload);
/* Payload loading operations. */
struct payload_loader_ops {
const char *name;
/*
* Fill in payload_backing_store structure. Return 0 on success, < 0
* on failure.
*/
int (*locate)(struct payload *payload);
};
/* Defined in src/lib/selfboot.c */
void *selfload(struct payload *payload);
#endif /* PAYLOAD_LOADER_H */