Platform setup via DTS
Anton D. Kachalov
mouse at yandex-team.ru
Thu Aug 11 21:27:55 AEST 2016
I would like to start a little discussion around board setup process in arch/arm/mach-aspeed/aspeed.c.
For most cases this process is "flat": just modifying regs one-by-one. Sometimes with applying mask.
I have an idea to add an array of "instructions" to the Device Tree in the following manner
(I hope dtc's preprocess via cpp resolve ORed macro in the correct way):
==========
#include <dt-bindings/soc/aspeed.h>
/ {
model = "Our HW";
compatible = "aspeed,ast2400";
board-setup = <WR, AST_BASE_LPC | 0x9c, 0x02010023, 0>,
<WR, AST_BASE_SCU, SCU_PASSWORD, 0>,
<WR, AST_BASE_SCU | 0x80, 0xcb000000, 0>,
...
/* write(read() | 0x1000) */
<OR, AST_BASE_SCU | 0x2c, 0x00001000, 0>,
/* write((read() &~ 0x2000) | 0x1000) */
<OR, AST_BASE_SCU | 0x2c, 0x00001000, 0x2000>;
==========
or in less talkative way:
==========
/* write((read() &~ 0) | 0xcb000000) */
<AST_BASE_SCU | 0x80, 0xcb000000, 0>,
...
/* write((read() &~ 0x1000) | 0x1000) */
<AST_BASE_SCU | 0x2c, 0x00001000, 0x1000>,
==========
to completely eliminate board-specific init functions.
--
Anton D. Kachalov
More information about the openbmc
mailing list