|
@@ -706,10 +706,43 @@ static int ath10k_core_probe_fw(struct ath10k *ar)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-int ath10k_core_register(struct ath10k *ar)
|
|
|
+static int ath10k_core_check_chip_id(struct ath10k *ar)
|
|
|
+{
|
|
|
+ u32 hw_revision = MS(ar->chip_id, SOC_CHIP_ID_REV);
|
|
|
+
|
|
|
+ /* Check that we are not using hw1.0 (some of them have same pci id
|
|
|
+ * as hw2.0) before doing anything else as ath10k crashes horribly
|
|
|
+ * due to missing hw1.0 workarounds. */
|
|
|
+ switch (hw_revision) {
|
|
|
+ case QCA988X_HW_1_0_CHIP_ID_REV:
|
|
|
+ ath10k_err("ERROR: qca988x hw1.0 is not supported\n");
|
|
|
+ return -EOPNOTSUPP;
|
|
|
+
|
|
|
+ case QCA988X_HW_2_0_CHIP_ID_REV:
|
|
|
+ /* known hardware revision, continue normally */
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ default:
|
|
|
+ ath10k_warn("Warning: hardware revision unknown (0x%x), expect problems\n",
|
|
|
+ ar->chip_id);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+int ath10k_core_register(struct ath10k *ar, u32 chip_id)
|
|
|
{
|
|
|
int status;
|
|
|
|
|
|
+ ar->chip_id = chip_id;
|
|
|
+
|
|
|
+ status = ath10k_core_check_chip_id(ar);
|
|
|
+ if (status) {
|
|
|
+ ath10k_err("Unsupported chip id 0x%08x\n", ar->chip_id);
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+
|
|
|
status = ath10k_core_probe_fw(ar);
|
|
|
if (status) {
|
|
|
ath10k_err("could not probe fw (%d)\n", status);
|