x86: Use unsigned long for address in table generation

We should use unsigned long rather than u32 for addresses. Update this so
that the table-generation code builds correctly on 64-bit machines.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
Simon Glass 2017-01-16 07:03:35 -07:00 committed by Bin Meng
parent 0ec28e0266
commit 42fd8c19b5
13 changed files with 29 additions and 36 deletions

View File

@ -264,7 +264,7 @@ int irq_router_probe(struct udevice *dev)
return irq_router_common_init(dev);
}
u32 write_pirq_routing_table(u32 addr)
ulong write_pirq_routing_table(ulong addr)
{
if (!pirq_routing_table)
return addr;

View File

@ -316,4 +316,4 @@ int acpi_create_madt_lapic_nmi(struct acpi_madt_lapic_nmi *lapic_nmi,
u8 cpu, u16 flags, u8 lint);
u32 acpi_fill_madt(u32 current);
void acpi_create_gnvs(struct acpi_global_nvs *gnvs);
u32 write_acpi_tables(u32 start);
ulong write_acpi_tables(ulong start);

View File

@ -456,6 +456,6 @@ int mp_determine_pci_dstirq(int bus, int dev, int func, int pirq);
* @addr: start address to write MP table
* @return: end address of MP table
*/
u32 write_mp_table(u32 addr);
ulong write_mp_table(ulong addr);
#endif /* __ASM_MPSPEC_H */

View File

@ -132,6 +132,6 @@ typedef int (*sfi_table_handler) (struct sfi_table_header *table);
* @base: Address to write table to
* @return address to use for the next table
*/
u32 write_sfi_table(u32 base);
ulong write_sfi_table(ulong base);
#endif /*_LINUX_SFI_H */

View File

@ -65,6 +65,6 @@ void write_tables(void);
* @start: start address to write PIRQ routing table
* @return: end address of PIRQ routing table
*/
u32 write_pirq_routing_table(u32 start);
ulong write_pirq_routing_table(ulong start);
#endif /* _X86_TABLES_H_ */

View File

@ -327,7 +327,7 @@ static void enter_acpi_mode(int pm1_cnt)
* QEMU's version of write_acpi_tables is defined in
* arch/x86/cpu/qemu/acpi_table.c
*/
u32 write_acpi_tables(u32 start)
ulong write_acpi_tables(ulong start)
{
u32 current;
struct acpi_rsdp *rsdp;
@ -345,7 +345,7 @@ u32 write_acpi_tables(u32 start)
/* Align ACPI tables to 16 byte */
current = ALIGN(current, 16);
debug("ACPI: Writing ACPI tables at %x\n", start);
debug("ACPI: Writing ACPI tables at %lx\n", start);
/* We need at least an RSDP and an RSDT Table */
rsdp = (struct acpi_rsdp *)current;

View File

@ -365,7 +365,7 @@ static void mptable_add_lintsrc(struct mp_config_table *mc, int bus_isa)
bus_isa, 0, MP_APIC_ALL, 1);
}
u32 write_mp_table(u32 addr)
ulong write_mp_table(ulong addr)
{
struct mp_config_table *mc;
int ioapic_id, ioapic_ver;

View File

@ -38,14 +38,14 @@ static void *get_entry_start(struct table_info *tab)
tab->table[tab->count] = tab->entry_start;
tab->entry_start += sizeof(struct sfi_table_header);
return (void *)tab->entry_start;
return (void *)(uintptr_t)tab->entry_start;
}
static void finish_table(struct table_info *tab, const char *sig, void *entry)
{
struct sfi_table_header *hdr;
hdr = (struct sfi_table_header *)(tab->base + tab->ptr);
hdr = (struct sfi_table_header *)(uintptr_t)(tab->base + tab->ptr);
strcpy(hdr->sig, sig);
hdr->len = sizeof(*hdr) + ((ulong)entry - tab->entry_start);
hdr->rev = 1;
@ -131,7 +131,7 @@ static int sfi_write_xsdt(struct table_info *tab)
return 0;
}
u32 write_sfi_table(u32 base)
ulong write_sfi_table(ulong base)
{
struct table_info table;

View File

@ -12,20 +12,13 @@
#include <asm/acpi_table.h>
#include <asm/coreboot_tables.h>
#ifdef CONFIG_GENERATE_SMBIOS_TABLE
static u32 write_smbios_table_wrapper(u32 addr)
{
return write_smbios_table(addr);
}
#endif
/**
* Function prototype to write a specific configuration table
*
* @addr: start address to write the table
* @return: end address of the table
*/
typedef u32 (*table_write)(u32 addr);
typedef ulong (*table_write)(ulong addr);
static table_write table_write_funcs[] = {
#ifdef CONFIG_GENERATE_PIRQ_TABLE
@ -41,7 +34,7 @@ static table_write table_write_funcs[] = {
write_acpi_tables,
#endif
#ifdef CONFIG_GENERATE_SMBIOS_TABLE
write_smbios_table_wrapper,
write_smbios_table,
#endif
};

View File

@ -165,7 +165,7 @@ struct boot_params *load_zimage(char *image, unsigned long kernel_size,
* A very old kernel MUST have its real-mode code
* loaded at 0x90000
*/
if ((u32)setup_base != 0x90000) {
if ((ulong)setup_base != 0x90000) {
/* Copy the real-mode kernel */
memmove((void *)0x90000, setup_base, setup_size);

View File

@ -32,7 +32,7 @@ static LIST_HEAD(fw_list);
* be ignored.
* @return: 0 on success, or negative value on failure
*/
static int bios_linker_allocate(struct bios_linker_entry *entry, u32 *addr)
static int bios_linker_allocate(struct bios_linker_entry *entry, ulong *addr)
{
uint32_t size, align;
struct fw_file *file;
@ -147,7 +147,7 @@ static int bios_linker_add_checksum(struct bios_linker_entry *entry)
}
/* This function loads and patches ACPI tables provided by QEMU */
u32 write_acpi_tables(u32 addr)
ulong write_acpi_tables(ulong addr)
{
int i, ret = 0;
struct fw_file *file;

View File

@ -225,7 +225,7 @@ static inline void fill_smbios_header(void *table, int type,
* @handle: the structure's handle, a unique 16-bit number
* @return: size of the structure
*/
typedef int (*smbios_write_type)(uintptr_t *addr, int handle);
typedef int (*smbios_write_type)(ulong *addr, int handle);
/**
* write_smbios_table() - Write SMBIOS table
@ -235,6 +235,6 @@ typedef int (*smbios_write_type)(uintptr_t *addr, int handle);
* @addr: start address to write SMBIOS table
* @return: end address of SMBIOS table
*/
uintptr_t write_smbios_table(uintptr_t addr);
ulong write_smbios_table(ulong addr);
#endif /* _SMBIOS_H_ */

View File

@ -73,7 +73,7 @@ static int smbios_string_table_len(char *start)
return len + 1;
}
static int smbios_write_type0(uintptr_t *current, int handle)
static int smbios_write_type0(ulong *current, int handle)
{
struct smbios_type0 *t = (struct smbios_type0 *)*current;
int len = sizeof(struct smbios_type0);
@ -108,7 +108,7 @@ static int smbios_write_type0(uintptr_t *current, int handle)
return len;
}
static int smbios_write_type1(uintptr_t *current, int handle)
static int smbios_write_type1(ulong *current, int handle)
{
struct smbios_type1 *t = (struct smbios_type1 *)*current;
int len = sizeof(struct smbios_type1);
@ -129,7 +129,7 @@ static int smbios_write_type1(uintptr_t *current, int handle)
return len;
}
static int smbios_write_type2(uintptr_t *current, int handle)
static int smbios_write_type2(ulong *current, int handle)
{
struct smbios_type2 *t = (struct smbios_type2 *)*current;
int len = sizeof(struct smbios_type2);
@ -147,7 +147,7 @@ static int smbios_write_type2(uintptr_t *current, int handle)
return len;
}
static int smbios_write_type3(uintptr_t *current, int handle)
static int smbios_write_type3(ulong *current, int handle)
{
struct smbios_type3 *t = (struct smbios_type3 *)*current;
int len = sizeof(struct smbios_type3);
@ -199,7 +199,7 @@ static void smbios_write_type4_dm(struct smbios_type4 *t)
t->processor_version = smbios_add_string(t->eos, name);
}
static int smbios_write_type4(uintptr_t *current, int handle)
static int smbios_write_type4(ulong *current, int handle)
{
struct smbios_type4 *t = (struct smbios_type4 *)*current;
int len = sizeof(struct smbios_type4);
@ -221,7 +221,7 @@ static int smbios_write_type4(uintptr_t *current, int handle)
return len;
}
static int smbios_write_type32(uintptr_t *current, int handle)
static int smbios_write_type32(ulong *current, int handle)
{
struct smbios_type32 *t = (struct smbios_type32 *)*current;
int len = sizeof(struct smbios_type32);
@ -234,7 +234,7 @@ static int smbios_write_type32(uintptr_t *current, int handle)
return len;
}
static int smbios_write_type127(uintptr_t *current, int handle)
static int smbios_write_type127(ulong *current, int handle)
{
struct smbios_type127 *t = (struct smbios_type127 *)*current;
int len = sizeof(struct smbios_type127);
@ -257,10 +257,10 @@ static smbios_write_type smbios_write_funcs[] = {
smbios_write_type127
};
uintptr_t write_smbios_table(uintptr_t addr)
ulong write_smbios_table(ulong addr)
{
struct smbios_entry *se;
u32 tables;
ulong tables;
int len = 0;
int max_struct_size = 0;
int handle = 0;
@ -271,7 +271,7 @@ uintptr_t write_smbios_table(uintptr_t addr)
/* 16 byte align the table address */
addr = ALIGN(addr, 16);
se = (struct smbios_entry *)addr;
se = (struct smbios_entry *)(uintptr_t)addr;
memset(se, 0, sizeof(struct smbios_entry));
addr += sizeof(struct smbios_entry);
@ -280,7 +280,7 @@ uintptr_t write_smbios_table(uintptr_t addr)
/* populate minimum required tables */
for (i = 0; i < ARRAY_SIZE(smbios_write_funcs); i++) {
int tmp = smbios_write_funcs[i](&addr, handle++);
int tmp = smbios_write_funcs[i]((ulong *)&addr, handle++);
max_struct_size = max(max_struct_size, tmp);
len += tmp;
}