summaryrefslogtreecommitdiff
path: root/src/soc/intel/broadwell/refcode/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc/intel/broadwell/refcode/main.c')
-rw-r--r--src/soc/intel/broadwell/refcode/main.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/soc/intel/broadwell/refcode/main.c b/src/soc/intel/broadwell/refcode/main.c
new file mode 100644
index 0000000000..7e2e234c5e
--- /dev/null
+++ b/src/soc/intel/broadwell/refcode/main.c
@@ -0,0 +1,44 @@
+#include "usb.h"
+#include "refcode.h"
+
+struct _MRC_PEI_SERVICES;
+typedef struct _MRC_PEI_SERVICES MRC_PEI_SERVICES;
+struct _refcode_struct;
+typedef struct _refcode_struct refcode_struct;
+
+MRC_PEI_SERVICES ** refcode_init(struct pei_data *);
+int InstallPchInitPpi(int, MRC_PEI_SERVICES **);
+int init_system_agent(int, MRC_PEI_SERVICES **);
+int PchInitialize(int, MRC_PEI_SERVICES **);
+
+static inline void*
+get_usb_policy(refcode_struct *r)
+{
+ return (void*)r + 644;
+}
+
+static inline uint8_t
+get_revision(refcode_struct *r)
+{
+ return *(uint8_t*)(r);
+}
+
+int broadwell_refcode_main(struct pei_data *pei_data)
+{
+ MRC_PEI_SERVICES **pei_pointer;
+ refcode_struct *refcode_struct_ptr;
+
+ pei_pointer = refcode_init(pei_data);
+ if (pei_pointer == NULL)
+ return -1;
+
+ InstallPchInitPpi(0, pei_pointer);
+ init_system_agent(0, pei_pointer);
+ PchInitialize(0, pei_pointer);
+ refcode_locate_ppi(&refcode_ppi_guid, 0, 0, (void**)(&refcode_struct_ptr));
+ PchStartUsbInit(get_usb_policy(refcode_struct_ptr),
+ pei_data->ehcibar, pei_data->xhcibar,
+ get_revision(refcode_struct_ptr));
+ finalize_usb();
+ return 0;
+}