Why not force that in ACPI _CRS directly? And Linux OSPM will reassign the
memory resource base on CRS any way? You can take a reference from any DSDT
or
https://review.coreboot.org/c/coreboot/+/31822/5/src/soc/intel/braswell/acpi/lpc.asl
.

Lance


Rocky Phagura via coreboot <[email protected]> 于2021年1月4日周一 下午2:45写道:

> Hello,
>
> Can anyone provide guidance on the previous email? It seems in bootmem.c,
> the memory is marked type 16, LB_MEM_TABLE.  Is there a way to explicitly
> add an entry (cbmem_add) for reserved memory that is not type 16? Thank you,
>
>
>
>
>
> #define LB_MEM_RAM               1           /* Memory anyone can use */
>
> #define LB_MEM_RESERVED                    2           /* Don't use this
> memory region */
>
> #define LB_MEM_ACPI                3           /* ACPI Tables */
>
> #define LB_MEM_NVS                 4           /* ACPI NVS Memory */
>
> #define LB_MEM_UNUSABLE                   5           /* Unusable address
> space */
>
> #define LB_MEM_VENDOR_RSVD           6           /* Vendor Reserved */
>
> #define LB_MEM_TABLE                           16    /* Ram configuration
> tables are kept in */
>
>
>
>
>
>
>
> *From:* Bryan Angelo <[email protected]>
> *Sent:* Wednesday, September 16, 2020 4:16 PM
> *To:* [email protected]
> *Subject:* [coreboot] Reserve Device DRAM
>
>
>
> I would appreciate any guidance on the proper way to reserve (arbitrary)
> DRAM for a MMIO device in coreboot such that the Linux driver for that
> device is also able to map the reserved DRAM.
>
>
>
> Based on code inspection, my attempt is to add a cbmem entry via
> cbmem_alloc and mark that memory as reserved via reserved_ram_resource in
> the read_resources operation for the device driver.
>
>
>
> static void foo_read_resources(struct device *dev)
>
> {
>
>         void *buf;
>
>         const unsigned long size = 0x8000;
>
>
>
>         if (cbmem_entry_find(CBMEM_ID_FOO))
>
>                 return;
>
>
>
>         buf = cbmem_add(CBMEM_ID_FOO, size);
>
>         if (!buf)
>
>                 return;
>
>
>
>
>         reserved_ram_resource(dev, 0, ((unsigned long)buf) >> 10, size >>
> 10);
>
> }
>
>
>
> I can see that the resource is allocated during resource reading.
>
>
>
> MMIO: fd110500 resource base *8de82000* size 8000 align 0 gran 0 limit 0
> flags f0004200 index 0
>
>
>
> I then pass this resource to the linux driver via an ACPI device entry.
>
>
>
> acpigen_write_name("_CRS");
>
> acpigen_write_resourcetemplate_header();
>
> const struct cbmem_entry *ce = cbmem_entry_find(CBMEM_ID_FOO);
>
> if (ce)
>
>         acpigen_write_mem32fixed(1, (uint32_t)cbmem_entry_start(ce),
> (uint32_t)cbmem_entry_size(ce));
>
>
>
> However, the memory is presented to Linux as "type 16" instead of
> "reserved" in the physical RAM map.
>
>
>
> [    0.000000] BIOS-provided physical RAM map:
>
> [    0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] type
> 16
>
> [    0.000000] BIOS-e820: [mem 0x0000000000001000-0x000000000009ffff]
> usable
>
> [    0.000000] BIOS-e820: [mem 0x00000000000a0000-0x00000000000fffff]
> reserved
>
> [    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000008de34fff]
> usable
>
> *[    0.000000] BIOS-e820: [mem 0x000000008de35000-0x000000008fffffff]
> type 16*
>
> [    0.000000] BIOS-e820: [mem 0x0000000090000000-0x00000000cfffffff]
> reserved
>
> [    0.000000] BIOS-e820: [mem 0x00000000f8000000-0x00000000fbffffff]
> reserved
>
> [    0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000022f33ffff]
> usable
>
> [    0.000000] BIOS-e820: [mem 0x000000022f340000-0x000000022fffffff]
> reserved
>
>
>
> The e820 type 16 is unknown to the linux kernel, causing it to mark the
> region as busy.  This subsequently causes devm_ioremap_resource to fail
> when called on the DRAM address from the ACPI device entry.
>
>
>
> Looking through the code, it seems that coreboot marks the entire cbmem as
> type 16 in bootmem despite my (improper, it would seem) attempt to mark the
> ram as reserved.  What would be the proper way to reserve (arbitrary) DRAM
> for a MMIO device such that the memory is marked as reserved in the BIOS
> physical RAM map?
>
>
>
> Thanks.
> _______________________________________________
> coreboot mailing list -- [email protected]
> To unsubscribe send an email to [email protected]
>
_______________________________________________
coreboot mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to