Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 40cc76e2 authored by Michael Ellerman's avatar Michael Ellerman
Browse files

Merge branch 'topic/opal-ipmi' into next

parents e7a7a65e 608b286d
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -154,6 +154,8 @@ struct opal_sg_list {
#define OPAL_HANDLE_HMI				98
#define OPAL_REGISTER_DUMP_REGION		101
#define OPAL_UNREGISTER_DUMP_REGION		102
#define OPAL_IPMI_SEND				107
#define OPAL_IPMI_RECV				108

#ifndef __ASSEMBLY__

@@ -452,6 +454,17 @@ struct opal_msg {
	__be64 params[8];
};

enum {
	OPAL_IPMI_MSG_FORMAT_VERSION_1 = 1,
};

struct opal_ipmi_msg {
	uint8_t		version;
	uint8_t		netfn;
	uint8_t		cmd;
	uint8_t		data[];
};

struct opal_machine_check_event {
	enum OpalMCE_Version	version:8;	/* 0x00 */
	uint8_t			in_use;		/* 0x01 */
@@ -963,6 +976,10 @@ int64_t opal_handle_hmi(void);
int64_t opal_register_dump_region(uint32_t id, uint64_t start, uint64_t end);
int64_t opal_unregister_dump_region(uint32_t id);
int64_t opal_pci_set_phb_cxl_mode(uint64_t phb_id, uint64_t mode, uint64_t pe_number);
int64_t opal_ipmi_send(uint64_t interface, struct opal_ipmi_msg *msg,
		uint64_t msg_len);
int64_t opal_ipmi_recv(uint64_t interface, struct opal_ipmi_msg *msg,
		uint64_t *msg_len);

/* Internal functions */
extern int early_init_dt_scan_opal(unsigned long node, const char *uname,
+2 −0
Original line number Diff line number Diff line
@@ -250,3 +250,5 @@ OPAL_CALL(opal_handle_hmi, OPAL_HANDLE_HMI);
OPAL_CALL(opal_register_dump_region,		OPAL_REGISTER_DUMP_REGION);
OPAL_CALL(opal_unregister_dump_region,		OPAL_UNREGISTER_DUMP_REGION);
OPAL_CALL(opal_pci_set_phb_cxl_mode,		OPAL_PCI_SET_PHB_CXL_MODE);
OPAL_CALL(opal_ipmi_send,			OPAL_IPMI_SEND);
OPAL_CALL(opal_ipmi_recv,			OPAL_IPMI_RECV);
+14 −0
Original line number Diff line number Diff line
@@ -644,6 +644,16 @@ static void __init opal_dump_region_init(void)
		pr_warn("DUMP: Failed to register kernel log buffer. "
			"rc = %d\n", rc);
}

static void opal_ipmi_init(struct device_node *opal_node)
{
	struct device_node *np;

	for_each_child_of_node(opal_node, np)
		if (of_device_is_compatible(np, "ibm,opal-ipmi"))
			of_platform_device_create(np, NULL, NULL);
}

static int __init opal_init(void)
{
	struct device_node *np, *consoles;
@@ -707,6 +717,8 @@ static int __init opal_init(void)
		opal_msglog_init();
	}

	opal_ipmi_init(opal_node);

	return 0;
}
machine_subsys_initcall(powernv, opal_init);
@@ -742,6 +754,8 @@ void opal_shutdown(void)

/* Export this so that test modules can use it */
EXPORT_SYMBOL_GPL(opal_invalid_call);
EXPORT_SYMBOL_GPL(opal_ipmi_send);
EXPORT_SYMBOL_GPL(opal_ipmi_recv);

/* Convert a region of vmalloc memory to an opal sg list */
struct opal_sg_list *opal_vmalloc_to_sg_list(void *vmalloc_addr,