Message ID | 20170221051259.18383-2-joel@jms.id.au |
---|---|
State | Superseded, archived |
Headers | show |
On Tue, 2017-02-21 at 15:42 +1030, Joel Stanley wrote: > This flash_memory region reserved memory region is used by the host<- > >bmc > mailbox daemon. > > The vga_memory region is for the host processor's framebuffer when > using > the Aspeed as a PCI graphics device. We reserve the maximum region to > protect against bad host drivers. In the future this should > correspond > to the amount of memory we've told the host it can use. > > These numbers were generated as follows for Zaius: > > $ genmem.py --ram-base 0x80000000 --ram 1G --flash 64M > > And for Romulus and Witherspoon: > > $ genmem.py --ram-base 0x80000000 --ram 512M --flash 64M --vga 64M > > With this script: > > def convert_one(s): > suffixes = [ > ('K', 1024), > ('M', (1024*1024)), > ('G', (1024*1024*1024)), > ('T', (1024*1024*1024*1024)), > ('th', 1000), > ('mi', (1000*1000)), > ('bi', (1000*1000*1000)), > ('tri', (1000*1000*1000*1000)) > ] > > s = s.strip() > > factor = 1 > for suffix, mul in suffixes: > if s.endswith(suffix) or s.endswith(suffix.lower()): > factor = mul > s = s[:-len(suffix)] > break > > val = None > > if s.startswith('0b'): > val = convert_binary(s) > elif s.startswith('0x'): > val = int(s, 16) > else: > for c in 'abcdefABCDEF': > if c in s: > val = int(s, 16) > break > > if val is None: > val = int(s) > > val *= factor > > return val > > import argparse > parser = argparse.ArgumentParser() > parser.add_argument('--ram-base') > parser.add_argument('--ram') > parser.add_argument('--flash') > parser.add_argument('--vga') > > args = parser.parse_args() > base = convert_one(args.ram_base) > size = convert_one(args.ram) > flash_size = convert_one(args.flash) > vga_size = 0 > if args.vga: > vga_size = convert_one(args.vga) > > vga_base = base + size - vga_size > flash_base = base + size - vga_size - flash_size > > if flash_base % flash_size != 0: > print("Error: flash base address not a multiple of window. > Rounding down") > flash_base -= flash_base % flash_size > > print("memory {\r\n\treg = <0x%08x 0x%08x>;\r\n}" % (base, size)) > if vga_size > 0: > print("vga_memory {\r\n\tno-map;\r\n\treg = <0x%08x > 0x%08x>;\r\n}" % (vga_base, vga_base)) > print("flash_memory {\r\n\tno-map;\r\n\treg = <0x%08x 0x%08x>;\r\n}" > % (flash_base, flash_size)) > > Signed-off-by: Joel Stanley <joel@jms.id.au> > --- > arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts | 16 > ++++++++++++++++ > arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts | 9 +++++++-- > arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts | 4 ++-- > 3 files changed, 25 insertions(+), 4 deletions(-) > > diff --git a/arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts > b/arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts > index 58baf87454e2..7293b41239a3 100644 > --- a/arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts > +++ b/arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts > @@ -20,6 +20,22 @@ > reg = <0x80000000 0x20000000>; > }; > > + reserved-memory { > + #address-cells = <1>; > + #size-cells = <1>; > + ranges; > + > + vga_memory: region@9c000000 { > + no-map; > + reg = <0x9c000000 0x04000000>; /* 64M */ > + }; > + > + flash_memory: region@98000000 { > + no-map; > + reg = <0x98000000 0x04000000>; /* 64M */ > + }; > + }; > + > fsi-master { > compatible = "ibm,fsi-master", "ibm,fsi-master- > gpio"; > > diff --git a/arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts > b/arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts > index 2cbdeba88908..1ea8f65c1dab 100644 > --- a/arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts > +++ b/arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts > @@ -25,9 +25,14 @@ > #size-cells = <1>; > ranges; > > - flash_memory: region@94000000 { > + vga_memory: region@9c000000 { > no-map; > - reg = <0x94000000 0x04000000>; /* 64M */ > + reg = <0x9c000000 0x04000000>; /* 64M */ > + }; > + > + flash_memory: region@98000000 { > + no-map; > + reg = <0x98000000 0x04000000>; /* 64M */ > }; > }; > > diff --git a/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts > b/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts > index e1c9b3f4fe44..c3a6a8656b3e 100644 > --- a/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts > +++ b/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts > @@ -25,9 +25,9 @@ > #size-cells = <1>; > ranges; > > - flash_memory: region@94000000 { > + flash_memory: region@bc000000 { > no-map; > - reg = <0x94000000 0x04000000>; /* 64M */ > + reg = <0xbc000000 0x04000000>; /* 64M */ > }; > }; > FWIW: Reviewed-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com>
Hi Joel, On Tue, Feb 21, 2017 at 1:12 PM, Joel Stanley <joel@jms.id.au> wrote: > This flash_memory region reserved memory region is used by the host<->bmc > mailbox daemon. > > The vga_memory region is for the host processor's framebuffer when using > the Aspeed as a PCI graphics device. We reserve the maximum region to > protect against bad host drivers. In the future this should correspond > to the amount of memory we've told the host it can use. > > These numbers were generated as follows for Zaius: > > $ genmem.py --ram-base 0x80000000 --ram 1G --flash 64M > > And for Romulus and Witherspoon: > > $ genmem.py --ram-base 0x80000000 --ram 512M --flash 64M --vga 64M > > With this script: > > def convert_one(s): > suffixes = [ > ('K', 1024), > ('M', (1024*1024)), > ('G', (1024*1024*1024)), > ('T', (1024*1024*1024*1024)), > ('th', 1000), > ('mi', (1000*1000)), > ('bi', (1000*1000*1000)), > ('tri', (1000*1000*1000*1000)) > ] > > s = s.strip() > > factor = 1 > for suffix, mul in suffixes: > if s.endswith(suffix) or s.endswith(suffix.lower()): > factor = mul > s = s[:-len(suffix)] > break > > val = None > > if s.startswith('0b'): > val = convert_binary(s) > elif s.startswith('0x'): > val = int(s, 16) > else: > for c in 'abcdefABCDEF': > if c in s: > val = int(s, 16) > break > > if val is None: > val = int(s) > > val *= factor > > return val > > import argparse > parser = argparse.ArgumentParser() > parser.add_argument('--ram-base') > parser.add_argument('--ram') > parser.add_argument('--flash') > parser.add_argument('--vga') > > args = parser.parse_args() > base = convert_one(args.ram_base) > size = convert_one(args.ram) > flash_size = convert_one(args.flash) > vga_size = 0 > if args.vga: > vga_size = convert_one(args.vga) > > vga_base = base + size - vga_size > flash_base = base + size - vga_size - flash_size > > if flash_base % flash_size != 0: > print("Error: flash base address not a multiple of window. Rounding down") > flash_base -= flash_base % flash_size > > print("memory {\r\n\treg = <0x%08x 0x%08x>;\r\n}" % (base, size)) > if vga_size > 0: > print("vga_memory {\r\n\tno-map;\r\n\treg = <0x%08x 0x%08x>;\r\n}" % (vga_base, vga_base)) > print("flash_memory {\r\n\tno-map;\r\n\treg = <0x%08x 0x%08x>;\r\n}" % (flash_base, flash_size)) > > Signed-off-by: Joel Stanley <joel@jms.id.au> > --- > arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts | 16 ++++++++++++++++ > arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts | 9 +++++++-- > arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts | 4 ++-- > 3 files changed, 25 insertions(+), 4 deletions(-) > > diff --git a/arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts b/arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts > index 58baf87454e2..7293b41239a3 100644 > --- a/arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts > +++ b/arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts > @@ -20,6 +20,22 @@ > reg = <0x80000000 0x20000000>; > }; > > + reserved-memory { > + #address-cells = <1>; > + #size-cells = <1>; > + ranges; > + > + vga_memory: region@9c000000 { > + no-map; > + reg = <0x9c000000 0x04000000>; /* 64M */ > + }; > + > + flash_memory: region@98000000 { > + no-map; > + reg = <0x98000000 0x04000000>; /* 64M */ > + }; > + }; > + > fsi-master { > compatible = "ibm,fsi-master", "ibm,fsi-master-gpio"; > > diff --git a/arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts b/arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts > index 2cbdeba88908..1ea8f65c1dab 100644 > --- a/arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts > +++ b/arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts > @@ -25,9 +25,14 @@ > #size-cells = <1>; > ranges; > > - flash_memory: region@94000000 { > + vga_memory: region@9c000000 { > no-map; > - reg = <0x94000000 0x04000000>; /* 64M */ > + reg = <0x9c000000 0x04000000>; /* 64M */ > + }; > + > + flash_memory: region@98000000 { > + no-map; > + reg = <0x98000000 0x04000000>; /* 64M */ > }; > }; > > diff --git a/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts b/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts > index e1c9b3f4fe44..c3a6a8656b3e 100644 > --- a/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts > +++ b/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts > @@ -25,9 +25,9 @@ > #size-cells = <1>; > ranges; > > - flash_memory: region@94000000 { > + flash_memory: region@bc000000 { > no-map; > - reg = <0x94000000 0x04000000>; /* 64M */ > + reg = <0xbc000000 0x04000000>; /* 64M */ For Zaius with 512MiB RAM (what I saw in Foxconn), the memory size will be adjusted by Uboot, which is OK. Will this reserved memory be adjusted from 0xbc000000 to 0x9c000000? > }; > }; > > -- > 2.11.0 >
On Thu, Feb 23, 2017 at 2:04 PM, Mine <mine260309@gmail.com> wrote: >> - flash_memory: region@94000000 { >> + flash_memory: region@bc000000 { >> no-map; >> - reg = <0x94000000 0x04000000>; /* 64M */ >> + reg = <0xbc000000 0x04000000>; /* 64M */ > > For Zaius with 512MiB RAM (what I saw in Foxconn), the memory size > will be adjusted by Uboot, > which is OK. > Will this reserved memory be adjusted from 0xbc000000 to 0x9c000000? You raise an issue I have been thinking about. u-boot currently adjusts the /memory node to account for the VGA framebuffer. We could instead have it populate a reserved-memory region. A compromise (for cases where the u-boot hasn't been updated, or the user is testing in Qemu without u-boot) would be to have the node in the device tree set to a default value and get u-boot to update it to the same as the strapping. Cheers, Joel
Hi Mine, On Wed, Feb 22, 2017 at 7:34 PM, Mine <mine260309@gmail.com> wrote: >> diff --git a/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts b/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts >> index e1c9b3f4fe44..c3a6a8656b3e 100644 >> --- a/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts >> +++ b/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts >> @@ -25,9 +25,9 @@ >> #size-cells = <1>; >> ranges; >> >> - flash_memory: region@94000000 { >> + flash_memory: region@bc000000 { >> no-map; >> - reg = <0x94000000 0x04000000>; /* 64M */ >> + reg = <0xbc000000 0x04000000>; /* 64M */ > > For Zaius with 512MiB RAM (what I saw in Foxconn), the memory size > will be adjusted by Uboot, > which is OK. > Will this reserved memory be adjusted from 0xbc000000 to 0x9c000000? We have no plans to use RAM size other than 1 GiB for Zaius BMC. Can you please explain what you saw at Foxconn? thanks xo
Hi Xo, I got confirmation that Zaius does use 1GiB RAM. Please ignore my previous comment. -- BRs, Lei YU On Fri, Feb 24, 2017 at 2:36 AM, Xo Wang <xow@google.com> wrote: > Hi Mine, > > On Wed, Feb 22, 2017 at 7:34 PM, Mine <mine260309@gmail.com> wrote: >>> diff --git a/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts b/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts >>> index e1c9b3f4fe44..c3a6a8656b3e 100644 >>> --- a/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts >>> +++ b/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts >>> @@ -25,9 +25,9 @@ >>> #size-cells = <1>; >>> ranges; >>> >>> - flash_memory: region@94000000 { >>> + flash_memory: region@bc000000 { >>> no-map; >>> - reg = <0x94000000 0x04000000>; /* 64M */ >>> + reg = <0xbc000000 0x04000000>; /* 64M */ >> >> For Zaius with 512MiB RAM (what I saw in Foxconn), the memory size >> will be adjusted by Uboot, >> which is OK. >> Will this reserved memory be adjusted from 0xbc000000 to 0x9c000000? > > We have no plans to use RAM size other than 1 GiB for Zaius BMC. Can > you please explain what you saw at Foxconn? > > thanks > xo
diff --git a/arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts b/arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts index 58baf87454e2..7293b41239a3 100644 --- a/arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts +++ b/arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts @@ -20,6 +20,22 @@ reg = <0x80000000 0x20000000>; }; + reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + vga_memory: region@9c000000 { + no-map; + reg = <0x9c000000 0x04000000>; /* 64M */ + }; + + flash_memory: region@98000000 { + no-map; + reg = <0x98000000 0x04000000>; /* 64M */ + }; + }; + fsi-master { compatible = "ibm,fsi-master", "ibm,fsi-master-gpio"; diff --git a/arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts b/arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts index 2cbdeba88908..1ea8f65c1dab 100644 --- a/arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts +++ b/arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts @@ -25,9 +25,14 @@ #size-cells = <1>; ranges; - flash_memory: region@94000000 { + vga_memory: region@9c000000 { no-map; - reg = <0x94000000 0x04000000>; /* 64M */ + reg = <0x9c000000 0x04000000>; /* 64M */ + }; + + flash_memory: region@98000000 { + no-map; + reg = <0x98000000 0x04000000>; /* 64M */ }; }; diff --git a/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts b/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts index e1c9b3f4fe44..c3a6a8656b3e 100644 --- a/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts +++ b/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts @@ -25,9 +25,9 @@ #size-cells = <1>; ranges; - flash_memory: region@94000000 { + flash_memory: region@bc000000 { no-map; - reg = <0x94000000 0x04000000>; /* 64M */ + reg = <0xbc000000 0x04000000>; /* 64M */ }; };
This flash_memory region reserved memory region is used by the host<->bmc mailbox daemon. The vga_memory region is for the host processor's framebuffer when using the Aspeed as a PCI graphics device. We reserve the maximum region to protect against bad host drivers. In the future this should correspond to the amount of memory we've told the host it can use. These numbers were generated as follows for Zaius: $ genmem.py --ram-base 0x80000000 --ram 1G --flash 64M And for Romulus and Witherspoon: $ genmem.py --ram-base 0x80000000 --ram 512M --flash 64M --vga 64M With this script: def convert_one(s): suffixes = [ ('K', 1024), ('M', (1024*1024)), ('G', (1024*1024*1024)), ('T', (1024*1024*1024*1024)), ('th', 1000), ('mi', (1000*1000)), ('bi', (1000*1000*1000)), ('tri', (1000*1000*1000*1000)) ] s = s.strip() factor = 1 for suffix, mul in suffixes: if s.endswith(suffix) or s.endswith(suffix.lower()): factor = mul s = s[:-len(suffix)] break val = None if s.startswith('0b'): val = convert_binary(s) elif s.startswith('0x'): val = int(s, 16) else: for c in 'abcdefABCDEF': if c in s: val = int(s, 16) break if val is None: val = int(s) val *= factor return val import argparse parser = argparse.ArgumentParser() parser.add_argument('--ram-base') parser.add_argument('--ram') parser.add_argument('--flash') parser.add_argument('--vga') args = parser.parse_args() base = convert_one(args.ram_base) size = convert_one(args.ram) flash_size = convert_one(args.flash) vga_size = 0 if args.vga: vga_size = convert_one(args.vga) vga_base = base + size - vga_size flash_base = base + size - vga_size - flash_size if flash_base % flash_size != 0: print("Error: flash base address not a multiple of window. Rounding down") flash_base -= flash_base % flash_size print("memory {\r\n\treg = <0x%08x 0x%08x>;\r\n}" % (base, size)) if vga_size > 0: print("vga_memory {\r\n\tno-map;\r\n\treg = <0x%08x 0x%08x>;\r\n}" % (vga_base, vga_base)) print("flash_memory {\r\n\tno-map;\r\n\treg = <0x%08x 0x%08x>;\r\n}" % (flash_base, flash_size)) Signed-off-by: Joel Stanley <joel@jms.id.au> --- arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts | 16 ++++++++++++++++ arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts | 9 +++++++-- arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts | 4 ++-- 3 files changed, 25 insertions(+), 4 deletions(-)