From: Simon Glass Date: Mon, 16 Jan 2017 14:03:35 +0000 (-0700) Subject: x86: Use unsigned long for address in table generation X-Git-Url: http://git.dujemihanovic.xyz/?a=commitdiff_plain;h=42fd8c19b58fe8f8fe7559ea53b1cef12fc06240;p=u-boot.git 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 Reviewed-by: Bin Meng --- diff --git a/arch/x86/cpu/irq.c b/arch/x86/cpu/irq.c index 9364410a0f..e3e928bb79 100644 --- a/arch/x86/cpu/irq.c +++ b/arch/x86/cpu/irq.c @@ -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; diff --git a/arch/x86/include/asm/acpi_table.h b/arch/x86/include/asm/acpi_table.h index caff4d8a1e..bbd80a1dd9 100644 --- a/arch/x86/include/asm/acpi_table.h +++ b/arch/x86/include/asm/acpi_table.h @@ -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); diff --git a/arch/x86/include/asm/mpspec.h b/arch/x86/include/asm/mpspec.h index ad8eba947b..146a4b0cbb 100644 --- a/arch/x86/include/asm/mpspec.h +++ b/arch/x86/include/asm/mpspec.h @@ -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 */ diff --git a/arch/x86/include/asm/sfi.h b/arch/x86/include/asm/sfi.h index d1f0f0cb6b..d6c44c978a 100644 --- a/arch/x86/include/asm/sfi.h +++ b/arch/x86/include/asm/sfi.h @@ -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 */ diff --git a/arch/x86/include/asm/tables.h b/arch/x86/include/asm/tables.h index 81f98f2774..d1b2388021 100644 --- a/arch/x86/include/asm/tables.h +++ b/arch/x86/include/asm/tables.h @@ -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_ */ diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c index 7001e8ba34..355456dc19 100644 --- a/arch/x86/lib/acpi_table.c +++ b/arch/x86/lib/acpi_table.c @@ -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; diff --git a/arch/x86/lib/mpspec.c b/arch/x86/lib/mpspec.c index 6ab43f1055..516d7b3452 100644 --- a/arch/x86/lib/mpspec.c +++ b/arch/x86/lib/mpspec.c @@ -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; diff --git a/arch/x86/lib/sfi.c b/arch/x86/lib/sfi.c index 3d3658088a..507e037b99 100644 --- a/arch/x86/lib/sfi.c +++ b/arch/x86/lib/sfi.c @@ -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; diff --git a/arch/x86/lib/tables.c b/arch/x86/lib/tables.c index 5966e5862a..4f5fe74288 100644 --- a/arch/x86/lib/tables.c +++ b/arch/x86/lib/tables.c @@ -12,20 +12,13 @@ #include #include -#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 }; diff --git a/arch/x86/lib/zimage.c b/arch/x86/lib/zimage.c index 1b33c77139..b6b0f2beb3 100644 --- a/arch/x86/lib/zimage.c +++ b/arch/x86/lib/zimage.c @@ -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); diff --git a/drivers/misc/qfw.c b/drivers/misc/qfw.c index d43d1d300a..a8af9e0c53 100644 --- a/drivers/misc/qfw.c +++ b/drivers/misc/qfw.c @@ -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; diff --git a/include/smbios.h b/include/smbios.h index d582d4f7ab..c24d00e38d 100644 --- a/include/smbios.h +++ b/include/smbios.h @@ -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_ */ diff --git a/lib/smbios.c b/lib/smbios.c index ce1974d86f..22ca247fec 100644 --- a/lib/smbios.c +++ b/lib/smbios.c @@ -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; }