regscript: Add support for MSR type

This required changing value/mask types to uint64_t.

Another option would be to use id field to select low or high
32 bits of the MSR and set them independently.

BUG=chrome-os-partner:23505
BRANCH=none
TEST=build and boot on rambi

Change-Id: Ied9998058a8035bf3f003185236f3be3e0df7fc9
Signed-off-by: Duncan Laurie <dlaurie@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/176304
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Commit-Queue: Aaron Durbin <adurbin@chromium.org>
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/4951
Tested-by: build bot (Jenkins)
Reviewed-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
diff --git a/src/include/reg_script.h b/src/include/reg_script.h
index 18eda0c..81a4648 100644
--- a/src/include/reg_script.h
+++ b/src/include/reg_script.h
@@ -59,12 +59,14 @@
 	REG_SCRIPT_TYPE_MMIO,
 	REG_SCRIPT_TYPE_RES,
 	REG_SCRIPT_TYPE_IOSF,
+	REG_SCRIPT_TYPE_MSR,
 };
 
 enum {
 	REG_SCRIPT_SIZE_8,
 	REG_SCRIPT_SIZE_16,
 	REG_SCRIPT_SIZE_32,
+	REG_SCRIPT_SIZE_64,
 };
 
 struct reg_script {
@@ -72,8 +74,8 @@
 	uint32_t type;
 	uint32_t size;
 	uint32_t reg;
-	uint32_t mask;
-	uint32_t value;
+	uint64_t mask;
+	uint64_t value;
 	uint32_t timeout;
 	union {
 		uint32_t id;
@@ -290,6 +292,26 @@
 	REG_SCRIPT_IOSF(POLL, unit_, reg_, mask_, value_, timeout_)
 
 /*
+ * CPU Model Specific Register
+ */
+
+#define REG_SCRIPT_MSR(cmd_, reg_, mask_, value_, timeout_) \
+	_REG_SCRIPT_ENCODE_RAW(REG_SCRIPT_COMMAND_##cmd_,   \
+			       REG_SCRIPT_TYPE_MSR,         \
+			       REG_SCRIPT_SIZE_64,          \
+			       reg_, mask_, value_, timeout_, 0)
+#define REG_MSR_READ(reg_) \
+	REG_SCRIPT_MSR(READ, reg_, 0, 0, 0)
+#define REG_MSR_WRITE(reg_, value_) \
+	REG_SCRIPT_MSR(WRITE, reg_, 0, value_, 0)
+#define REG_MSR_RMW(reg_, mask_, value_) \
+	REG_SCRIPT_MSR(RMW, reg_, mask_, value_, 0)
+#define REG_MSR_OR(reg_, value_) \
+	REG_MSR_RMW(reg_, -1ULL, value_)
+#define REG_MSR_POLL(reg_, mask_, value_, timeout_) \
+	REG_SCRIPT_MSR(POLL, reg_, mask_, value_, timeout_)
+
+/*
  * Chain to another table.
  */
 #define REG_SCRIPT_NEXT(next_)                \