From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Subject: [PATCH v2 2/3] drm/radeon: Cleanup HDMI audio interrupt handling for evergreen Date: Fri, 19 May 2017 19:48:38 -0400 Message-ID: <20170519234840.5644-3-lyude@redhat.com> References: <20170516211202.20325-1-lyude@redhat.com> <20170519234840.5644-1-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170519234840.5644-1-lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Lyude , David Airlie , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= U2FtZSBhcyB0aGUgcHJldmlvdXMgcGF0Y2gsIGJ1dCBub3cgZm9yIGhhbmRsaW5nIEhETUkgYXVk aW8gaW50ZXJydXB0cy4KCkNoYW5nZXMgc2luY2UgdjE6Ci0gUHJlc2VydmUgdGhlIG9yZGVyIHdl IHdyaXRlIGJhY2sgYWxsIHJlZ2lzdGVycwoKU2lnbmVkLW9mZi1ieTogTHl1ZGUgPGx5dWRlQHJl ZGhhdC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYyB8IDE1MyAr KysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vcmFk ZW9uL3JhZGVvbi5oICAgIHwgICA3ICstCiAyIGZpbGVzIGNoYW5nZWQsIDI3IGluc2VydGlvbnMo KyksIDEzMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9u L2V2ZXJncmVlbi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYwppbmRleCA0 NGFjNmQzLi41MDdhNzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJn cmVlbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKQEAgLTQ0OTUs NyArNDQ5NSw2IEBAIGludCBldmVyZ3JlZW5faXJxX3NldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAq cmRldikKIAl1MzIgY3BfaW50X2NudGwgPSBDTlRYX0JVU1lfSU5UX0VOQUJMRSB8IENOVFhfRU1Q VFlfSU5UX0VOQUJMRTsKIAl1MzIgY3BfaW50X2NudGwxID0gMCwgY3BfaW50X2NudGwyID0gMDsK IAl1MzIgZ3JibV9pbnRfY250bCA9IDA7Ci0JdTMyIGFmbXQxID0gMCwgYWZtdDIgPSAwLCBhZm10 MyA9IDAsIGFmbXQ0ID0gMCwgYWZtdDUgPSAwLCBhZm10NiA9IDA7CiAJdTMyIGRtYV9jbnRsLCBk bWFfY250bDEgPSAwOwogCXUzMiB0aGVybWFsX2ludCA9IDA7CiAKQEAgLTQ1MTgsMTMgKzQ1MTcs NiBAQCBpbnQgZXZlcmdyZWVuX2lycV9zZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAJ CXRoZXJtYWxfaW50ID0gUlJFRzMyKENHX1RIRVJNQUxfSU5UKSAmCiAJCQl+KFRIRVJNX0lOVF9N QVNLX0hJR0ggfCBUSEVSTV9JTlRfTUFTS19MT1cpOwogCi0JYWZtdDEgPSBSUkVHMzIoQUZNVF9B VURJT19QQUNLRVRfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQpICYg fkFGTVRfQVpfRk9STUFUX1dUUklHX01BU0s7Ci0JYWZtdDIgPSBSUkVHMzIoQUZNVF9BVURJT19Q QUNLRVRfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQpICYgfkFGTVRf QVpfRk9STUFUX1dUUklHX01BU0s7Ci0JYWZtdDMgPSBSUkVHMzIoQUZNVF9BVURJT19QQUNLRVRf Q09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQpICYgfkFGTVRfQVpfRk9S TUFUX1dUUklHX01BU0s7Ci0JYWZtdDQgPSBSUkVHMzIoQUZNVF9BVURJT19QQUNLRVRfQ09OVFJP TCArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQpICYgfkFGTVRfQVpfRk9STUFUX1dU UklHX01BU0s7Ci0JYWZtdDUgPSBSUkVHMzIoQUZNVF9BVURJT19QQUNLRVRfQ09OVFJPTCArIEVW RVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQpICYgfkFGTVRfQVpfRk9STUFUX1dUUklHX01B U0s7Ci0JYWZtdDYgPSBSUkVHMzIoQUZNVF9BVURJT19QQUNLRVRfQ09OVFJPTCArIEVWRVJHUkVF Tl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQpICYgfkFGTVRfQVpfRk9STUFUX1dUUklHX01BU0s7Ci0K IAlkbWFfY250bCA9IFJSRUczMihETUFfQ05UTCkgJiB+VFJBUF9FTkFCTEU7CiAKIAlpZiAocmRl di0+ZmFtaWx5ID49IENISVBfQ0FZTUFOKSB7CkBAIC00NTY3LDMxICs0NTU5LDYgQEAgaW50IGV2 ZXJncmVlbl9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogCQl0aGVybWFsX2lu dCB8PSBUSEVSTV9JTlRfTUFTS19ISUdIIHwgVEhFUk1fSU5UX01BU0tfTE9XOwogCX0KIAotCWlm IChyZGV2LT5pcnEuYWZtdFswXSkgewotCQlEUk1fREVCVUcoImV2ZXJncmVlbl9pcnFfc2V0OiBo ZG1pIDBcbiIpOwotCQlhZm10MSB8PSBBRk1UX0FaX0ZPUk1BVF9XVFJJR19NQVNLOwotCX0KLQlp ZiAocmRldi0+aXJxLmFmbXRbMV0pIHsKLQkJRFJNX0RFQlVHKCJldmVyZ3JlZW5faXJxX3NldDog aGRtaSAxXG4iKTsKLQkJYWZtdDIgfD0gQUZNVF9BWl9GT1JNQVRfV1RSSUdfTUFTSzsKLQl9Ci0J aWYgKHJkZXYtPmlycS5hZm10WzJdKSB7Ci0JCURSTV9ERUJVRygiZXZlcmdyZWVuX2lycV9zZXQ6 IGhkbWkgMlxuIik7Ci0JCWFmbXQzIHw9IEFGTVRfQVpfRk9STUFUX1dUUklHX01BU0s7Ci0JfQot CWlmIChyZGV2LT5pcnEuYWZtdFszXSkgewotCQlEUk1fREVCVUcoImV2ZXJncmVlbl9pcnFfc2V0 OiBoZG1pIDNcbiIpOwotCQlhZm10NCB8PSBBRk1UX0FaX0ZPUk1BVF9XVFJJR19NQVNLOwotCX0K LQlpZiAocmRldi0+aXJxLmFmbXRbNF0pIHsKLQkJRFJNX0RFQlVHKCJldmVyZ3JlZW5faXJxX3Nl dDogaGRtaSA0XG4iKTsKLQkJYWZtdDUgfD0gQUZNVF9BWl9GT1JNQVRfV1RSSUdfTUFTSzsKLQl9 Ci0JaWYgKHJkZXYtPmlycS5hZm10WzVdKSB7Ci0JCURSTV9ERUJVRygiZXZlcmdyZWVuX2lycV9z ZXQ6IGhkbWkgNVxuIik7Ci0JCWFmbXQ2IHw9IEFGTVRfQVpfRk9STUFUX1dUUklHX01BU0s7Ci0J fQotCiAJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX0NBWU1BTikgewogCQljYXltYW5fY3BfaW50 X2NudGxfc2V0dXAocmRldiwgMCwgY3BfaW50X2NudGwpOwogCQljYXltYW5fY3BfaW50X2NudGxf c2V0dXAocmRldiwgMSwgY3BfaW50X2NudGwxKTsKQEAgLTQ2NDMsMTIgKzQ2MTAsMTIgQEAgaW50 IGV2ZXJncmVlbl9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogCWVsc2UKIAkJ V1JFRzMyKENHX1RIRVJNQUxfSU5ULCB0aGVybWFsX2ludCk7CiAKLQlXUkVHMzIoQUZNVF9BVURJ T19QQUNLRVRfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQsIGFmbXQx KTsKLQlXUkVHMzIoQUZNVF9BVURJT19QQUNLRVRfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMV9S RUdJU1RFUl9PRkZTRVQsIGFmbXQyKTsKLQlXUkVHMzIoQUZNVF9BVURJT19QQUNLRVRfQ09OVFJP TCArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsIGFmbXQzKTsKLQlXUkVHMzIoQUZN VF9BVURJT19QQUNLRVRfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQs IGFmbXQ0KTsKLQlXUkVHMzIoQUZNVF9BVURJT19QQUNLRVRfQ09OVFJPTCArIEVWRVJHUkVFTl9D UlRDNF9SRUdJU1RFUl9PRkZTRVQsIGFmbXQ1KTsKLQlXUkVHMzIoQUZNVF9BVURJT19QQUNLRVRf Q09OVFJPTCArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsIGFmbXQ2KTsKKwlmb3Ig KGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCXJhZGVvbl9pcnFfa21zX3NldF9pcnFfbl9lbmFibGVk KAorCQkgICAgcmRldiwgQUZNVF9BVURJT19QQUNLRVRfQ09OVFJPTCArIGNydGNfb2Zmc2V0c1tp XSwKKwkJICAgIEFGTVRfQVpfRk9STUFUX1dUUklHX01BU0ssCisJCSAgICByZGV2LT5pcnEuYWZt dFtpXSwgIkhETUkiLCBpKTsKKwl9CiAKIAkvKiBwb3N0aW5nIHJlYWQgKi8KIAlSUkVHMzIoU1JC TV9TVEFUVVMpOwpAQCAtNDY2MSwxMCArNDYyOCwxMiBAQCBzdGF0aWMgdm9pZCBldmVyZ3JlZW5f aXJxX2FjayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgaTsKIAl1MzIgKmRp c3BfaW50ID0gcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnQ7Ci0JdTMyIHRt cDsKKwl1MzIgKmFmbXRfc3RhdHVzID0gcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uYWZt dF9zdGF0dXM7CiAKLQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCA2 OyBpKyspIHsKIAkJZGlzcF9pbnRbaV0gPSBSUkVHMzIoZXZlcmdyZWVuX2Rpc3BfaW50X3N0YXR1 c1tpXSk7CisJCWFmbXRfc3RhdHVzW2ldID0gUlJFRzMyKEFGTVRfU1RBVFVTICsgY3J0Y19vZmZz ZXRzW2ldKTsKKwl9CiAKIAlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kMWdycGhfaW50 ID0gUlJFRzMyKEdSUEhfSU5UX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZT RVQpOwogCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmQyZ3JwaF9pbnQgPSBSUkVHMzIo R1JQSF9JTlRfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCk7CkBAIC00 Njc3LDEyICs0NjQ2LDYgQEAgc3RhdGljIHZvaWQgZXZlcmdyZWVuX2lycV9hY2soc3RydWN0IHJh ZGVvbl9kZXZpY2UgKnJkZXYpCiAJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmQ2Z3Jw aF9pbnQgPSBSUkVHMzIoR1JQSF9JTlRfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVS X09GRlNFVCk7CiAJfQogCi0JcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uYWZtdF9zdGF0 dXMxID0gUlJFRzMyKEFGTVRfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNF VCk7Ci0JcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uYWZtdF9zdGF0dXMyID0gUlJFRzMy KEFGTVRfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCk7Ci0JcmRldi0+ aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uYWZtdF9zdGF0dXMzID0gUlJFRzMyKEFGTVRfU1RBVFVT ICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCk7Ci0JcmRldi0+aXJxLnN0YXRfcmVn cy5ldmVyZ3JlZW4uYWZtdF9zdGF0dXM0ID0gUlJFRzMyKEFGTVRfU1RBVFVTICsgRVZFUkdSRUVO X0NSVEMzX1JFR0lTVEVSX09GRlNFVCk7Ci0JcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4u YWZtdF9zdGF0dXM1ID0gUlJFRzMyKEFGTVRfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lT VEVSX09GRlNFVCk7Ci0JcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uYWZtdF9zdGF0dXM2 ID0gUlJFRzMyKEFGTVRfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCk7 CiAKIAlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZDFncnBoX2ludCAmIEdSUEhf UEZMSVBfSU5UX09DQ1VSUkVEKQogCQlXUkVHMzIoR1JQSF9JTlRfU1RBVFVTICsgRVZFUkdSRUVO X0NSVEMwX1JFR0lTVEVSX09GRlNFVCwgR1JQSF9QRkxJUF9JTlRfQ0xFQVIpOwpAQCAtNDczNywz NSArNDcwMCwxMCBAQCBzdGF0aWMgdm9pZCBldmVyZ3JlZW5faXJxX2FjayhzdHJ1Y3QgcmFkZW9u X2RldmljZSAqcmRldikKIAkJCVdSRUczMl9PUihEQ19IUER4X0lOVF9DT05UUk9MKGkpLCBEQ19I UER4X1JYX0lOVF9BQ0spOwogCX0KIAotCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVl bi5hZm10X3N0YXR1czEgJiBBRk1UX0FaX0ZPUk1BVF9XVFJJRykgewotCQl0bXAgPSBSUkVHMzIo QUZNVF9BVURJT19QQUNLRVRfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZT RVQpOwotCQl0bXAgfD0gQUZNVF9BWl9GT1JNQVRfV1RSSUdfQUNLOwotCQlXUkVHMzIoQUZNVF9B VURJT19QQUNLRVRfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQsIHRt cCk7Ci0JfQotCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5hZm10X3N0YXR1czIg JiBBRk1UX0FaX0ZPUk1BVF9XVFJJRykgewotCQl0bXAgPSBSUkVHMzIoQUZNVF9BVURJT19QQUNL RVRfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQpOwotCQl0bXAgfD0g QUZNVF9BWl9GT1JNQVRfV1RSSUdfQUNLOwotCQlXUkVHMzIoQUZNVF9BVURJT19QQUNLRVRfQ09O VFJPTCArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQsIHRtcCk7Ci0JfQotCWlmIChy ZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5hZm10X3N0YXR1czMgJiBBRk1UX0FaX0ZPUk1B VF9XVFJJRykgewotCQl0bXAgPSBSUkVHMzIoQUZNVF9BVURJT19QQUNLRVRfQ09OVFJPTCArIEVW RVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQpOwotCQl0bXAgfD0gQUZNVF9BWl9GT1JNQVRf V1RSSUdfQUNLOwotCQlXUkVHMzIoQUZNVF9BVURJT19QQUNLRVRfQ09OVFJPTCArIEVWRVJHUkVF Tl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsIHRtcCk7Ci0JfQotCWlmIChyZGV2LT5pcnEuc3RhdF9y ZWdzLmV2ZXJncmVlbi5hZm10X3N0YXR1czQgJiBBRk1UX0FaX0ZPUk1BVF9XVFJJRykgewotCQl0 bXAgPSBSUkVHMzIoQUZNVF9BVURJT19QQUNLRVRfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDM19S RUdJU1RFUl9PRkZTRVQpOwotCQl0bXAgfD0gQUZNVF9BWl9GT1JNQVRfV1RSSUdfQUNLOwotCQlX UkVHMzIoQUZNVF9BVURJT19QQUNLRVRfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RF Ul9PRkZTRVQsIHRtcCk7Ci0JfQotCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5h Zm10X3N0YXR1czUgJiBBRk1UX0FaX0ZPUk1BVF9XVFJJRykgewotCQl0bXAgPSBSUkVHMzIoQUZN VF9BVURJT19QQUNLRVRfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQp OwotCQl0bXAgfD0gQUZNVF9BWl9GT1JNQVRfV1RSSUdfQUNLOwotCQlXUkVHMzIoQUZNVF9BVURJ T19QQUNLRVRfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQsIHRtcCk7 Ci0JfQotCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5hZm10X3N0YXR1czYgJiBB Rk1UX0FaX0ZPUk1BVF9XVFJJRykgewotCQl0bXAgPSBSUkVHMzIoQUZNVF9BVURJT19QQUNLRVRf Q09OVFJPTCArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQpOwotCQl0bXAgfD0gQUZN VF9BWl9GT1JNQVRfV1RSSUdfQUNLOwotCQlXUkVHMzIoQUZNVF9BVURJT19QQUNLRVRfQ09OVFJP TCArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsIHRtcCk7CisJZm9yIChpID0gMDsg aSA8IDY7IGkrKykgeworCQlpZiAoYWZtdF9zdGF0dXNbaV0gJiBBRk1UX0FaX0ZPUk1BVF9XVFJJ RykKKwkJCVdSRUczMl9PUihBRk1UX0FVRElPX1BBQ0tFVF9DT05UUk9MICsgY3J0Y19vZmZzZXRz W2ldLAorCQkJCSAgQUZNVF9BWl9GT1JNQVRfV1RSSUdfQUNLKTsKIAl9CiB9CiAKQEAgLTQ4MTIs NyArNDc1MCw4IEBAIHN0YXRpYyB1MzIgZXZlcmdyZWVuX2dldF9paF93cHRyKHN0cnVjdCByYWRl b25fZGV2aWNlICpyZGV2KQogaW50IGV2ZXJncmVlbl9pcnFfcHJvY2VzcyhzdHJ1Y3QgcmFkZW9u X2RldmljZSAqcmRldikKIHsKIAl1MzIgKmRpc3BfaW50ID0gcmRldi0+aXJxLnN0YXRfcmVncy5l dmVyZ3JlZW4uZGlzcF9pbnQ7Ci0JdTMyIGNydGNfaWR4LCBocGRfaWR4OworCXUzMiAqYWZtdF9z dGF0dXMgPSByZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5hZm10X3N0YXR1czsKKwl1MzIg Y3J0Y19pZHgsIGhwZF9pZHgsIGFmbXRfaWR4OwogCXUzMiBtYXNrOwogCXUzMiB3cHRyOwogCXUz MiBycHRyOwpAQCAtNDkyOCw1OSArNDg2NywxOSBAQCBpbnQgZXZlcmdyZWVuX2lycV9wcm9jZXNz KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogCiAJCQlicmVhazsKIAkJY2FzZSA0NDogLyog aGRtaSAqLwotCQkJc3dpdGNoIChzcmNfZGF0YSkgewotCQkJY2FzZSAwOgotCQkJCWlmICghKHJk ZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmFmbXRfc3RhdHVzMSAmIEFGTVRfQVpfRk9STUFU X1dUUklHKSkKLQkJCQkJRFJNX0RFQlVHKCJJSDogSUggZXZlbnQgdy9vIGFzc2VydGVkIGlycSBi aXQ/XG4iKTsKLQotCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmFmbXRfc3RhdHVz MSAmPSB+QUZNVF9BWl9GT1JNQVRfV1RSSUc7Ci0JCQkJcXVldWVfaGRtaSA9IHRydWU7Ci0JCQkJ RFJNX0RFQlVHKCJJSDogSERNSTBcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAxOgotCQkJCWlm ICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmFmbXRfc3RhdHVzMiAmIEFGTVRfQVpf Rk9STUFUX1dUUklHKSkKLQkJCQkJRFJNX0RFQlVHKCJJSDogSUggZXZlbnQgdy9vIGFzc2VydGVk IGlycSBiaXQ/XG4iKTsKLQotCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmFmbXRf c3RhdHVzMiAmPSB+QUZNVF9BWl9GT1JNQVRfV1RSSUc7Ci0JCQkJcXVldWVfaGRtaSA9IHRydWU7 Ci0JCQkJRFJNX0RFQlVHKCJJSDogSERNSTFcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyOgot CQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmFmbXRfc3RhdHVzMyAmIEFG TVRfQVpfRk9STUFUX1dUUklHKSkKLQkJCQkJRFJNX0RFQlVHKCJJSDogSUggZXZlbnQgdy9vIGFz c2VydGVkIGlycSBiaXQ/XG4iKTsKLQotCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVu LmFmbXRfc3RhdHVzMyAmPSB+QUZNVF9BWl9GT1JNQVRfV1RSSUc7Ci0JCQkJcXVldWVfaGRtaSA9 IHRydWU7Ci0JCQkJRFJNX0RFQlVHKCJJSDogSERNSTJcbiIpOwotCQkJCWJyZWFrOwotCQkJY2Fz ZSAzOgotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmFmbXRfc3RhdHVz NCAmIEFGTVRfQVpfRk9STUFUX1dUUklHKSkKLQkJCQkJRFJNX0RFQlVHKCJJSDogSUggZXZlbnQg dy9vIGFzc2VydGVkIGlycSBiaXQ/XG4iKTsKLQotCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZl cmdyZWVuLmFmbXRfc3RhdHVzNCAmPSB+QUZNVF9BWl9GT1JNQVRfV1RSSUc7Ci0JCQkJcXVldWVf aGRtaSA9IHRydWU7Ci0JCQkJRFJNX0RFQlVHKCJJSDogSERNSTNcbiIpOwotCQkJCWJyZWFrOwot CQkJY2FzZSA0OgotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmFmbXRf c3RhdHVzNSAmIEFGTVRfQVpfRk9STUFUX1dUUklHKSkKLQkJCQkJRFJNX0RFQlVHKCJJSDogSUgg ZXZlbnQgdy9vIGFzc2VydGVkIGlycSBiaXQ/XG4iKTsKLQotCQkJCXJkZXYtPmlycS5zdGF0X3Jl Z3MuZXZlcmdyZWVuLmFmbXRfc3RhdHVzNSAmPSB+QUZNVF9BWl9GT1JNQVRfV1RSSUc7Ci0JCQkJ cXVldWVfaGRtaSA9IHRydWU7Ci0JCQkJRFJNX0RFQlVHKCJJSDogSERNSTRcbiIpOwotCQkJCWJy ZWFrOwotCQkJY2FzZSA1OgotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVu LmFmbXRfc3RhdHVzNiAmIEFGTVRfQVpfRk9STUFUX1dUUklHKSkKLQkJCQkJRFJNX0RFQlVHKCJJ SDogSUggZXZlbnQgdy9vIGFzc2VydGVkIGlycSBiaXQ/XG4iKTsKKwkJCWFmbXRfaWR4ID0gc3Jj X2RhdGE7CisJCQlpZiAoIShhZm10X3N0YXR1c1thZm10X2lkeF0gJiBBRk1UX0FaX0ZPUk1BVF9X VFJJRykpCisJCQkJRFJNX0RFQlVHKCJJSDogSUggZXZlbnQgdy9vIGFzc2VydGVkIGlycSBiaXQ/ XG4iKTsKIAotCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmFmbXRfc3RhdHVzNiAm PSB+QUZNVF9BWl9GT1JNQVRfV1RSSUc7Ci0JCQkJcXVldWVfaGRtaSA9IHRydWU7Ci0JCQkJRFJN X0RFQlVHKCJJSDogSERNSTVcbiIpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlEUk1f RVJST1IoIlVuaGFuZGxlZCBpbnRlcnJ1cHQ6ICVkICVkXG4iLCBzcmNfaWQsIHNyY19kYXRhKTsK KwkJCWlmIChhZm10X2lkeCA+IDUpIHsKKwkJCQlEUk1fRVJST1IoIlVuaGFuZGxlZCBpbnRlcnJ1 cHQ6ICVkICVkXG4iLAorCQkJCQkgIHNyY19pZCwgc3JjX2RhdGEpOwogCQkJCWJyZWFrOwogCQkJ fQorCQkJYWZtdF9zdGF0dXNbYWZtdF9pZHhdICY9IH5BRk1UX0FaX0ZPUk1BVF9XVFJJRzsKKwkJ CXF1ZXVlX2hkbWkgPSB0cnVlOworCQkJRFJNX0RFQlVHKCJJSDogSERNSSVkXG4iLCBhZm10X2lk eCArIDEpOworCQkJYnJlYWs7CiAJCWNhc2UgOTY6CiAJCQlEUk1fRVJST1IoIlNSQk1fUkVBRF9F UlJPUjogMHgleFxuIiwgUlJFRzMyKFNSQk1fUkVBRF9FUlJPUikpOwogCQkJV1JFRzMyKFNSQk1f SU5UX0FDSywgMHgxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9u LmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCmluZGV4IGI2MDg2ZWUuLmU5NjFh OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaApAQCAtNzc0LDEyICs3NzQsNyBAQCBzdHJ1Y3Qg ZXZlcmdyZWVuX2lycV9zdGF0X3JlZ3MgewogCXUzMiBkNGdycGhfaW50OwogCXUzMiBkNWdycGhf aW50OwogCXUzMiBkNmdycGhfaW50OwotCXUzMiBhZm10X3N0YXR1czE7Ci0JdTMyIGFmbXRfc3Rh dHVzMjsKLQl1MzIgYWZtdF9zdGF0dXMzOwotCXUzMiBhZm10X3N0YXR1czQ7Ci0JdTMyIGFmbXRf c3RhdHVzNTsKLQl1MzIgYWZtdF9zdGF0dXM2OworCXUzMiBhZm10X3N0YXR1c1s2XTsKIH07CiAK IHN0cnVjdCBjaWtfaXJxX3N0YXRfcmVncyB7Ci0tIAoyLjkuNAoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932718AbdESXtJ (ORCPT ); Fri, 19 May 2017 19:49:09 -0400 Received: from mx1.redhat.com ([209.132.183.28]:41892 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932679AbdESXtI (ORCPT ); Fri, 19 May 2017 19:49:08 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 839EAC0567A2 Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=lyude@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 839EAC0567A2 From: Lyude To: amd-gfx@lists.freedesktop.org Cc: Lyude , Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , David Airlie , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/3] drm/radeon: Cleanup HDMI audio interrupt handling for evergreen Date: Fri, 19 May 2017 19:48:38 -0400 Message-Id: <20170519234840.5644-3-lyude@redhat.com> In-Reply-To: <20170519234840.5644-1-lyude@redhat.com> References: <20170516211202.20325-1-lyude@redhat.com> <20170519234840.5644-1-lyude@redhat.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Fri, 19 May 2017 23:49:07 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Same as the previous patch, but now for handling HDMI audio interrupts. Changes since v1: - Preserve the order we write back all registers Signed-off-by: Lyude --- drivers/gpu/drm/radeon/evergreen.c | 153 +++++++------------------------------ drivers/gpu/drm/radeon/radeon.h | 7 +- 2 files changed, 27 insertions(+), 133 deletions(-) diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c index 44ac6d3..507a773 100644 --- a/drivers/gpu/drm/radeon/evergreen.c +++ b/drivers/gpu/drm/radeon/evergreen.c @@ -4495,7 +4495,6 @@ int evergreen_irq_set(struct radeon_device *rdev) u32 cp_int_cntl = CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE; u32 cp_int_cntl1 = 0, cp_int_cntl2 = 0; u32 grbm_int_cntl = 0; - u32 afmt1 = 0, afmt2 = 0, afmt3 = 0, afmt4 = 0, afmt5 = 0, afmt6 = 0; u32 dma_cntl, dma_cntl1 = 0; u32 thermal_int = 0; @@ -4518,13 +4517,6 @@ int evergreen_irq_set(struct radeon_device *rdev) thermal_int = RREG32(CG_THERMAL_INT) & ~(THERM_INT_MASK_HIGH | THERM_INT_MASK_LOW); - afmt1 = RREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET) & ~AFMT_AZ_FORMAT_WTRIG_MASK; - afmt2 = RREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET) & ~AFMT_AZ_FORMAT_WTRIG_MASK; - afmt3 = RREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET) & ~AFMT_AZ_FORMAT_WTRIG_MASK; - afmt4 = RREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET) & ~AFMT_AZ_FORMAT_WTRIG_MASK; - afmt5 = RREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET) & ~AFMT_AZ_FORMAT_WTRIG_MASK; - afmt6 = RREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET) & ~AFMT_AZ_FORMAT_WTRIG_MASK; - dma_cntl = RREG32(DMA_CNTL) & ~TRAP_ENABLE; if (rdev->family >= CHIP_CAYMAN) { @@ -4567,31 +4559,6 @@ int evergreen_irq_set(struct radeon_device *rdev) thermal_int |= THERM_INT_MASK_HIGH | THERM_INT_MASK_LOW; } - if (rdev->irq.afmt[0]) { - DRM_DEBUG("evergreen_irq_set: hdmi 0\n"); - afmt1 |= AFMT_AZ_FORMAT_WTRIG_MASK; - } - if (rdev->irq.afmt[1]) { - DRM_DEBUG("evergreen_irq_set: hdmi 1\n"); - afmt2 |= AFMT_AZ_FORMAT_WTRIG_MASK; - } - if (rdev->irq.afmt[2]) { - DRM_DEBUG("evergreen_irq_set: hdmi 2\n"); - afmt3 |= AFMT_AZ_FORMAT_WTRIG_MASK; - } - if (rdev->irq.afmt[3]) { - DRM_DEBUG("evergreen_irq_set: hdmi 3\n"); - afmt4 |= AFMT_AZ_FORMAT_WTRIG_MASK; - } - if (rdev->irq.afmt[4]) { - DRM_DEBUG("evergreen_irq_set: hdmi 4\n"); - afmt5 |= AFMT_AZ_FORMAT_WTRIG_MASK; - } - if (rdev->irq.afmt[5]) { - DRM_DEBUG("evergreen_irq_set: hdmi 5\n"); - afmt6 |= AFMT_AZ_FORMAT_WTRIG_MASK; - } - if (rdev->family >= CHIP_CAYMAN) { cayman_cp_int_cntl_setup(rdev, 0, cp_int_cntl); cayman_cp_int_cntl_setup(rdev, 1, cp_int_cntl1); @@ -4643,12 +4610,12 @@ int evergreen_irq_set(struct radeon_device *rdev) else WREG32(CG_THERMAL_INT, thermal_int); - WREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, afmt1); - WREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, afmt2); - WREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, afmt3); - WREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, afmt4); - WREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, afmt5); - WREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, afmt6); + for (i = 0; i < 6; i++) { + radeon_irq_kms_set_irq_n_enabled( + rdev, AFMT_AUDIO_PACKET_CONTROL + crtc_offsets[i], + AFMT_AZ_FORMAT_WTRIG_MASK, + rdev->irq.afmt[i], "HDMI", i); + } /* posting read */ RREG32(SRBM_STATUS); @@ -4661,10 +4628,12 @@ static void evergreen_irq_ack(struct radeon_device *rdev) { int i; u32 *disp_int = rdev->irq.stat_regs.evergreen.disp_int; - u32 tmp; + u32 *afmt_status = rdev->irq.stat_regs.evergreen.afmt_status; - for (i = 0; i < 6; i++) + for (i = 0; i < 6; i++) { disp_int[i] = RREG32(evergreen_disp_int_status[i]); + afmt_status[i] = RREG32(AFMT_STATUS + crtc_offsets[i]); + } rdev->irq.stat_regs.evergreen.d1grph_int = RREG32(GRPH_INT_STATUS + EVERGREEN_CRTC0_REGISTER_OFFSET); rdev->irq.stat_regs.evergreen.d2grph_int = RREG32(GRPH_INT_STATUS + EVERGREEN_CRTC1_REGISTER_OFFSET); @@ -4677,12 +4646,6 @@ static void evergreen_irq_ack(struct radeon_device *rdev) rdev->irq.stat_regs.evergreen.d6grph_int = RREG32(GRPH_INT_STATUS + EVERGREEN_CRTC5_REGISTER_OFFSET); } - rdev->irq.stat_regs.evergreen.afmt_status1 = RREG32(AFMT_STATUS + EVERGREEN_CRTC0_REGISTER_OFFSET); - rdev->irq.stat_regs.evergreen.afmt_status2 = RREG32(AFMT_STATUS + EVERGREEN_CRTC1_REGISTER_OFFSET); - rdev->irq.stat_regs.evergreen.afmt_status3 = RREG32(AFMT_STATUS + EVERGREEN_CRTC2_REGISTER_OFFSET); - rdev->irq.stat_regs.evergreen.afmt_status4 = RREG32(AFMT_STATUS + EVERGREEN_CRTC3_REGISTER_OFFSET); - rdev->irq.stat_regs.evergreen.afmt_status5 = RREG32(AFMT_STATUS + EVERGREEN_CRTC4_REGISTER_OFFSET); - rdev->irq.stat_regs.evergreen.afmt_status6 = RREG32(AFMT_STATUS + EVERGREEN_CRTC5_REGISTER_OFFSET); if (rdev->irq.stat_regs.evergreen.d1grph_int & GRPH_PFLIP_INT_OCCURRED) WREG32(GRPH_INT_STATUS + EVERGREEN_CRTC0_REGISTER_OFFSET, GRPH_PFLIP_INT_CLEAR); @@ -4737,35 +4700,10 @@ static void evergreen_irq_ack(struct radeon_device *rdev) WREG32_OR(DC_HPDx_INT_CONTROL(i), DC_HPDx_RX_INT_ACK); } - if (rdev->irq.stat_regs.evergreen.afmt_status1 & AFMT_AZ_FORMAT_WTRIG) { - tmp = RREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET); - tmp |= AFMT_AZ_FORMAT_WTRIG_ACK; - WREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, tmp); - } - if (rdev->irq.stat_regs.evergreen.afmt_status2 & AFMT_AZ_FORMAT_WTRIG) { - tmp = RREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET); - tmp |= AFMT_AZ_FORMAT_WTRIG_ACK; - WREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, tmp); - } - if (rdev->irq.stat_regs.evergreen.afmt_status3 & AFMT_AZ_FORMAT_WTRIG) { - tmp = RREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET); - tmp |= AFMT_AZ_FORMAT_WTRIG_ACK; - WREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, tmp); - } - if (rdev->irq.stat_regs.evergreen.afmt_status4 & AFMT_AZ_FORMAT_WTRIG) { - tmp = RREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET); - tmp |= AFMT_AZ_FORMAT_WTRIG_ACK; - WREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, tmp); - } - if (rdev->irq.stat_regs.evergreen.afmt_status5 & AFMT_AZ_FORMAT_WTRIG) { - tmp = RREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET); - tmp |= AFMT_AZ_FORMAT_WTRIG_ACK; - WREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, tmp); - } - if (rdev->irq.stat_regs.evergreen.afmt_status6 & AFMT_AZ_FORMAT_WTRIG) { - tmp = RREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET); - tmp |= AFMT_AZ_FORMAT_WTRIG_ACK; - WREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, tmp); + for (i = 0; i < 6; i++) { + if (afmt_status[i] & AFMT_AZ_FORMAT_WTRIG) + WREG32_OR(AFMT_AUDIO_PACKET_CONTROL + crtc_offsets[i], + AFMT_AZ_FORMAT_WTRIG_ACK); } } @@ -4812,7 +4750,8 @@ static u32 evergreen_get_ih_wptr(struct radeon_device *rdev) int evergreen_irq_process(struct radeon_device *rdev) { u32 *disp_int = rdev->irq.stat_regs.evergreen.disp_int; - u32 crtc_idx, hpd_idx; + u32 *afmt_status = rdev->irq.stat_regs.evergreen.afmt_status; + u32 crtc_idx, hpd_idx, afmt_idx; u32 mask; u32 wptr; u32 rptr; @@ -4928,59 +4867,19 @@ int evergreen_irq_process(struct radeon_device *rdev) break; case 44: /* hdmi */ - switch (src_data) { - case 0: - if (!(rdev->irq.stat_regs.evergreen.afmt_status1 & AFMT_AZ_FORMAT_WTRIG)) - DRM_DEBUG("IH: IH event w/o asserted irq bit?\n"); - - rdev->irq.stat_regs.evergreen.afmt_status1 &= ~AFMT_AZ_FORMAT_WTRIG; - queue_hdmi = true; - DRM_DEBUG("IH: HDMI0\n"); - break; - case 1: - if (!(rdev->irq.stat_regs.evergreen.afmt_status2 & AFMT_AZ_FORMAT_WTRIG)) - DRM_DEBUG("IH: IH event w/o asserted irq bit?\n"); - - rdev->irq.stat_regs.evergreen.afmt_status2 &= ~AFMT_AZ_FORMAT_WTRIG; - queue_hdmi = true; - DRM_DEBUG("IH: HDMI1\n"); - break; - case 2: - if (!(rdev->irq.stat_regs.evergreen.afmt_status3 & AFMT_AZ_FORMAT_WTRIG)) - DRM_DEBUG("IH: IH event w/o asserted irq bit?\n"); - - rdev->irq.stat_regs.evergreen.afmt_status3 &= ~AFMT_AZ_FORMAT_WTRIG; - queue_hdmi = true; - DRM_DEBUG("IH: HDMI2\n"); - break; - case 3: - if (!(rdev->irq.stat_regs.evergreen.afmt_status4 & AFMT_AZ_FORMAT_WTRIG)) - DRM_DEBUG("IH: IH event w/o asserted irq bit?\n"); - - rdev->irq.stat_regs.evergreen.afmt_status4 &= ~AFMT_AZ_FORMAT_WTRIG; - queue_hdmi = true; - DRM_DEBUG("IH: HDMI3\n"); - break; - case 4: - if (!(rdev->irq.stat_regs.evergreen.afmt_status5 & AFMT_AZ_FORMAT_WTRIG)) - DRM_DEBUG("IH: IH event w/o asserted irq bit?\n"); - - rdev->irq.stat_regs.evergreen.afmt_status5 &= ~AFMT_AZ_FORMAT_WTRIG; - queue_hdmi = true; - DRM_DEBUG("IH: HDMI4\n"); - break; - case 5: - if (!(rdev->irq.stat_regs.evergreen.afmt_status6 & AFMT_AZ_FORMAT_WTRIG)) - DRM_DEBUG("IH: IH event w/o asserted irq bit?\n"); + afmt_idx = src_data; + if (!(afmt_status[afmt_idx] & AFMT_AZ_FORMAT_WTRIG)) + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n"); - rdev->irq.stat_regs.evergreen.afmt_status6 &= ~AFMT_AZ_FORMAT_WTRIG; - queue_hdmi = true; - DRM_DEBUG("IH: HDMI5\n"); - break; - default: - DRM_ERROR("Unhandled interrupt: %d %d\n", src_id, src_data); + if (afmt_idx > 5) { + DRM_ERROR("Unhandled interrupt: %d %d\n", + src_id, src_data); break; } + afmt_status[afmt_idx] &= ~AFMT_AZ_FORMAT_WTRIG; + queue_hdmi = true; + DRM_DEBUG("IH: HDMI%d\n", afmt_idx + 1); + break; case 96: DRM_ERROR("SRBM_READ_ERROR: 0x%x\n", RREG32(SRBM_READ_ERROR)); WREG32(SRBM_INT_ACK, 0x1); diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index b6086ee..e961a8a 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h @@ -774,12 +774,7 @@ struct evergreen_irq_stat_regs { u32 d4grph_int; u32 d5grph_int; u32 d6grph_int; - u32 afmt_status1; - u32 afmt_status2; - u32 afmt_status3; - u32 afmt_status4; - u32 afmt_status5; - u32 afmt_status6; + u32 afmt_status[6]; }; struct cik_irq_stat_regs { -- 2.9.4