[Skiboot] [PATCH 2/2] astbmc: Enable mbox depending on scratch reg
Joel Stanley
joel at jms.id.au
Tue Mar 6 15:24:19 AEDT 2018
On Wed, Feb 28, 2018 at 4:46 PM, Joel Stanley <joel at jms.id.au> wrote:
> P8 boxes can opt in for mbox pnor support if they set the scratch
> register bit to indicate it is supported.
>
> Signed-off-by: Joel Stanley <joel at jms.id.au>
> ---
I've tested this with the following configurations:
P8 test platform is Palmetto, and P9 test platform is Romulus.
mbox aware BMC, scatch reg set: P9, P8
mbox aware BMC, scratch reg unset: P8, P9
mbox unaware BMC, scratch reg unset: P8
All systems booted using the expected flash access mechanism. For
"fun", you can chose to set/unset the scratch register between boots
and have your host firmware change behaviour.
Cheers,
Joel
> hw/ast-bmc/ast-io.c | 14 ++++++++++++++
> include/ast.h | 1 +
> platforms/astbmc/common.c | 5 +++--
> 3 files changed, 18 insertions(+), 2 deletions(-)
>
> diff --git a/hw/ast-bmc/ast-io.c b/hw/ast-bmc/ast-io.c
> index cd1aba2a177a..964d41513379 100644
> --- a/hw/ast-bmc/ast-io.c
> +++ b/hw/ast-bmc/ast-io.c
> @@ -116,6 +116,7 @@
> */
>
> #define BMC_SIO_SCR29 0x29
> +#define BMC_SIO_SCR29_MBOX 0x08
> #define BMC_SIO_SCR29_MEMBOOT 0x10
>
> enum {
> @@ -427,6 +428,19 @@ bool ast_is_ahb_lpc_pnor(void)
> return !(boot_flags & BMC_SIO_SCR29_MEMBOOT);
> }
>
> +bool ast_scratch_reg_is_mbox(void)
> +{
> + uint8_t boot_version;
> + uint8_t boot_flags;
> +
> + boot_version = bmc_sio_inb(BMC_SIO_SCR28);
> + if (boot_version != BOOT_FLAGS_VERSION)
> + return false;
> +
> + boot_flags = bmc_sio_inb(BMC_SIO_SCR29);
> + return boot_flags & BMC_SIO_SCR29_MBOX;
> +}
> +
> void ast_setup_ibt(uint16_t io_base, uint8_t irq)
> {
> uint32_t v;
> diff --git a/include/ast.h b/include/ast.h
> index 414ff6a3d39a..2c1336b2a79b 100644
> --- a/include/ast.h
> +++ b/include/ast.h
> @@ -82,6 +82,7 @@ int ast_copy_from_ahb(void *dst, uint32_t reg, uint32_t len);
> void ast_io_init(void);
> bool ast_is_ahb_lpc_pnor(void);
> bool ast_is_mbox_pnor(void);
> +bool ast_scratch_reg_is_mbox(void);
>
> /* UART configuration */
>
> diff --git a/platforms/astbmc/common.c b/platforms/astbmc/common.c
> index 243ad9461239..9cf679161e7a 100644
> --- a/platforms/astbmc/common.c
> +++ b/platforms/astbmc/common.c
> @@ -207,8 +207,9 @@ static void astbmc_fixup_dt_mbox(struct dt_node *lpc)
> struct dt_node *mbox;
> char namebuf[32];
>
> - /* All P9 machines have this and no earlier machines do */
> - if (proc_gen != proc_gen_p9)
> + /* All P9 machines use mbox. P8 machines can indicate they support
> + * it using the scratch register */
> + if (proc_gen != proc_gen_p9 && !ast_scratch_reg_is_mbox())
> return;
>
> /* First check if the mbox interface is already there */
> --
> 2.15.1
>
More information about the Skiboot
mailing list