xref: /rk3399_rockchip-uboot/arch/x86/lib/tables.c (revision 7f5df8d42d8eb0fbdb6bf168fd530aa0f01b99c7)
15e2400e8SBin Meng /*
25e2400e8SBin Meng  * Copyright (C) 2015, Bin Meng <bmeng.cn@gmail.com>
35e2400e8SBin Meng  *
45e2400e8SBin Meng  * SPDX-License-Identifier:	GPL-2.0+
55e2400e8SBin Meng  */
65e2400e8SBin Meng 
75e2400e8SBin Meng #include <common.h>
86388e357SSimon Glass #include <asm/sfi.h>
95e2400e8SBin Meng #include <asm/tables.h>
105e2400e8SBin Meng 
115e2400e8SBin Meng u8 table_compute_checksum(void *v, int len)
125e2400e8SBin Meng {
135e2400e8SBin Meng 	u8 *bytes = v;
145e2400e8SBin Meng 	u8 checksum = 0;
155e2400e8SBin Meng 	int i;
165e2400e8SBin Meng 
175e2400e8SBin Meng 	for (i = 0; i < len; i++)
185e2400e8SBin Meng 		checksum -= bytes[i];
195e2400e8SBin Meng 
205e2400e8SBin Meng 	return checksum;
215e2400e8SBin Meng }
225e2400e8SBin Meng 
23*7f5df8d4SBin Meng void table_fill_string(char *dest, const char *src, size_t n, char pad)
24*7f5df8d4SBin Meng {
25*7f5df8d4SBin Meng 	int start, len;
26*7f5df8d4SBin Meng 	int i;
27*7f5df8d4SBin Meng 
28*7f5df8d4SBin Meng 	strncpy(dest, src, n);
29*7f5df8d4SBin Meng 
30*7f5df8d4SBin Meng 	/* Fill the remaining bytes with pad */
31*7f5df8d4SBin Meng 	len = strlen(src);
32*7f5df8d4SBin Meng 	start = len < n ? len : n;
33*7f5df8d4SBin Meng 	for (i = start; i < n; i++)
34*7f5df8d4SBin Meng 		dest[i] = pad;
35*7f5df8d4SBin Meng }
36*7f5df8d4SBin Meng 
375e2400e8SBin Meng void write_tables(void)
385e2400e8SBin Meng {
395e2400e8SBin Meng 	u32 __maybe_unused rom_table_end = ROM_TABLE_ADDR;
405e2400e8SBin Meng 
41cc4c8acaSBin Meng #ifdef CONFIG_GENERATE_PIRQ_TABLE
425e2400e8SBin Meng 	rom_table_end = write_pirq_routing_table(rom_table_end);
435e2400e8SBin Meng 	rom_table_end = ALIGN(rom_table_end, 1024);
445e2400e8SBin Meng #endif
456388e357SSimon Glass #ifdef CONFIG_GENERATE_SFI_TABLE
466388e357SSimon Glass 	rom_table_end = write_sfi_table(rom_table_end);
476388e357SSimon Glass 	rom_table_end = ALIGN(rom_table_end, 1024);
486388e357SSimon Glass #endif
495e2400e8SBin Meng }
50