mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 23:22:37 +02:00
Add support for building flashrom against libpayload
This doesn't include changes to the frontend which must be done separately, so this won't work out of the box. This code was tested on hardware. Corresponding to flashrom svn r1184. Signed-off-by: Patrick Georgi <patrick.georgi@coresystems.de> Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
This commit is contained in:
parent
5cfc94a98b
commit
a9095a9545
@ -22,9 +22,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <fcntl.h>
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#ifndef __LIBPAYLOAD__
|
||||||
|
#include <fcntl.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#endif
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
|
@ -22,9 +22,11 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#if !defined (__DJGPP__)
|
#if !defined (__DJGPP__) && !defined(__LIBPAYLOAD__)
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#endif
|
||||||
|
#if !defined (__DJGPP__)
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#endif
|
#endif
|
||||||
#include "flash.h"
|
#include "flash.h"
|
||||||
@ -44,7 +46,7 @@ int io_fd;
|
|||||||
|
|
||||||
void get_io_perms(void)
|
void get_io_perms(void)
|
||||||
{
|
{
|
||||||
#if defined(__DJGPP__)
|
#if defined(__DJGPP__) || defined(__LIBPAYLOAD__)
|
||||||
/* We have full permissions by default. */
|
/* We have full permissions by default. */
|
||||||
return;
|
return;
|
||||||
#else
|
#else
|
||||||
|
12
hwaccess.h
12
hwaccess.h
@ -292,7 +292,7 @@ static inline uint32_t inl(uint16_t port)
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(__DARWIN__) && !defined(__FreeBSD__) && !defined(__DragonFly__)
|
#if !defined(__DARWIN__) && !defined(__FreeBSD__) && !defined(__DragonFly__) && !defined(__LIBPAYLOAD__)
|
||||||
typedef struct { uint32_t hi, lo; } msr_t;
|
typedef struct { uint32_t hi, lo; } msr_t;
|
||||||
msr_t rdmsr(int addr);
|
msr_t rdmsr(int addr);
|
||||||
int wrmsr(int addr, msr_t msr);
|
int wrmsr(int addr, msr_t msr);
|
||||||
@ -307,6 +307,16 @@ typedef struct { uint32_t hi, lo; } msr_t;
|
|||||||
msr_t freebsd_rdmsr(int addr);
|
msr_t freebsd_rdmsr(int addr);
|
||||||
int freebsd_wrmsr(int addr, msr_t msr);
|
int freebsd_wrmsr(int addr, msr_t msr);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__LIBPAYLOAD__)
|
||||||
|
#include <arch/io.h>
|
||||||
|
#include <arch/msr.h>
|
||||||
|
typedef struct { uint32_t hi, lo; } msr_t;
|
||||||
|
msr_t libpayload_rdmsr(int addr);
|
||||||
|
int libpayload_wrmsr(int addr, msr_t msr);
|
||||||
|
#undef rdmsr
|
||||||
|
#define rdmsr libpayload_rdmsr
|
||||||
|
#define wrmsr libpayload_wrmsr
|
||||||
|
#endif
|
||||||
|
|
||||||
#elif defined(__powerpc__) || defined(__powerpc64__) || defined(__ppc__) || defined(__ppc64__)
|
#elif defined(__powerpc__) || defined(__powerpc64__) || defined(__ppc__) || defined(__ppc64__)
|
||||||
|
|
||||||
|
2
layout.c
2
layout.c
@ -134,6 +134,7 @@ int show_id(uint8_t *bios, int size, int force)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __LIBPAYLOAD__
|
||||||
int read_romlayout(char *name)
|
int read_romlayout(char *name)
|
||||||
{
|
{
|
||||||
FILE *romlayout;
|
FILE *romlayout;
|
||||||
@ -181,6 +182,7 @@ int read_romlayout(char *name)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int find_romentry(char *name)
|
int find_romentry(char *name)
|
||||||
{
|
{
|
||||||
|
41
physmap.c
41
physmap.c
@ -28,7 +28,7 @@
|
|||||||
#include "flash.h"
|
#include "flash.h"
|
||||||
|
|
||||||
/* Do we need any file access or ioctl for physmap or MSR? */
|
/* Do we need any file access or ioctl for physmap or MSR? */
|
||||||
#if !defined(__DJGPP__)
|
#if !defined(__DJGPP__) && !defined(__LIBPAYLOAD__)
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
@ -104,6 +104,31 @@ void physunmap(void *virt_addr, size_t len)
|
|||||||
__dpmi_free_physical_address_mapping(&mi);
|
__dpmi_free_physical_address_mapping(&mi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif defined(__LIBPAYLOAD__)
|
||||||
|
#include <arch/virtual.h>
|
||||||
|
|
||||||
|
#define MEM_DEV ""
|
||||||
|
|
||||||
|
void *sys_physmap(unsigned long phys_addr, size_t len)
|
||||||
|
{
|
||||||
|
return (void*)phys_to_virt(phys_addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define sys_physmap_rw_uncached sys_physmap
|
||||||
|
#define sys_physmap_ro_cached sys_physmap
|
||||||
|
|
||||||
|
void physunmap(void *virt_addr, size_t len)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int setup_cpu_msr(int cpu)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cleanup_cpu_msr(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
#elif defined(__DARWIN__)
|
#elif defined(__DARWIN__)
|
||||||
|
|
||||||
#include <DirectIO/darwinio.h>
|
#include <DirectIO/darwinio.h>
|
||||||
@ -453,6 +478,20 @@ void cleanup_cpu_msr(void)
|
|||||||
{
|
{
|
||||||
// Nothing, yet.
|
// Nothing, yet.
|
||||||
}
|
}
|
||||||
|
#elif defined(__LIBPAYLOAD__)
|
||||||
|
msr_t libpayload_rdmsr(int addr)
|
||||||
|
{
|
||||||
|
msr_t msr;
|
||||||
|
unsigned long long val = _rdmsr(addr);
|
||||||
|
msr.lo = val & 0xffffffff;
|
||||||
|
msr.hi = val >> 32;
|
||||||
|
return msr;
|
||||||
|
}
|
||||||
|
|
||||||
|
int libpayload_wrmsr(int addr, msr_t msr)
|
||||||
|
{
|
||||||
|
_wrmsr(addr, msr.lo | ((unsigned long long)msr.hi << 32));
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
msr_t rdmsr(int addr)
|
msr_t rdmsr(int addr)
|
||||||
{
|
{
|
||||||
|
14
udelay.c
14
udelay.c
@ -19,6 +19,8 @@
|
|||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef __LIBPAYLOAD__
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -179,3 +181,15 @@ void internal_delay(int usecs)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
void myusec_calibrate_delay(void)
|
||||||
|
{
|
||||||
|
get_cpu_speed();
|
||||||
|
}
|
||||||
|
|
||||||
|
void internal_delay(int usecs)
|
||||||
|
{
|
||||||
|
udelay(usecs);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user