/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * (C) Copyright 2002
 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 *
 * (C) Copyright 2010
 * Michael Zaidman, Kodak, michael.zaidman@kodak.com
 * post_word_{load|store} cleanup.
 */
#ifndef _POST_H
#define _POST_H

#ifndef	__ASSEMBLY__
#include <asm/io.h>

#if defined(CONFIG_POST)

#ifndef CFG_POST_EXTERNAL_WORD_FUNCS
#ifdef CFG_SYS_POST_WORD_ADDR
#define _POST_WORD_ADDR	CFG_SYS_POST_WORD_ADDR
#else

#if defined(CONFIG_ARCH_MPC8360)
#include <linux/immap_qe.h>
#define _POST_WORD_ADDR	(CONFIG_SYS_IMMR + CPM_POST_WORD_ADDR)

#elif defined (CONFIG_MPC85xx)
#include <asm/immap_85xx.h>
#define _POST_WORD_ADDR	(CONFIG_SYS_IMMR + CFG_SYS_MPC85xx_PIC_OFFSET + \
				offsetof(ccsr_pic_t, tfrr))
#endif

#ifndef _POST_WORD_ADDR
#error "_POST_WORD_ADDR currently not implemented for this platform!"
#endif
#endif /* CFG_SYS_POST_WORD_ADDR */

static inline ulong post_word_load (void)
{
	return in_le32((volatile void *)(_POST_WORD_ADDR));
}

static inline void post_word_store (ulong value)
{
	out_le32((volatile void *)(_POST_WORD_ADDR), value);
}

#else

extern ulong post_word_load(void);
extern void post_word_store(ulong value);

#endif /* CFG_POST_EXTERNAL_WORD_FUNCS */
#endif /* defined (CONFIG_POST) */
#endif /* __ASSEMBLY__ */

#ifdef CONFIG_POST

#define POST_POWERON		0x01	/* test runs on power-on booting */
#define POST_NORMAL		0x02	/* test runs on normal booting */
#define POST_SLOWTEST		0x04	/* test is slow, enabled by key press */
#define POST_POWERTEST		0x08	/* test runs after watchdog reset */

#define POST_COLDBOOT		0x80	/* first boot after power-on */

#define POST_ROM		0x0100	/* test runs in ROM */
#define POST_RAM		0x0200	/* test runs in RAM */
#define POST_MANUAL		0x0400	/* test runs on diag command */
#define POST_REBOOT		0x0800	/* test may cause rebooting */
#define POST_PREREL		0x1000  /* test runs before relocation */

#define POST_CRITICAL		0x2000	/* Use failbootcmd if test failed */
#define POST_STOP		0x4000	/* Interrupt POST sequence on fail */

#define POST_MEM		(POST_RAM | POST_ROM)
#define POST_ALWAYS		(POST_NORMAL	| \
				 POST_SLOWTEST	| \
				 POST_MANUAL	| \
				 POST_POWERON	)

#define POST_FAIL_SAVE		0x80

#define POST_BEFORE		1
#define POST_AFTER		0
#define POST_PASSED		1
#define POST_FAILED		0

#ifndef	__ASSEMBLY__

struct post_test {
	char *name;
	char *cmd;
	char *desc;
	int flags;
	int (*test) (int flags);
	int (*init_f) (void);
	void (*reloc) (void);
	unsigned long testid;
};
int post_init_f (void);
void post_bootmode_init (void);
int post_bootmode_get (unsigned int * last_test);
void post_bootmode_clear (void);
int post_run (char *name, int flags);
int post_info (char *name);
int post_log (char *format, ...);
unsigned long post_time_ms (unsigned long base);

/**
 * post_output_backlog() - Print POST results
 *
 * Print POST results during the generic board init sequence, after
 * relocation.
 *
 * Return: 0 if OK
 */
int post_output_backlog(void);

extern struct post_test post_list[];
extern unsigned int post_list_size;
extern int post_hotkeys_pressed(void);
extern int memory_post_test(int flags);

/*
 *  If GCC is configured to use a version of GAS that supports
 * the .gnu_attribute directive, it will use that directive to
 * record certain properties of the output code.
 *  This feature is new to GCC 4.3.0.
 *  .gnu_attribute is new to GAS 2.18.
 */
#if (__GNUC__ >= 4 && __GNUC_MINOR__ >= 3)
/* Tag_GNU_Power_ABI_FP/soft-float */
#define GNU_FPOST_ATTR	asm(".gnu_attribute	4, 2");
#else
#define GNU_FPOST_ATTR
#endif /* __GNUC__ */
#endif /* __ASSEMBLY__ */

#define CFG_SYS_POST_RTC		0x00000001
#define CFG_SYS_POST_WATCHDOG	0x00000002
#define CFG_SYS_POST_MEMORY		0x00000004
#define CFG_SYS_POST_CPU		0x00000008
#define CFG_SYS_POST_I2C		0x00000010
#define CFG_SYS_POST_CACHE		0x00000020
#define CFG_SYS_POST_UART		0x00000040
#define CFG_SYS_POST_ETHER		0x00000080
#define CFG_SYS_POST_USB		0x00000200
#define CFG_SYS_POST_SPR		0x00000400
#define CFG_SYS_POST_SYSMON		0x00000800
#define CFG_SYS_POST_DSP		0x00001000
#define CFG_SYS_POST_OCM		0x00002000
#define CFG_SYS_POST_FPU		0x00004000
#define CFG_SYS_POST_ECC		0x00008000
#define CFG_SYS_POST_BSPEC1		0x00010000
#define CFG_SYS_POST_BSPEC2		0x00020000
#define CFG_SYS_POST_BSPEC3		0x00040000
#define CFG_SYS_POST_BSPEC4		0x00080000
#define CFG_SYS_POST_BSPEC5		0x00100000
#define CFG_SYS_POST_CODEC		0x00200000
#define CFG_SYS_POST_COPROC		0x00400000
#define CFG_SYS_POST_FLASH		0x00800000
#define CFG_SYS_POST_MEM_REGIONS	0x01000000

#endif /* CONFIG_POST */

#endif /* _POST_H */
