mirror of
https://github.com/ps5-linux/ps5-linux-patches.git
synced 2026-07-16 10:10:38 +00:00
Compare commits
1 Commits
kernel-7.0
...
feature/ci
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
504c2112a8 |
2
.config
2
.config
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/x86 7.0.8 Kernel Configuration
|
||||
# Linux/x86 7.0.5 Kernel Configuration
|
||||
#
|
||||
CONFIG_CC_VERSION_TEXT="gcc (Ubuntu 15.2.0-16ubuntu1) 15.2.0"
|
||||
CONFIG_CC_IS_GCC=y
|
||||
|
||||
@@ -30,6 +30,8 @@ sudo mkinitcpio -k "$(make kernelrelease)" -g /boot/initrd.img-$(make kernelrele
|
||||
If you are updating Linux on your external USB SSD or if you are directly booting into M.2 SSD, i.e. if you use `-m2` in `cmdline.txt`, then you have to update the files on the FAT32 partition of your USB drive:
|
||||
|
||||
```bash
|
||||
sudo mv /boot/efi/bzImage /boot/efi/bzImage.old
|
||||
sudo mv /boot/efi/initrd.img /boot/efi/initrd.img.old
|
||||
sudo cp /boot/vmlinuz /boot/efi/bzImage
|
||||
sudo cp /boot/initrd.img /boot/efi/initrd.img
|
||||
```
|
||||
@@ -42,6 +44,7 @@ If you are updating Linux on your M.2 SSD, but you do not directly boot into it,
|
||||
- amdgpu smu driver to show correct gpu frequency and temperature
|
||||
- ethernet driver for (mediatek?) 0x104d:0x9104
|
||||
- xhci driver adjustment for 0x104d:0x9108 to enable bluetooth
|
||||
- wlan driver marvell 1b4b:2b56 (https://github.com/nxp-imx/mwifiex)
|
||||
- hdmi converter improvments: hdr, rgb range, 120hz
|
||||
|
||||
## Bugs
|
||||
|
||||
194
linux.patch
194
linux.patch
@@ -18,7 +18,7 @@ index fe106da41ae5..6fd78cbfe1d6 100644
|
||||
bool "ScaleMP vSMP"
|
||||
select HYPERVISOR_GUEST
|
||||
diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
|
||||
index 4efbbf9d117b..403d5ff74ef0 100644
|
||||
index 92bb6b2f778e..0a02f339b98a 100644
|
||||
--- a/arch/x86/include/asm/msr-index.h
|
||||
+++ b/arch/x86/include/asm/msr-index.h
|
||||
@@ -26,6 +26,7 @@
|
||||
@@ -1143,7 +1143,7 @@ index 000000000000..7acb030a4976
|
||||
+obj-y += spcie.o tpcie.o hdmi.o mp1.o
|
||||
diff --git a/drivers/ps5/hdmi.c b/drivers/ps5/hdmi.c
|
||||
new file mode 100644
|
||||
index 000000000000..78ffc4f80a6d
|
||||
index 000000000000..a24459de573a
|
||||
--- /dev/null
|
||||
+++ b/drivers/ps5/hdmi.c
|
||||
@@ -0,0 +1,1237 @@
|
||||
@@ -2026,8 +2026,8 @@ index 000000000000..78ffc4f80a6d
|
||||
+
|
||||
+static void setHdmiVideoConfigFlava3(const struct drm_display_mode *mode)
|
||||
+{
|
||||
+ // configParamFlava3Pre();
|
||||
+ // configLinkTrainingFlava3();
|
||||
+ configParamFlava3Pre();
|
||||
+ configLinkTrainingFlava3();
|
||||
+ setHdmiBasicVideoConfigFlava3(mode);
|
||||
+ initHdmiPhyForFlava3_1st();
|
||||
+ initHdmiPhyForFlava3_2nd();
|
||||
@@ -2386,10 +2386,10 @@ index 000000000000..78ffc4f80a6d
|
||||
+EXPORT_SYMBOL(hdmi_notification_handler);
|
||||
diff --git a/drivers/ps5/mp1.c b/drivers/ps5/mp1.c
|
||||
new file mode 100644
|
||||
index 000000000000..4af890c842a7
|
||||
index 000000000000..73bb7ca5d1d9
|
||||
--- /dev/null
|
||||
+++ b/drivers/ps5/mp1.c
|
||||
@@ -0,0 +1,488 @@
|
||||
@@ -0,0 +1,366 @@
|
||||
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
@@ -2421,12 +2421,9 @@ index 000000000000..4af890c842a7
|
||||
+#define MP1_C2PMSG_58 0x3b109e8
|
||||
+#define MP1_C2PMSG_59 0x3b109ec
|
||||
+#define MP1_C2PMSG_66 0x3b10a08
|
||||
+#define MP1_C2PMSG_72 0x3b10a20
|
||||
+#define MP1_C2PMSG_81 0x3b10a44
|
||||
+#define MP1_C2PMSG_82 0x3b10a48
|
||||
+#define MP1_C2PMSG_90 0x3b10a68
|
||||
+#define MP1_C2PMSG_96 0x3b10a80
|
||||
+#define MP1_C2PMSG_98 0x3b10a88
|
||||
+
|
||||
+#define PPSMC_MSG_ConfigureS3PwrOffRegisterAddressHigh 0x16
|
||||
+#define PPSMC_MSG_ConfigureS3PwrOffRegisterAddressLow 0x17
|
||||
@@ -2521,78 +2518,6 @@ index 000000000000..4af890c842a7
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+static const struct bapm_param_set bapm_param_set_2 = {
|
||||
+ .dpm_wac = {
|
||||
+ 0x0000c3adb08d0000, 0x00a800008d000000, 0xa000008e000000a6,
|
||||
+ 0x00000000c900a500, 0xc8d000d3b8daea00, 0x0000d000a3d200dc,
|
||||
+ 0x00bfc80000c6f100, 0x00fe00000000ad00, 0x0000abb300000000,
|
||||
+ 0x00008600000000cf, 0x00ae0095ff000000, 0x000000000000ac00,
|
||||
+ 0x00b00000008500ad, 0x0098849600b18000, 0xa2a38bac00b00000,
|
||||
+ 0x97007479000092ab, 0x0095a30000008f00, 0x000000b5000000a0,
|
||||
+ 0x0000c200a80000bd, 0x0000bcc1c4b2a300, 0xa700000000000000
|
||||
+ },
|
||||
+ .l3_cacw = {
|
||||
+ [71] = 0x3ff80000,
|
||||
+ },
|
||||
+ .gfx_cacw = {
|
||||
+ [2] = 0xefa,
|
||||
+ [6] = 0x7bf,
|
||||
+ [12] = 0x14d10000,
|
||||
+ [14] = 0x287b0000,
|
||||
+ [20] = 0x2f2,
|
||||
+ [22] = 0x1085ffff, 0xcd80e51, 0x4b86145a,
|
||||
+ [27] = 0x15a7,
|
||||
+ [29] = 0x13c2, 0x2d02,
|
||||
+ [34] = 0x78ad0000, 0x2ea0,
|
||||
+ [54] = 0x257d, 0x8c8,
|
||||
+ [58] = 0x799e,
|
||||
+ [63] = 0x152,
|
||||
+ },
|
||||
+ .gfx_cacw_len = 64,
|
||||
+ .bapm_param = {
|
||||
+ {1, 0xbc22f028}, {1, 0x3e113314}, {1, 0xbe8d0750}, {1, 0x3e16ae78},
|
||||
+ {1, 0xbe4d4746}, {1, 0x3f34470b}, {1, 0x3704564c}, {1, 0x3f516a34},
|
||||
+ {1, 0x3f3fdd1c}, {1, 0x3f74f5de}, {1, 0x3dec9763}, {1, 0xbc2c0ab6},
|
||||
+ {1, 0x3d1582c2}, {1, 0x367468e6}, {1, 0x3f059935}, {1, 0x3ef4cd95},
|
||||
+ {1, 0x3f74f5de}, {1, 0x3d524dae}, {1, 0xbc2c0ab6}, {1, 0x3d1582c2},
|
||||
+ {1, 0x357db71b}, {1, 0x40b1089a}, {1, 0x41751b15}, {1, 0x4287d1bc},
|
||||
+ {1, 0x3fb89949}, {1, 0x411eefdf}, {1, 0xbc816b59}, {1, 0x3d41513a},
|
||||
+ [49] =
|
||||
+ {1, 0x41751b15}, {1, 0x4287d1bc}, {1, 0x3fb89949}, {1, 0x412d973c},
|
||||
+ {1, 0xbc816b59}, {1, 0x3d41513a}, {1, 0x3e0654c8}, {1, 0xbe27b465},
|
||||
+ {1, 0x3f2d3daa}, {1, 0x41751b15}, {1, 0x4287d1bc}, {1, 0x3fb89949},
|
||||
+ {1, 0x4061d4cc}, {1, 0xbc816b59}, {1, 0x3d41513a}, {1, 0x3e97c980},
|
||||
+ {1, 0xbf1d9856}, {1, 0x3f828e45}, {1, 0x41751b15}, {1, 0x4287d1bc},
|
||||
+ {1, 0x3fb89949}, {1, 0x409c4b3c}, {1, 0xbc816b59}, {1, 0x3d41513a},
|
||||
+ {1, 0x3e7a6107}, {1, 0xbeedd766}, {1, 0x3f67aa70}, {1, 0x41751b15},
|
||||
+ {1, 0x4287d1bc}, {1, 0x3fb89949}, {1, 0x40ccf558}, {1, 0xbc816b59},
|
||||
+ {1, 0x3d41513a}, {1, 0x3e600a8a}, {1, 0xbecbe79c}, {1, 0x3f5b627c},
|
||||
+ {1, 0x41751b15}, {1, 0x4287d1bc}, {1, 0x3fb89949}, {1, 0x41050555},
|
||||
+ {1, 0xbc816b59}, {1, 0x3d41513a}, {1, 0x3e379205}, {1, 0xbe94367e},
|
||||
+ {1, 0x3f46233f}, {1, 0x3f96c5af}, {1, 0x3eb99add}, {1, 0x3f85bb54},
|
||||
+ {1, 0x3e6a30f6}, {1, 0xbc2c0ab6}, {1, 0x3d1582c2}, {1, 0xbbda394d},
|
||||
+ {1, 0x3dff4eb1}, {1, 0xbe8b186c}, {1, 0x3f8fbf3f}, {1, 0x3ee87500},
|
||||
+ {1, 0x3f7c5aff}, {1, 0x3e92470e}, {1, 0xbc2c0ab6}, {1, 0x3d1582c2},
|
||||
+ {1, 0x396640ab}, {1, 0x3dad4b04}, {1, 0xbe6283c5}, {1, 0x3f8051ba},
|
||||
+ {1, 0x3f13f766}, {1, 0x3f87a42b}, {1, 0x3e52acf5}, {1, 0xbc2c0ab6},
|
||||
+ {1, 0x3d1582c2}, {1, 0xbbd8e837}, {1, 0x3e005ec6}, {1, 0xbe8c6197},
|
||||
+ {1, 0x3f61d86e}, {1, 0x3f276f79}, {1, 0x3f7b0bf0}, {1, 0x3e25ca59},
|
||||
+ {1, 0xbc2c0ab6}, {1, 0x3d1582c2}, {1, 0xbbc01a0e}, {1, 0x3dfb13b3},
|
||||
+ {1, 0xbe84dd83}, {1, 0x3fa32142}, {1, 0x3ea341fd}, {1, 0x3f85d724},
|
||||
+ {1, 0x3e8c3c1d}, {1, 0xbc2c0ab6}, {1, 0x3d1582c2}, {1, 0xbaa01624},
|
||||
+ {1, 0x3dbebfaf}, {1, 0xbe6f57f4}, {1, 0x3f43c147}, {1, 0x3e70fae5},
|
||||
+ {1, 0x3f85bb54}, {1, 0x3dd02b85}, {1, 0xbc2c0ab6}, {1, 0x3d1582c2},
|
||||
+ {1, 0x3f364cb6}, {1, 0x3e936695}, {1, 0x3f7c5aff}, {1, 0x3e020645},
|
||||
+ {1, 0xbc2c0ab6}, {1, 0x3d1582c2}, {1, 0x3f226119}, {1, 0x3ebb3dcd},
|
||||
+ {1, 0x3f87a42b}, {1, 0x3dbb4468}, {1, 0xbc2c0ab6}, {1, 0x3d1582c2},
|
||||
+ {1, 0x3f1302b3}, {1, 0x3ed9fa9b}, {1, 0x3f7b0bf0}, {1, 0x3d935e88},
|
||||
+ {1, 0xbc2c0ab6}, {1, 0x3d1582c2}, {1, 0x3f4cc495}, {1, 0x3e4cedab},
|
||||
+ {1, 0x3f85d724}, {1, 0x3df94e6d}, {1, 0xbc2c0ab6}, {1, 0x3d1582c2},
|
||||
+ {1, 0x3c437be5}, {1, 0x3f3de47f}, {1, 0x3f40c129}, {1, 0x3f3cc9e7},
|
||||
+ {1, 0x3f41350f}, {1, 0x3f3dcec6}, {1, 0x3f3e1c51}
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+static u32 pcirc_smn_read(u32 reg)
|
||||
+{
|
||||
+ u32 val = 0;
|
||||
@@ -2659,48 +2584,6 @@ index 000000000000..4af890c842a7
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int mp1fw_test_sendmsg(struct mp1_msg *msg, uint8_t msgid)
|
||||
+{
|
||||
+ if (mp1fw_waitmsg(MP1_C2PMSG_96, msgid)) {
|
||||
+ printk("[MP1ERROR] : %s: Error : busy msgid=0x%X, arg=0x%08X\n", __func__, msgid, msg->arg);
|
||||
+ return -EBUSY;
|
||||
+ }
|
||||
+ pcirc_smn_write(MP1_C2PMSG_96, 0);
|
||||
+ pcirc_smn_write(MP1_C2PMSG_98, msg->arg);
|
||||
+ pcirc_smn_write(MP1_C2PMSG_72, msgid);
|
||||
+ if (mp1fw_waitmsg(MP1_C2PMSG_96, msgid)) {
|
||||
+ printk("[MP1ERROR] : %s: retry over msgid=0x%X, arg=0x%08X\n", __func__, msgid, msg->arg);
|
||||
+ return -EBUSY;
|
||||
+ }
|
||||
+ u32 resp = pcirc_smn_read(MP1_C2PMSG_96);
|
||||
+ u32 resp_val = pcirc_smn_read(MP1_C2PMSG_98);
|
||||
+ if ((msgid != 0x75 && resp != 1) || (msgid == 0x75 && resp != 1 && resp != 0xf8)) {
|
||||
+ printk("[MP1ERROR] : %s: invalid response msgid=0x%X, resp=0x%08X\n", __func__, msgid, resp);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ msg->resp = resp;
|
||||
+ msg->resp_val = resp_val;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int mp1_set_wc_cpu(int mode)
|
||||
+{
|
||||
+ struct mp1_msg msg = {};
|
||||
+ msg.arg = mode;
|
||||
+ return mp1fw_test_sendmsg(&msg, 0x9b);
|
||||
+}
|
||||
+
|
||||
+static int mp1_get_wc_cpu(int *mode)
|
||||
+{
|
||||
+ struct mp1_msg msg = {};
|
||||
+ int ret;
|
||||
+ ret = mp1fw_test_sendmsg(&msg, 0x9c);
|
||||
+ *mode = msg.resp_val;
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static int mp1_configure_s3_pwr_off_reg_addr_high(u64 addr)
|
||||
+{
|
||||
+ struct mp1_msg msg = {};
|
||||
@@ -2786,7 +2669,7 @@ index 000000000000..4af890c842a7
|
||||
+
|
||||
+ for (i = 0; i < 21; i++) {
|
||||
+ wrmsrq(MSR_DPM_WAC_ACC_INDEX, i);
|
||||
+ wrmsrq(MSR_DPM_WAC_DATA, bapm_param_set_2.dpm_wac[i]);
|
||||
+ wrmsrq(MSR_DPM_WAC_DATA, bapm_param_set_1.dpm_wac[i]);
|
||||
+ }
|
||||
+
|
||||
+ wrmsrq(MSR_DPM_CFG, msr_dpm_cfg);
|
||||
@@ -2799,16 +2682,16 @@ index 000000000000..4af890c842a7
|
||||
+ on_each_cpu(update_bapm_weights_smp, NULL, 1);
|
||||
+
|
||||
+ for (i = 0; i < 80; i++) {
|
||||
+ mp1_bapm_set_l3_cacw(i, bapm_param_set_2.l3_cacw[i]);
|
||||
+ mp1_bapm_set_l3_cacw(i, bapm_param_set_1.l3_cacw[i]);
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < bapm_param_set_2.gfx_cacw_len; i++) {
|
||||
+ mp1_bapm_set_gfx_cacw(i, bapm_param_set_2.gfx_cacw[i]);
|
||||
+ for (i = 0; i < bapm_param_set_1.gfx_cacw_len; i++) {
|
||||
+ mp1_bapm_set_gfx_cacw(i, bapm_param_set_1.gfx_cacw[i]);
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < 176; i++) {
|
||||
+ if (bapm_param_set_2.bapm_param[i][0])
|
||||
+ mp1_bapm_write_param(i, bapm_param_set_2.bapm_param[i][1]);
|
||||
+ if (bapm_param_set_1.bapm_param[i][0])
|
||||
+ mp1_bapm_write_param(i, bapm_param_set_1.bapm_param[i][1]);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
@@ -2848,15 +2731,10 @@ index 000000000000..4af890c842a7
|
||||
+static int __init mp1_init(void)
|
||||
+{
|
||||
+ int ret;
|
||||
+ int mode = 0;
|
||||
+
|
||||
+ mp1_universal_mode_exit();
|
||||
+
|
||||
+ pr_info("Set BAPM params\n");
|
||||
+ mp1_get_wc_cpu(&mode);
|
||||
+ if (mode != 1) {
|
||||
+ mp1_set_wc_cpu(1);
|
||||
+ }
|
||||
+ mp1_set_bapm_param_set_all();
|
||||
+
|
||||
+ ret = misc_register(&mp1_misc_device);
|
||||
@@ -2880,10 +2758,10 @@ index 000000000000..4af890c842a7
|
||||
+MODULE_LICENSE("GPL");
|
||||
diff --git a/drivers/ps5/spcie.c b/drivers/ps5/spcie.c
|
||||
new file mode 100644
|
||||
index 000000000000..d13dc14c0a14
|
||||
index 000000000000..ecec0d6623b1
|
||||
--- /dev/null
|
||||
+++ b/drivers/ps5/spcie.c
|
||||
@@ -0,0 +1,898 @@
|
||||
@@ -0,0 +1,879 @@
|
||||
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
@@ -3500,16 +3378,6 @@ index 000000000000..d13dc14c0a14
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int spcie_icc_shutdown(struct spcie_dev *sdev)
|
||||
+{
|
||||
+ icc_fan_change_servo_pattern(0);
|
||||
+
|
||||
+ /* Disable IRQs */
|
||||
+ writel(0, icc_dev->icc_doorbell_base + ICC_REG_INTR_MASK);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+u32 spcie_get_chip_id(void)
|
||||
+{
|
||||
+ return spcie_chip_revision_id & 0xff0000;
|
||||
@@ -3755,14 +3623,6 @@ index 000000000000..d13dc14c0a14
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void spcie_shutdown(struct pci_dev *pdev)
|
||||
+{
|
||||
+ struct spcie_dev *sdev = pci_get_drvdata(pdev);
|
||||
+ if (sdev) {
|
||||
+ spcie_icc_shutdown(sdev);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static const struct pci_device_id spcie_ids[] = {
|
||||
+ { PCI_DEVICE(PCI_VENDOR_ID_SONY, PCI_DEVICE_ID_SPCIE) },
|
||||
+ { 0, }
|
||||
@@ -3774,7 +3634,6 @@ index 000000000000..d13dc14c0a14
|
||||
+ .id_table = spcie_ids,
|
||||
+ .probe = spcie_probe,
|
||||
+ .remove = spcie_remove,
|
||||
+ .shutdown = spcie_shutdown,
|
||||
+};
|
||||
+
|
||||
+module_pci_driver(spcie_driver);
|
||||
@@ -3784,10 +3643,10 @@ index 000000000000..d13dc14c0a14
|
||||
+MODULE_LICENSE("GPL");
|
||||
diff --git a/drivers/ps5/tpcie.c b/drivers/ps5/tpcie.c
|
||||
new file mode 100644
|
||||
index 000000000000..23de43ea4b00
|
||||
index 000000000000..cfe53c9861c1
|
||||
--- /dev/null
|
||||
+++ b/drivers/ps5/tpcie.c
|
||||
@@ -0,0 +1,303 @@
|
||||
@@ -0,0 +1,294 @@
|
||||
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+#include <linux/console.h>
|
||||
@@ -4002,6 +3861,12 @@ index 000000000000..23de43ea4b00
|
||||
+
|
||||
+static void tpcie_uart_remove(struct tpcie_dev *tdev)
|
||||
+{
|
||||
+ if (!uart_dev)
|
||||
+ return;
|
||||
+
|
||||
+ /* Disable IRQs */
|
||||
+ writel(0, uart_dev->uart_base + 0x8);
|
||||
+
|
||||
+ unregister_console(&tpcie_uart_console);
|
||||
+
|
||||
+ if (uart_dev->tty_drv) {
|
||||
@@ -4012,12 +3877,6 @@ index 000000000000..23de43ea4b00
|
||||
+ tty_port_destroy(&uart_dev->tty_port);
|
||||
+}
|
||||
+
|
||||
+static void tpcie_uart_shutdown(struct tpcie_dev *tdev)
|
||||
+{
|
||||
+ /* Disable IRQs */
|
||||
+ writel(0, uart_dev->uart_base + 0x8);
|
||||
+}
|
||||
+
|
||||
+static int tpcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
+{
|
||||
+ struct tpcie_dev *tdev;
|
||||
@@ -4064,14 +3923,6 @@ index 000000000000..23de43ea4b00
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void tpcie_shutdown(struct pci_dev *pdev)
|
||||
+{
|
||||
+ struct tpcie_dev *tdev = pci_get_drvdata(pdev);
|
||||
+ if (tdev) {
|
||||
+ tpcie_uart_shutdown(tdev);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static const struct pci_device_id tpcie_ids[] = {
|
||||
+ { PCI_DEVICE(PCI_VENDOR_ID_SONY, PCI_DEVICE_ID_TPCIE) },
|
||||
+ { 0, }
|
||||
@@ -4083,7 +3934,6 @@ index 000000000000..23de43ea4b00
|
||||
+ .id_table = tpcie_ids,
|
||||
+ .probe = tpcie_probe,
|
||||
+ .remove = tpcie_remove,
|
||||
+ .shutdown = tpcie_shutdown,
|
||||
+};
|
||||
+
|
||||
+module_pci_driver(tpcie_driver);
|
||||
|
||||
Reference in New Issue
Block a user