On Sun, 2013-06-23 at 04:29 +0100, Ben Hutchings wrote: > On Wed, 2013-06-19 at 12:59 +0200, Jose Andres Arias Velichko wrote: [...] > > About the license clarification: I think the mail was sent to Sun just > > during or near their acquisition by Oracle, uncertain time for SUN: so > > may be this is why there was no response. May be it is worth to try to > > write to Oracle now again. > > I can't write in behalf of Debian project, but investigating on Oracle > > Opensource Page (https://oss.oracle.com/) it states that OpenSource > > questions or comments may be sent to "webmaster AT oss.oracle.com". > > Not sure if this will be a correct address, but probably you can just > > send the previouse mail intended for Sun to this address and see if > > there is some luck this time. > > Right, I'll do that. thanks. Looking at this again, the firmware patch is only used for the National Semiconductor DP38065 'Saturn' PHY. The copyright holder for it might well be National Semiconductor, not Sun/Oracle. The FreeBSD driver for this hardware doesn't contain or otherwise use a firmware patch. And the Linux source just says that the patch is 'to address 10Mbps auto-negotiation issue'. If that issue was failure to make a 10Mbps link, who really cares about that today? I think the driver should try to do without it. Please try one of the attached patches to the driver (first version is for 3.2; second version should apply to 3.9 or later). Ben. -- Ben Hutchings DNRC Motto: I can please only one person per day. Today is not your day. Tomorrow isn't looking good either.
From fcaa93ffd075b961ce3ee57764f6916c0a301304 Mon Sep 17 00:00:00 2001
From: Ben Hutchings <ben@decadent.org.uk>
Date: Sun, 23 Jun 2013 05:29:27 +0100
Subject: [PATCH] cassini: Make missing firmware non-fatal
The firmware patch for the Saturn PHY fixes a bug, but is not
absolutely essential. So just log an error message and continue if it
is missing or invalid.
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
drivers/net/ethernet/sun/cassini.c | 18 ++++++++----------
1 file changed, 8 insertions(+), 10 deletions(-)
diff --git a/drivers/net/ethernet/sun/cassini.c b/drivers/net/ethernet/sun/cassini.c
index 4c682a3..759441b 100644
--- a/drivers/net/ethernet/sun/cassini.c
+++ b/drivers/net/ethernet/sun/cassini.c
@@ -809,45 +809,45 @@ static int cas_reset_mii_phy(struct cas *cp)
return limit <= 0;
}
-static int cas_saturn_firmware_init(struct cas *cp)
+static void cas_saturn_firmware_init(struct cas *cp)
{
const struct firmware *fw;
const char fw_name[] = "sun/cassini.bin";
int err;
if (PHY_NS_DP83065 != cp->phy_id)
- return 0;
+ return;
err = request_firmware(&fw, fw_name, &cp->pdev->dev);
if (err) {
pr_err("Failed to load firmware \"%s\"\n",
fw_name);
- return err;
+ return;
}
if (fw->size < 2) {
pr_err("bogus length %zu in \"%s\"\n",
fw->size, fw_name);
- err = -EINVAL;
goto out;
}
cp->fw_load_addr= fw->data[1] << 8 | fw->data[0];
cp->fw_size = fw->size - 2;
cp->fw_data = vmalloc(cp->fw_size);
if (!cp->fw_data) {
- err = -ENOMEM;
pr_err("\"%s\" Failed %d\n", fw_name, err);
goto out;
}
memcpy(cp->fw_data, &fw->data[2], cp->fw_size);
out:
release_firmware(fw);
- return err;
}
static void cas_saturn_firmware_load(struct cas *cp)
{
int i;
+ if (!cp->fw_data)
+ return;
+
cas_phy_powerdown(cp);
/* expanded memory access mode */
@@ -5088,8 +5088,7 @@ static int cas_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
if (cas_check_invariants(cp))
goto err_out_iounmap;
if (cp->cas_flags & CAS_FLAG_SATURN)
- if (cas_saturn_firmware_init(cp))
- goto err_out_iounmap;
+ cas_saturn_firmware_init(cp);
cp->init_block = (struct cas_init_block *)
pci_alloc_consistent(pdev, sizeof(struct cas_init_block),
From fcaa93ffd075b961ce3ee57764f6916c0a301304 Mon Sep 17 00:00:00 2001
From: Ben Hutchings <ben@decadent.org.uk>
Date: Sun, 23 Jun 2013 05:29:27 +0100
Subject: [PATCH] cassini: Make missing firmware non-fatal
The firmware patch for the Saturn PHY fixes a bug, but is not
absolutely essential. So just log an error message and continue if it
is missing or invalid.
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
drivers/net/ethernet/sun/cassini.c | 18 ++++++++----------
1 file changed, 8 insertions(+), 10 deletions(-)
diff --git a/drivers/net/ethernet/sun/cassini.c b/drivers/net/ethernet/sun/cassini.c
index 4c682a3..759441b 100644
--- a/drivers/net/ethernet/sun/cassini.c
+++ b/drivers/net/ethernet/sun/cassini.c
@@ -808,44 +808,43 @@ static int cas_reset_mii_phy(struct cas *cp)
return limit <= 0;
}
-static int cas_saturn_firmware_init(struct cas *cp)
+static void cas_saturn_firmware_init(struct cas *cp)
{
const struct firmware *fw;
const char fw_name[] = "sun/cassini.bin";
int err;
if (PHY_NS_DP83065 != cp->phy_id)
- return 0;
+ return;
err = request_firmware(&fw, fw_name, &cp->pdev->dev);
if (err) {
pr_err("Failed to load firmware \"%s\"\n",
fw_name);
- return err;
+ return;
}
if (fw->size < 2) {
pr_err("bogus length %zu in \"%s\"\n",
fw->size, fw_name);
- err = -EINVAL;
goto out;
}
cp->fw_load_addr= fw->data[1] << 8 | fw->data[0];
cp->fw_size = fw->size - 2;
cp->fw_data = vmalloc(cp->fw_size);
- if (!cp->fw_data) {
- err = -ENOMEM;
+ if (!cp->fw_data)
goto out;
- }
memcpy(cp->fw_data, &fw->data[2], cp->fw_size);
out:
release_firmware(fw);
- return err;
}
static void cas_saturn_firmware_load(struct cas *cp)
{
int i;
+ if (!cp->fw_data)
+ return;
+
cas_phy_powerdown(cp);
/* expanded memory access mode */
@@ -5083,8 +5082,7 @@ static int cas_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
if (cas_check_invariants(cp))
goto err_out_iounmap;
if (cp->cas_flags & CAS_FLAG_SATURN)
- if (cas_saturn_firmware_init(cp))
- goto err_out_iounmap;
+ cas_saturn_firmware_init(cp);
cp->init_block = (struct cas_init_block *)
pci_alloc_consistent(pdev, sizeof(struct cas_init_block),
Attachment:
signature.asc
Description: This is a digitally signed message part