arch/riscv: Add generic_ffs() func supported [1/1]

PD#SWPL-93083

Problem:
Add generic_ffs() func supported

Solution:
Add generic_ffs() func supported

Verify:
N/A

Change-Id: I9db78fd3ed521dad5e70286c055c9bd9671988bd
Signed-off-by: xiaohu.huang <xiaohu.huang@amlogic.com>
diff --git a/common.h b/common.h
index 1616750..601cf33 100644
--- a/common.h
+++ b/common.h
@@ -31,6 +31,36 @@
 		REG32((unsigned long)addr) = _v;                                                   \
 	} while (0)
 
+static inline int generic_ffs(int x)
+{
+	int r = 1;
+
+	if (!x)
+		return 0;
+	if (!(x & 0xffff)) {
+		x >>= 16;
+		r += 16;
+	}
+	if (!(x & 0xff)) {
+		x >>= 8;
+		r += 8;
+	}
+	if (!(x & 0xf)) {
+		x >>= 4;
+		r += 4;
+	}
+	if (!(x & 3)) {
+		x >>= 2;
+		r += 2;
+	}
+	if (!(x & 1)) {
+		x >>= 1;
+		r += 1;
+	}
+	return r;
+}
+#define ffs(x) generic_ffs(x)
+
 #ifndef FIELD_PREP
 #define FIELD_PREP(_mask, _val) (((typeof(_mask))(_val) << (ffs(_mask) - 1)) & (_mask))
 #endif