.. | .. |
---|
10 | 10 | #include <boot_rkimg.h> |
---|
11 | 11 | #include <nand.h> |
---|
12 | 12 | #include <part.h> |
---|
| 13 | +#include <fdt_support.h> |
---|
13 | 14 | |
---|
14 | 15 | /* tag for vendor check */ |
---|
15 | 16 | #define VENDOR_TAG 0x524B5644 |
---|
.. | .. |
---|
20 | 21 | /* align to 64 bytes */ |
---|
21 | 22 | #define VENDOR_BTYE_ALIGN 0x3F |
---|
22 | 23 | #define VENDOR_BLOCK_SIZE 512 |
---|
| 24 | + |
---|
| 25 | +#define PAGE_ALGIN_SIZE (4096uL) |
---|
| 26 | +#define PAGE_ALGIN_MASK (~(PAGE_ALGIN_SIZE - 1)) |
---|
23 | 27 | |
---|
24 | 28 | /* --- Emmc define --- */ |
---|
25 | 29 | /* Starting address of the Vendor in memory. */ |
---|
.. | .. |
---|
493 | 497 | /* Initialize */ |
---|
494 | 498 | bootdev_type = dev_desc->if_type; |
---|
495 | 499 | |
---|
496 | | - /* Always use, no need to release */ |
---|
497 | | - buffer = (u8 *)malloc(size); |
---|
| 500 | + /* Always use, no need to release, align to page size for kerenl reserved memory */ |
---|
| 501 | + buffer = (u8 *)memalign(PAGE_ALGIN_SIZE, size); |
---|
498 | 502 | if (!buffer) { |
---|
499 | 503 | printf("[Vendor ERROR]:Malloc failed!\n"); |
---|
500 | 504 | ret = -ENOMEM; |
---|
501 | 505 | goto out; |
---|
502 | 506 | } |
---|
| 507 | + |
---|
503 | 508 | /* Pointer initialization */ |
---|
504 | 509 | vendor_info.hdr = (struct vendor_hdr *)buffer; |
---|
505 | 510 | vendor_info.item = (struct vendor_item *)(buffer + sizeof(struct vendor_hdr)); |
---|
.. | .. |
---|
566 | 571 | return ret; |
---|
567 | 572 | } |
---|
568 | 573 | |
---|
| 574 | +void vendor_storage_fixup(void *blob) |
---|
| 575 | +{ |
---|
| 576 | + unsigned long size; |
---|
| 577 | + unsigned long start; |
---|
| 578 | + ulong offset; |
---|
| 579 | + |
---|
| 580 | + /* init vendor storage */ |
---|
| 581 | + if (!bootdev_type) { |
---|
| 582 | + if (vendor_storage_init() < 0) |
---|
| 583 | + return; |
---|
| 584 | + } |
---|
| 585 | + |
---|
| 586 | + offset = fdt_node_offset_by_compatible(blob, 0, "rockchip,vendor-storage-rm"); |
---|
| 587 | + if (offset >= 0) { |
---|
| 588 | + start = (unsigned long)vendor_info.hdr; |
---|
| 589 | + size = (unsigned long)((void *)vendor_info.version2 - (void *)vendor_info.hdr); |
---|
| 590 | + size += 4; |
---|
| 591 | + fdt_update_reserved_memory(blob, "rockchip,vendor-storage-rm", |
---|
| 592 | + (u64)start, |
---|
| 593 | + (u64)size); |
---|
| 594 | + } |
---|
| 595 | +} |
---|
| 596 | + |
---|
569 | 597 | /* |
---|
570 | 598 | * @id: item id, first 4 id is occupied: |
---|
571 | 599 | * VENDOR_SN_ID |
---|