c34713d33e
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>
66 lines
1.8 KiB
C
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 */
|